InputBox ramenant à une cellule correspondante
Bonjour à tous,
Je suis nouveau et autant vous dire que malgré mes compétences en informatique, je ne suis pas bon en programmation et c'est pour ça que j'ai besoin de votre aide.
Ayant un professeur en VBA dont j'aimerai m'en passer car il ne prend pas le temps de nous expliquer, je croise les doigts pour trouver la solution en me tournant vers vous.
Je vous donne l'énoncé de mon problème :
Dans la première feuille (Résultats) vous avez une liste d’étudiants.
1) Construisez une macro VBA que demande à l’utilisateur, à travers une boîte de dialogue, le nom de l’étudiant à chercher. Cette macro doit parcourir la liste et sélectionner la cellule correspondante au nom de l’étudiant cherché.
2) La macro doit informer l’utilisateur, à travers une deuxième boîte de dialogue, si l’étudiant a été admis ou pas.
3) Si toute la liste a été traversée, et le nom n’a pas été trouvé, la macro doit afficher le message « étudiant non trouvé dans la liste », et sélectionner la première cellule vide, en dessous de la liste de noms.
Je vous ai joint le fichier, je suis toute ouïe pour les solutions à ce problème afin de pouvoir comprendre le travail.
Je vous remercie d'avance,
Cordialement,
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour
une boîte de dialogue avec inputbox (voir image)
un début ci-dessous
Exemple ici, dans ce Forum boites_de_dialogue d'Excel-pratique :
Sub exemple()
Dim resultat As String ' déclaration de la variable resultat
resultat = InputBox("Indiquez le Nom de l'étudiant à rechercher", "Rechercher un Nom", "Nom de l'étudiant(e)") 'La variable reçoit la valeur entrée dans l'InputBox
If resultat <> "" Then 'Si la valeur est différente de "" on affiche le résultat
' action pour se placer directement dans la ligne du resultat trouver feuille du classeur Résultats
' si recherche infructueuse ' Msgbox " Etudiant non trouvé dans la liste",
' appel d'une seconde boîte de dialogue si Admis ou Non Admis
' se positionner dans la colonne nom en dessous de la liste des noms de la feuille Résultats SI recherche infructueuse
End If
End Sub
Bonjour,
Je doute fort que tu trouves beaucoup de contributeurs qui seraient prêts à faire tes exos ...
Surtout qu'en ouvrant ton fichier ... tout le monde constatera que tu n'as pas commencé ... ni essayé ...
Bonjour,
Je comprends ce que tu veux dire mais il faut savoir que je suis resté 1h30 à essayer de comprendre, j'ai réussi à créer la boite de dialogue mais c'est après que ça bloque. J'ai regardé sur Internet comment faire mais j'ai pas réussi à trouver ou sinon si j'avais une vidéo, l'appliquer, ça ne fonctionnait pas.
Si je poste sur le forum c'est que je bloque réellement et je ne peux pas compter sur un prof non pédagogue et qui n'aide pas ses élèves.
C'est pour ça que je demande de l'aide pour qu'on me donne des solutions tout en m'expliquant en détail comment faire. Histoire que je sache ce qu'il y a de fait sur l'exercice.
D'ailleurs merci à Andre13 pour ta réponse, je vais tenter ça.
Cordialement,
Tiintin
Re,
Les ressources pour apprendre sont illimitées ... !!!
Le Forum est rempli d'exemples ...
Youtube a des tonnes de vidéos ...
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Re,
un autre bout de piste
- il faut déclarer la ou les variables indispensable pour le bon fonctionnement Cellule qui est Range et Art qui est un string
- InputBox qui est la boîte de dialogue, dans celle-ci on recherche un nom de notre feuille qui sont dans la plage A7:A300,
Find pour retrouver grâce à notre Art et le nom que l'on désire retrouver dans notre colonne s'il trouve une valeur correspondante il affiche il en retrouve une autre (même nom il re-affiche avec un message box, (d'ou faudra faire attention aux doublons de la colonne A par exemple), il affiche grâce au 6 de notre colonne de notre feuille si Admis ou pas tout en sachant que l'on part de gauche à partir de colonne 0,1, 2 3..6
Sub TrouverNOM()
Dim Cellule As Range
Dim Art As String
Art = InputBox("Indiquez le Nom de l'étudiant à rechercher", "Rechercher un Nom", "Nom de l'étudiant(e)") 'La variable reçoit la valeur entrée dans l'InputBox
With ActiveSheet.Range("A7:A300")
Set Cellule = .Find(Art, Lookat:=xlWhole)
If Not Cellule Is Nothing Then
firstAddress = Cellule.Address
Do
MsgBox Cellule.Offset(0, 6).Value 'ici un début de bonne réponse si resultat admis on pas colonne 6 en partant de la gauche de 0,1,2... à 6
' code...... si Admis inputbox si la cellule contient le mot Admis aussi non rien on sort de la procédure
Exit Sub
Set Cellule = .FindNext(Cellule)
Loop While Not Cellule Is Nothing And Cellule.Address <> firstAddress
End If
End With
MsgBox "Etudiant non trouvé dans la liste !", vbInformation ' on peut mettre le chiffre 64 qui correspond à vbinformation
'.... il faut un code ici pour se positionner à la fin de la colonne Nom de la feuille Résultats
End SubNote : pour les moyennes je suis nul en math mdr lol sry
Bonjour Tiintin,
Je te retourne ton fichier Excel modifié :
La macro ne s'exécute que sur la 1ère feuille "Résultats" ; il te suffit de faire Ctrl e, puis de saisir l'étudiant :
Nom et Prénom séparés par un espace ; saisie possible en minuscules ou en majuscules ; Alt F11 pour
voir le code VBA, puis revenir sur Excel ; le code VBA est bien commenté, mais tu peux me demander
plus d'infos si besoin ; un seul gros défaut : il n'y a pas d'os pour ton Miilou.
Merci de me dire si ça te convient.
Cordialement,
dhany
Bonjour,
Je dois avouer que je suis un peu déçu que la voie initiée par James n'ait pas été unanimement suivie !
Fournir des explications, OK ! Expliquer sur demande tel ou tel point de programmation non compris, d'accord ! Indiquer les erreurs ou omissions sur un travail entamé, aucun problème ! Mais faire le travail à la place de l'intéressé, cela ne présente aucun aspect didactique, ce n'est pas très déontologique (si l'on peut utiliser ce terme, sachant que nous ne sommes pas astreints à des règles explicites en la matière, mais que certaines pratiques sont tacitement respectées de façon assez générale...), et ce n'est pas rendre service à l'intéressé, qui n'aura strictement rien appris de durable, qui ne sera pas en mesure d'expliquer ce qu'il est censé avoir fait, et qui ne sera vraisemblablement pas en mesure de le refaire en repartant de zéro, encore moins d'utiliser une diversité de solutions alternatives pour répondre à la question...
Cordialement.
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Re,
Exact
pour une fois que j'avais trouvé la formule
@James007 et MFerrand
Vous avez raison : normalement, ce n'est pas rendre service à un étudiant de faire son exo à sa place ;
toutefois, j'ai fait une exception car Tiintin a écrit toutes ces choses :
1) « Ayant un professeur en VBA dont j'aimerai me passer car il ne prend pas le temps de nous expliquer » :
je comprends tout à fait à quel point ça peut être décevant de tomber sur un prof rapidos qui bâcle son
travail, même si ce n'est pas forcément dû à la personnalité du prof et peut-être simplement car il a une
classe surchargée ! c'est d'autant plus déplorable quand certains élèves ont envie d'apprendre !!!
2) « Je suis toute ouïe pour les solutions à ce problème afin de pouvoir comprendre le travail. » : on voit
bien que Tiintin fait partie des élèves qui ont envie d'apprendre, justement ! et ça mérite bien qu'on
l'aide, n'est-ce pas ?
3) « Je suis resté 1 h 30 à essayer de comprendre, j'ai réussi à créer la boite de dialogue mais c'est après que
ça bloque. J'ai regardé sur Internet comment faire mais j'ai pas réussi à trouver où sinon si j'avais une vidéo,
l'appliquer, ça ne fonctionnait pas. » : je suis sûr que Tiintin a réellement essayé, et s'il est ainsi bloqué,
il a bien le droit que quelqu'un l'aide, surtout si son prof n'en prends pas le temps !
4) « Si je poste sur le forum c'est que je bloque réellement et je ne peux pas compter sur un prof non pédagogue
et qui n'aide pas ses élèves. » : c'est quand même pas la faute de Tiintin s'il est tombé sur un mauvais prof !!!
à quoi ça servirait qu'il reste bloqué 5 heures de plus s'il n'arrive pas à avancer car il a personne pour l'aider ?
5) « C'est pour ça que je demande de l'aide pour qu'on me donne des solutions tout en m'expliquant en détail
comment faire. » ; c'est bien pour ça que j'ai bien commenté mon code VBA : ce sera à la fois pédagogique
et instructif pour le demandeur ; et j'ai dit à Tiintin qu'il peut me demander plus d'infos si besoin.
6) J'ai un faible pour Tiintin et Milou
Cordialement,
dhany
MFerrand a écrit :Bonjour,
Je dois avouer que je suis un peu déçu que la voie initiée par James n'ait pas été unanimement suivie !
Fournir des explications, OK ! Expliquer sur demande tel ou tel point de programmation non compris, d'accord ! Indiquer les erreurs ou omissions sur un travail entamé, aucun problème ! Mais faire le travail à la place de l'intéressé, cela ne présente aucun aspect didactique, ce n'est pas très déontologique (si l'on peut utiliser ce terme, sachant que nous ne sommes pas astreints à des règles explicites en la matière, mais que certaines pratiques sont tacitement respectées de façon assez générale...), et ce n'est pas rendre service à l'intéressé, qui n'aura strictement rien appris de durable, qui ne sera pas en mesure d'expliquer ce qu'il est censé avoir fait, et qui ne sera vraisemblablement pas en mesure de le refaire en repartant de zéro, encore moins d'utiliser une diversité de solutions alternatives pour répondre à la question...
Cordialement.
Merci MFerrand ... !!!
Ce soutien me fait très plaisir ... car il souligne une même philosophie de l'aide ...
Coucou James, tu n'as pas lu mon message de 11 h 05 ?
Ne trouves-tu pas comme moi que Tiintin mérite qu'on l'aide ?
En résumé, je rappelle que ce n'est pas la faute du demandeur s'il est tombé sur un mauvais prof,
et c'est clair pour moi que Tiintin a essayé de résoudre lui-même son exercice ! et qu'il a vraiment
une réelle envie d'apprendre ! c'est pourquoi j'ai mis les explications utiles dans mon code VBA.
Cela dit, je n'ai absolument pas voulu te contrarier en aidant le demandeur !
Je continuerai à l'aider s'il me le demande : j'accepte de prendre sur mon temps pour aider
quelqu'un qui n'a pas eu la chance d'avoir un bon prof (mais pas trop souvent non plus).
Naturellement, vu ce qui précède, je trouve très bien qu'Andre13 aussi ait eu la gentillesse
de porter secours à Tiintin ; je ne suis donc pas le seul à faire une BA !
Et ce serait sympa de votre part à tous les deux, MFerrand et toi, d'être un peu moins stricts
sur « la philosophie de l'aide », surtout que vous êtes, comme moi, des bénévoles.
Cordialement,
dhany
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Re,
Vous êtes tous brave dans ce forum
de plus, pour moi çà me faisait travailler mon petit cerveau d'oiseau
En attendant, j'ai calé à la Q5 et Q6 de la feuille Analyse résultat et sans professeur à coté de moi
Q5 :
Nombre d'étudiants ayant une note en Informatique supérieure à la moyenne dans cette matière
résultat à trouver : 177
et
Q6 :
Moyenne générale des étudiants admis
résultat à trouver : 12,10
Note : la colonne K est fausse manque la mention Bien
Bonjour André,
Perso, j'ai fait seulement ce qui était demandé dans l'énoncé initial du demandeur : les points
1) à 3) ; je n'ai même pas cherché à répondre aux questions Q5 et Q6 (ou autres).
Pour calculer une moyenne, tu as la fonction =MOYENNE() ; équivalent VBA : AVERAGE()
Laissons d'abord Tiintin essayer lui-même avant de proposer une solution.
Cordialement
@dhany @André
Le Forum est un espace de libertés ...
Votre point de vue reste votre point de vue ...
Merci James, je suis content de voir que tu ne nous en veut pas, ni à André ni à moi.
Bonsoir à tous !
Je vois qu'il y a eu une sorte de débat et je respecte les deux points de vues. Honnêtement, je préfère le point de vue de dhany.
Certes il a fait tout l'exercice et je lui en remercie énormément mais je ne vais pas prendre l'exercice comme ça et le montrer au prof sous peine de ne pas savoir comment expliquer si tant est que le prof se donne la peine de nous demander. Je veux vraiment savoir ce que cette vba veut dire.
J'ai téléchargé le fichier et j'ai regardé le code VBA et tu as fait des manipulations dont je ne suis même pas sûr d'avoir vu en cours.. par exemple le mot "dim", puis "worksheetfunction.proper"
Je vais essayer de comprendre par moi-même en cherchant sur internet.
D'ailleurs le prof demande juste le nom, ça va être un petit exercice pour moi de modifier sans tout faire planter.
J'ai également vu que vous parliez de Q5 & Q6, ne vous en préoccupez pas, c'est un fichier de cours qu'on utilise pour plusieurs types d'exercice donc bon. Veuillez m'excuser de ne pas l'avoir précisé. Il fallait juste traité les trois points énoncés..
Autant vous dire que je vais surement mieux apprendre avec vos réponses qu'avec 4 cours avec ce prof et croyez moi, toute ma classe a ce sentiment.
En tout cas, encore merci pour votre aide précieuse !
Bonjour Tiintin,
Merci d'avoir passé le sujet en résolu.
Tu a écrit :le prof demande juste le nom
J'espère que tu es bien conscient qu'avec la recherche du nom seulement, ça ne pourra plus différencier
les élèves de la même famille (et il y en a dans ton exo) ; la recherche s'arrêtera donc sur le 1er membre
de la famille rencontré et ignorera les autres !
je blague, hein ? j'te défends, toi et toute ta classe, d'lui balancer des tomates pourries !!!
(surtout au prix où sont les fruits et légumes, en c'moment !) ; bon, tu peux lui tirer la langue, à la rigueur,
mais j'décline toute responsabilité s'il te voit et te met une mauvaise note de comportement !
Dim sert à déclarer des variables ; par exemple, quand la compilation rencontre Dim col As Integer
ou son équivalent Dim col% VBA réserve de la place en mémoire de la taille d'un entier Integer :
2 octets (= 16 bits) ; puis VBA appelle col cet emplacement ; rappel : integer : entre -32768 et +32767.
Option Explicit (en début de module, une seule fois) fait qu'on est obligé de déclarer les variables ;
donc la compilation échouera si elle rencontre une variable qui est utilisée sans avoir été déclarée
au préalable ; c'est souvent considéré par certains comme un gros inconvénient, car ça leur semble
une énorme contrainte, mais en fait, c'est plutôt à considérer comme un énorme avantage car on
est assuré que ça détectera des erreurs dues à une variable non déclarée, ou qu'on avait déclarée
mais qui a été ensuite mal orthographiée ; ça peut détecter aussi certaines erreurs de type de
variable (même s'il y a prise en compte des règles implicites de conversions de types).
Sur une feuille de calcul : en A1 : abc def ghi ; en B1 : =NOMPROPRE(A1) ➯ Abc Def Ghi
non, ça ne change pas la couleur du texte, c'est juste pour montrer que ça met en majuscule l'initiale
de chaque mot ; NOMPROPRE() est en anglais PROPER(), c'est une fonction d'Excel non connue de
VBA, mais c'est possible en VBA de l'appeler avec Evaluate() ou Worksheetfunction, d'où cette
partie d'instruction VBA : WorksheetFunction.Proper(NP)
Tu verras aussi IIf() qui est l'équivalent VBA de la fonction SI() d'une feuille de calcul.
Bon courage et bonne chance pour la suite de tes études, même si je suis persuadé comme toi que
tu peux en apprendre plus en passant nous rendre visite sur ce forum qu'avec 4 cours de ton prof
VBA qui ne veut pas (ou ne peut pas) prendre le temps d'expliquer.
oui, bon, tu sais qu'je blague, hein ?
Cordialement,
dhany
Bonjour à tous,
Pas eu le temps de revenir plus tôt sur ce sujet, un scanner à passer...
Comme l'a dit James :
Le Forum est un espace de libertés ...
Votre point de vue reste votre point de vue ...
Je veux bien admettre la possibilité qu'un prof ne soit pas à la hauteur ou puisse être carrément incompétent en matière d'enseignement, mais cela m'ennuie quelque peu de prendre un simple déclaration univoque pour argent comptant !
La notation (James encore !) :
Surtout qu'en ouvrant ton fichier ... tout le monde constatera que tu n'as pas commencé ... ni essayé ...
me paraissait plus probante, et laissait la possibilité à l'intéressé de montrer qu'il essayait... avant de se précipiter pour offrir des réponses.
Ceci étant, l'essentiel demeure qu'au delà de différences d'évaluation de la situation, les positions s'avèrent à peu près semblables sur le fond. Souhaitons que Tiintin (et Milou
Cordialement et bonne journée à tous.