| ||||||||
Petit astucien | Bonjour à tous. Décidément, je ne digère pas la gestion d'erreur en VBA! Mon pb: je veux faire une recherche d'une valeur dans une feuille (et l'atteindre, bien sûr). J'ai donc écrit la macro suivante, qui fonctionne bien si l'entrée "nom" est retrouvée. Mais si l'entrée n'existe pas, au lieu de passer sur la gestion d'erreur, ma macro bugue. (erreur code 91) Si un champion pouvait étudier la macro ci-dessous et me la corriger, ce serait merveilleux. Merci d'avance pour vos aides. Sub VerifDroits() Dim identifiant As String, mdp As String, mdpR As String, educ As String Dim medic As String, psy As String, admin As String, nom As String nom = InputBox("Veuillez entrer votre nom ci-dessous.", Title:="Recherche de nom") On Error Resume Next ( j'avais essayé: on error goto ErreurIdentif mais ça ne fonctionne pas non plus) Cells.Find(what:=nom, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , SearchFormat:=False).Activate If Err.Number > 0 Then GoTo ErreurIdentif ........ mdpR = Range("F" & r).Value mdp = InputBox("Veuillez entrer ci-dessous votre mot de passe (respecter la casse).", Title:="Mot de passe requis") ........ If mdp <> mdpR Then GoTo ErreurIdentif (ça, ça fonctionne.) ......... Exit Sub ErreurIdentif: MsgBox "Votre nom n'est pas retrouvé" & vbCr _ & "ou votre mot de passe est inexact." & vbCr _ & "Vous ne pouvez pas poursuivre cette tâche." & vbCr & vbCr _ & "Veuillez recommencer l'identification" & vbCr _ & " ou contacter votre Administrateur.", vbOKOnly End Sub Modifié par deb56 le 12/11/2016 14:30 | |||||||
Publicité | ||||||||
| ||||||||
Astucien ![]() | Pour tester les erreurs, je préfère mettre if Err.Number <> 0 car il peut y avoir des valeurs négatives. Pour ton pb., avec on error resume next, il devrait continuer. Si tu mets en commentaire le on error (avec une apostrophe en début de ligne) et que tu relances, çà se plante sur quelle ligne exactement ? | |||||||
Astucien ![]() | apparemment avec cells.find (que je n'ai encore jamais utilisé), çà a l'air un peu spécial, il faudrait plutôt partir sur quelquechose comme çà : dim rResult as range | |||||||
Petit astucien | Bonjour, Titus68. Et merci de tes réponses rapides. J'ai mis en gras la ligne qui bugue dans mon 1er message. Ça fonctionne s'il existe une correspondance à "nom". Ça ne bugue que s'il n'y a pas de correspondance, au lieu de donner un message "Microsoft Excel ne trouve pas les données que vous recherchez" comme lorsque l'on fait la recherche directement dans le classeur. Au départ je n'avais pas écrit On Error Goto... ni On Error Resume Next. Je n'ai essayé (les 2) que parce que j'ai testé le fonctionnement et que j'ai eu le gag. Donc mettre ' devant ne résoudra pas le problème. Je vais essayer ta solution Set rResult = et je te tiens au courant. Encore merci et à bientôt. | |||||||
Petit astucien |
C'est ok. Ta solution m'a fait peur, car je n'avais plus de résultat positif. En effet elle renvoie bien le résultat à VB, mais elle ne sélectionne pas la cellule trouvée. Il faut donc y ajouter rResult.select, après le renvoi d'erreur. Ça fonctionne impeccable et mon problème est résolu. Tous mes remerciements pour cette aide efficace ++. deb56 | |||||||
Astucien ![]() | Content pour toi | |||||||
![]() ![]() | Bonjour, Juste une remarque : pourquoi sélectionner ? Le seul effet ( utile ??? ) en est de ralentir VBA ! Cordialement. | |||||||
Petit astucien | Bonsoir, Ferrand. J'avais simplifié ma demande initiale. En fait, j'ai tout un tas de manips portant sur les cellules de la même ligne, relatives à cette sélection d'un nom dans une liste qui devrait devenir conséquente avec le temps, y compris des écritures et des concanténations dans certaines d'entre elles. C'est trop risqué pour moi de me lancer dans ce travail sans contrôle visuel de ce que je fais. Merci de ton attention. Bonne fin de WE. | |||||||
![]() ![]() | A ton aise Et sélectionner n'est JAMAIS nécessaire pour agir en VBA, mais TOUJOURS un indice de mauvaise qualité du code... Cordialement. | |||||||
Petit astucien | Bonne remarque, Ferrand! Une fois sûr que ça fonctionne correctement, je peux modifier le code pour éviter les déplacements de sélection au max. Cependant, pour modifier la visibilité d'une ligne (ne voir que cette ligne) à partir d'une cellule active trouvée par cells.find, il faut bien que je selectionne cette cellule active, non? Sinon, je ne vois pas comment faire. ?? Mais je peux tester. Cordialement. | |||||||
Petit astucien | Re-bonjour, Ferrand. En cherchant un peu, mes essais confirment (une fois de plus) ta grande maîtrise de VBA (entre autres)! Je n'ai plus qu'à reprendre toutes mes macros pour simplifier et ne sélectionner que quand j'ai des modifs manuelles à y faire. | |||||||
|
Les bons plans du moment PC Astuces | Tous les Bons Plans | |||||||||||||||
|