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
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
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.
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.
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 :
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
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.
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
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.
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.
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.
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.
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.
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
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 ;)