Aide Projet VB [Résolu]

Signaler
-
 acive -
Bonjour a tous ! Voila je suis un ptit nouveau en VB ^^, je m'en sers dans le cadre de mes études et justement j'ai un projet à rendre et j'ai quelques difficultés sur certains point, j'espère que je serais clair ^^.

Le projet consiste à présenter une application pour un professeur ayant des classes et des élèves où il pourrait saisir des moyennes, modifier des classes ou des élèves etc...
J'ai un problème pour la suppression d'une classe ou d'un élève au niveau du "ind = selection(...)"
En espérant une réponse, je vous remercie d'avance !!
Voici les déclarations des variables :
Option Explicit

Const Max = 100

Type Eleve
    Nom As String
    Prenom As String
    DateN As Date
    Classe As String
    eMail As String
    S1 As Single
    S2 As Single
End Type

Public TablE(0 To Max) As Eleve
Public NbE As Integer
Public TablC(1 To 10) As String
Public NbC As Integer
Public indice As Integer


Voici le code pour supprimer :
Sub SuppressionE()
Dim ind As Integer
Dim Nom As String
Nom = InputBox("Entrer le nom de l'élève que vous voulez supprimer", "Suppression")
ind = Selection(Nom, "que vous voulez supprimer")
If ind <> -1 Then
    If ind <> 0 Then
        TablE(ind) = TablE(NbE)
        NbE = NbE - 1
        MsgBox "L'elève " & Nom & " a bien été supprimé", vbInformation, "Suppression"
        
        affichageE
    Else
        MsgBox "Cet élève n'existe pas", vbCritical, "Suppression"
    End If
End If
Acceuil.Show
End Sub

38 réponses

Messages postés
59
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
4 juillet 2013

Bonjour,

Peut-être le contrôle de connaissances enseignées cache t-il une subtilité tellement évidente que ceux qui passeront à côté auront la bulle ()
Le problème des doublons est fondamental.
Les jumeaux Durand Pierre et Jacques sont en CM2
Leur sœur Florence est en CM1
Lorsqu'on veut effacer un élève, un chance sur trois si l'on ne tient pas compte de la classe et une chance sur 2 sans tenir compte du prénom.
Cela n'est pas satisfaisant.

' Donc la fonction de recherche de l'élève est la première à appeller
' Il ne faut introduire aucune InputBox ou Msgbox dans ce code
Public Function  rechercheleve(c as String, p as String, n as String) as Integer
...	
Dim ixretour as Integer

ixretour=-1
...
' boucle de recherche du nom-prenom-classe dans la liste
' renvoi de l'index i en cas de succes sinon -1
If TablE(i).Nom = c and TablE(i).Prenom and TablE(i).Classe=n Then 
ixretour=i
End if

rechercheleve = ixretour

End Function



' Dans le corps du programme principal, qui commence par la saisie
' des 3 variables
' puis à la recherche de l'existence de cet élève grâce aux 3 variables
' si n'existe pas -> rend compte
' demande de confirmation d'effacement
' puis effacement

	Dim ixeleve as Integer
        Dim nom as String
Dim prenom as String
        Dim niveau as String
' procéder à la saisie des 3 chaines caractérisant l'élève
...
' puis appeler la fonction de recherche
 ixeleve = rechercheleve(nom, prenom, niveau)
 If ixeleve = -1 then
Msgbox "Elève introuvable",,"Rapport"
 Else
Effaceeleve(ixeleve)
Msgbox "Elève effacé",,"Rapport"
 End If 

' La fonction effaceeleve vient du code Sub SuppressionE() purgé de tout message et recherche car double emploi


Cordialement
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour,
C'est une plaisanterie ou quoi ?
Je préfère penser que c'en est une !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Pourquoi est-ce-que je parle de plaisanterie :
Je vais te le dire :
- le bout de code que tu montres est forcément une petite partie d'un code écrit par un développeur assez avancé. Ma boule de cristal me laisse deviner beaucoup d'aspects, dont celui de l'utilisation d'un fichier texte structuré en pseudo base de données
- ce bout de code n'a de sens que si existe une fonction dont il se sert, fonction dont le rôle est de parcourir en boucle (probablement un tableau, lui même déterminé par un des paramètres passés à la fonction dont il s'agit) en vue de déterminer à quel indice correspond un choix.
-si le code était de toi, cela voudrait dire que tu es un développeur suffisamment avancé pour ne pas savoir que l'élément clef de la réponse à ta question est très précisément le code de la fonction dont il s'agit ! Et tu nous montres tout, sauf ... ce code essentiel .... !
Tu noteras que, dans ce cas, je m'abstiens même de donner le nom de cette fonction. Si ce code est de toi, tu ne devrais avoir, en ta qualité de développeur ainsi défini comme "avancé" aucune difficulté à identifier cette fameuse fonction ! Aucune hésitation !
Et un développeur "suffisamment avancé" n'aurait jamais eu l'idée de poser une question telle que celle posée, sans montrer SURTOUT la dite fonction.
Voilà voilà !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Et j'espère que tu développes réellement sous VB6 (la présente section du forum) et non sous VBA/Excel (ce qui ne m'étonnerait pas non plus).
Car si tel était le cas (sous VBA/Excel) ton code utilise en plus un mot réservé VBA !
Cette remarque n'est pas faite "au hasard", mais à l'instigation (une fois de plus) de ma boule de cristal....
Maintenant dis-voir : si tout cela est sous VBA/Excel (et cela l'EST, hein ...).
Toute la démarche serait à revoir carrément et à remplacer par du super plus simple !!
Question, donc : où as-tu "puisé" le code de ton projet ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Et bien merci quand même d'avoir répondu même si je suis pas venu pour m'en prendre plein la tête ^^ ! En effet c'est sous VBA / Excel faudra que tu me dise ou t'a trouvé ta boule de cristal elle à l'air vahcement cool !
Je ne suis absolument pas un devellopeur avancé comme tu le dis je ne comprends pas les corps des programme mais j'essaye. J'ai donc puisé le code de mon professeur et ce qu'on a fait pendant l'année.
C'est le "selection" qui est censé être une fonction et qui va pas ? J'ai un modifier du coup il ne me dit plus qu'il y'a une erreur mais par contre n'importe quel nom du jeu de test que je tape il me dit que l'élève n'existe pas :
Par exemple un élève :
TablE(1).Nom = "Aupay"
TablE(1).Prenom = "Alice"
TablE(1).Classe = "ST1"
TablE(1).DateN = "24/03/1994"
TablE(1).S1 = -1
TablE(1).S1 = -1 
Voici, j'espère, la fonction dont tu parle :
Function selectionEleve(ByVal c As String, ByVal titre As String) As Integer
Dim i As Integer
Dim tab_I(1 To Max) As Integer
Dim cpt As Integer
Dim res As Integer
Dim txt As String
Dim Chx As Variant

res = 0
cpt = 0
txt = "Selectionner l'élève " & titre & vbcr
For i = 1 To NbE
    If TablE(i).Classe = c Then
        cpt = cpt + 1
        txt = txt & cpt & " : " & TablE(i).Nom & " " & TablE(i).Prenom & vbcr
        tab_I(cpt) = i
    End If
Next i
txt = txt & 0 & " : " & "Annuler" 
If cpt > 0 Then
    Chx = InputBox(txt, "Selection", 0)
    Do While (Chx < 0 Or Chx > cpt) And Chx <> ""
        Chx = InputBox(txt, "Selection", 0)
    Loop
    If Chx <> 0 And Chx <> "" Then
        res = tab_I(Chx)
    End If
End If

selectionEleve = res
End Function
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
J'ai donc puisé le code de mon professeur

1) Je ne répèterais jamais assez que "puiser" n'est pas "créer"*
2) Et on attend toujours de voir cette fameuse fonction !
(et tu te plains d'en "prendre plein la tête" ... les raisons sont nombreuses, non ? ==>> c'est comme dans une auberge espagnole. Tu sais ? === >> chacun y trouve ce qu'il apporte ...)
3) j'attendrai pour continuer que la présente discussion soit déplacée par un administrateur bienveillant dans la section (Langages dérivés > VBA) où elle aurait dû être ouverte !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Ah ! la voilà enfin, cette fonction !
Dis-nous voir, pour commencer :
Comment le premier paramètre qui lui est passé peut-il être le nom de l'élève et comparé (au sein de la fonction) à la classe d'appartenance ?
Il y a là une carence évidente de logique, déjà !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
C'est bien ce que je dis j'y comprends pas grand chose ^^
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
C'est bien ce que je dis j'y comprends pas grand chose

Il y a alors de quoi s'inquiéter très sérieusement car ce dont il s'agit est un problème de logique ('simple logique) avant d'être un problème de développement !
Il ne me viendrait pas à l'idée, si je cherchais l'existence de l'élève DUPONT, qui est en CM2, d'aller voir si une classe s'appelle DUPONT
Tu sais quoi ? Je vais te laisser maintenant là. Il s'agit d'un devoir qui sera noté et il me parait, tel que tu es parti et tel que tu t'es formé aux bases, que tu vas avoir la note qui correspond très exactement à tes efforts et compétences.
Et ne t'inquiète pas, hein ... Si tu penses que c'est là le résultat d'une carence d'enseignement, les autres ne seront pas mieux lotis que toi.
Maintenant, bien sûr, les choses revêtiront un aspect très différent s'il n'y a pas eu carence d'enseignement.
Bonne chance.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Je de demandais pas de l'aide pour qu'on me le fasse mais pour qu'on m'aide à comprendre l'écriture. Bref je suis désolé que ce soit si dur pour toi d'aider des abrutis dans mon genre.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Ce n'est pas "dur" mais carrément impossible pour moi. Désolé.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Je voudrais toutefois te préciser ceci, avant de te quitter :
- Le présent site n'est pas un site d'enseignement, mais de développement. Les intervenants ne sont pas des pédagogues, mais des développeurs.
- Je ne connais aucun site qui permette d'enseigner la logique (celle de la pensée)
- Existent probablement des sites dédiés à l'enseignement d'un langage. Je ne sais pas ce qu'ils valent, puisque je me suis auto-formé aux langages que j'ai appris, sur la seule base de l'aide en ligne de ces langages. Aide dont j'ai bien évidemment lu les rubriques et que j'ai "bûchée". Cela m'a bien évidemment demandé des efforts.
- je vois mal comment un site de cours pourrait s'avérer supérieur à un cours direct, reçu dans le cadre d'un enseignement.
- enfin et surtout : avant même de parler de développement, on parle de conception.===>> la conception implique la connaissance de l'outil utilisé (les grandes lignes, au moins). Exactement comme la conception d'un immeuble implique la connaissance des matériaux et des outils disponibles.
Et je t'ai dit plus haut que ton problème était facilement et plus simplement solvable en VBA/Excel.
- j'ajouterais volontiers au chapitre de la réflexion :*
--- dans un établissement, plusieurs élèves peuvent porter le même nom (voire le même prénom) et appartenir ou non à des classes différentes.
--- le nom seul ne suffit pas. Et même en y adjoignant la date de naissance, toujours pas suffisant (les jumeaux existent)
--- etc etc ... mais tout cela n'est pas du développement. Seulement de la clairvoyance et de la clarté de pensée...
A partir de là ===>>> il y a du travail d'analyse et de conception à faire, hein ... pour ne pas, par exemple supprimer le 1er Jacques DUPONT présent (en CE1) alors que l'on voulait supprimer un autre Jacques DUPONT, présent, lui, en CM2
Allez ===>> Bienvenue dans le monde du développement?. Mais s'il reste effrayant pour toi, existent d'autres mondes (la poésie, la musique, la philosophie, ... et que sais-je d'autre). A toi de choisir la voie qui te "correspond" le mieux.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
59
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
4 juillet 2013

Bonjour à tous,

Il faut bien dissocier la programmation du langage et ne jamais coder tête baissée sans un minimum de réflexion.
Une classe en VBA est un contenaire dans lequel l'on regroupe des variables d'un ou plusieurs types et également des méthodes qui consistent en des actions relatives à cette classe (initialisation, lecture, écriture, modifications, transformations...)

Dans ton cas, il n'y a pas de classe mais une structure de données.
Il se peut que ce code soit extrait d'une classe, mais dans le code, cela n'en est pas une.
La structure de données permet de manipuler des groupements de données en les dupliquant à volonté.
Ce concept existe dans une quantité de langages.

Lorsqu'on fait référence à une donnée composite issue d'une structure ou même d'une classe, ce qui est intéressant c'est le contenu et non le conténaire.

D'où la comparaison qui devrait se référer aux données

If TablE(i).Classe = c Then
deviendrait
If TablE(i).Nom = c Then
pour que le code commence à avoir une signification (il y a bien d'autres lézards)

Recopier du code à l'arrache n'apporte rien, le modifier à tâtons peut s'avérer interminable.

Cordialement
Merci à toi Jibob, cette reponse m'aide, elle au moins est clair.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Ouais...
Je veux bien être un peu gentil et te parler de conception, mais tu devras écrire le reste (fastoche, en plus) :

- Aucune inputbox
- Aucune structure
- Aucune classe
- Auucun fichier texte structuré
Excel est un tableur et possède tout ce qu'il faut ===>>
- une feuille "données" dans laquelle on inscrit (à partir de la ligne 1) les élèves (colonne A : Nom, comlonne B : prénom, etc ....
- une listbox liée à cette feuille
- un bouton de commande pour la suppression ===>>
--- si aucun élève sélectionné dans la listbox ===>> pas de suppression
--- si un élève y est sélectionné, on supprime de la feuille "données" le rang de numéro = indice sélectionné + 1
et c'est absolument tout !
On peut même, si l'on veut perfectionner (confort), trier la feuille "données" comme on l'entend (le même tri se fera automatiquement dans la listbox)
Rien de plus simple et de plus sûr, avec très peu de code .
Voilà voilà.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Je te remercie, je vais essayer ca ce soir
Ca sera plus simple et logique si je passe par le SelectionEleve SupprimerEleve, je pense pas qu'il y ai de problème sur le SupprimerEleve ni le SupprimerClasse mais c'est sur les fonctions, j'ai compris qu'avant de choisir l'élève il faut d'abord faire en fonction de la classe de l'élève mais je trouve pas le code qu'il faut mettre, il faut faire intervenir le selectionClasse avant non ? Dans cette fonction selectionClasse y'a quelque chose qui va pas dedans mais je trouve pas quoi :/

Function selectionClasse(ByVal titre As String) As Integer
Dim i As Integer
Dim tab_I(1 To Max) As Integer
Dim cpt As Integer
Dim res As Integer
Dim txt As String
Dim Chx As Variant

res = 0
cpt = 0
txt = "Selectionner la classe " & titre & vbcr
For i = 1 To NbC
    
    cpt = cpt + 1
    txt = txt & cpt & " : " & TablC(i) & vbcr
    tab_I(cpt) = i
    
Next i
txt = txt & 0 & " : " & "Annuler" 'derniere ligne
If cpt > 0 Then
    Chx = InputBox(txt, "Selection", 0)
    Do While (Chx < 0 Or Chx > cpt) And Chx <> ""
        Chx = InputBox(txt, "Selection", 0)
    Loop
    If Chx <> 0 And Chx <> "" Then
        res = tab_I(Chx)
    End If
End If

selectionClasse = res
End Function
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Ca sera plus simple et logique si je passe par le SelectionEleve SupprimerEleve

Hé bien : fais donc ton devoir avec ta "logique" (elle semble toutefois te poser problème !) et ta simplicité (qui semble générer pour toi une difficulté !), pardi !
Je t'ai indiqué (mon message du du 6 juin 2013 à 16:45:26) une méthode à la fois ultra simple et qui ne nécessite aucune "logique" )à ajouter. Et elle te mettait de surcroît à l'abri de toute confusion possible sur l'élève choisi.
Et tu continues avec un "exercice acrobatique" qui, de tremplin en tremplin :
1) s'écarte de l'esprit de Excel
2) "empoisonne" l'utilisateur (tes inputboxes et les conséquences aléatoires de saisies pouvant ne correspondre à rien)
3) alourdit inutilement ton application
4) ralentit tout à chaque étape.
Mais après tout : c'est (une autre fois) TON devoir et il est donc logique (ça oui !) que TU le fasses comme tu l'entends et que TU sois noté sur TES aptitudes à concevoir et à développer.
Voilà voilà.
Bonne chance, maintenant.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Ca n'a rien à voir avec ma logique, je suis censé faire de la même manière que ce que nous a montré le prof pendant l'année bien que je te l'accorde une Listbox est vachement plus simple, lui veut qu'on fasse comme ca et pas autrement donc je dois passer par ces fonctions ^^. Ces deux fonctions sont les seuls trucs qui coince dans mon projet tout le reste marche, pour tout te dire j'ai même fait des Sub mot de passe pour pouvoir passer du menu principal aux sous menu ;)