Instruction VBA qui se lance malgré une condition If fausse

Y compris Power BI, Power Query et toute autre question en lien avec Excel
U
Uma31
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 23 avril 2014
Version d'Excel : 2007

Message par Uma31 » 23 avril 2014, 11:30

Bonjour,

Je débute dans la programmation VBA, et je me sers du Net pour trouver des exemples correspondant à ce que je veux faire. J'essaie de les comprendre et pas de les ré-utiliser bêtement, ce qui me permet de les customiser à mes besoins réels.

Je suis actuellement sur une macro de validation d'un formulaire Excel. L'idée générale est de tester les champs à remplir pour s'assurer qu'ils sont bien remplis, les mémoriser, sauvegarder la trame du formulaire en incrémentant les références sélectionnables (la suivante dans l'année, ou la première de l'année suivante), de sauvegarder le formulaire rempli avec comme nom sa référence.xls et de l'imprimer en PDF.

Je bloque sur la vérification du remplissage des champs.

J'ai deux types de champs :
- Ceux à remplissage impératif : s'ils sont vides une MsgBox apparait en expliquant que les données sont manquantes et la macro s'arrête
- Ceux à remplissage facultatif : s'ils sont vides, une MsgBox apparait en expliquant que les données sont manquantes, et l'opérateur à le choix de cliquer sur Ok pour valider et poursuivre la validation du formulaire, ou sur Cancel pour arrêter la macro et les remplir si c'est un oubli.

C'est avec le premier cas que je bloque.

Je teste deux cellules :
- Q1, qui est la cellule qui contient la référence,
- Z8, qui est la cellule qui contient le chemin d'enregistrement du formulaire rempli. Elle différente en fonction du PC sur lequel est lancée la macro.

Dans les deux cas, les cellules sont remplies par une sélection par une liste de validation de données.

J'utilise le code suivant :

Dossier_BL = Range("Z8")
If Dossier_BL = "" Then
MsgBox ("Le chemin d'enregistrement du dossier de visite est manquant")
End
End If

C'est le même code qui est utilisé dans les 2 cas (c'est un copier coller), j'ai juste modifié le nom de la variable, les coordonnées de la cellule et le message à afficher.

En Q1 ça marche, mais pas en Z8. J'ai vérifié avec l'espion la valeur de Z8 est reconnue, la valeur de la variable Dossier_BL contient bien la valeur de Z8, et la condition testée par l'instruction If est fausse. Mais la MsgBox apparait quand même.

J'ai fait une vérification supplémentaire en reportant la valeur de la variable dans une autre cellule ou et l'affichant dans une MsgBox, et je confirme qu'elle est bien connue.

Pire, j'ai fait un copier coller des cellules concernées et du code dans un classeur vierge, et là ça marche.

J'ai fait le tour de mes collègues de boulot, aucun n'a pu expliquer ça.

Alors en désespoir de cause, je m'adresse à vous.

Merci d'avance pour ceux qui prendront le temps de se pencher sur mon problème.

Manu
r
robjam
Membre dévoué
Membre dévoué
Messages : 538
Inscrit le : 8 mai 2012
Version d'Excel : 2010 FR, 2016 FR

Message par robjam » 23 avril 2014, 15:36

Bonjour,
Pour tester votre procédure nous devrions reconstruire votre fichier. C'est impensable en tout cas pour moi.
De plus que fait le End dans votre bout de code
Dossier_BL = Range("Z8")
If Dossier_BL = "" Then
MsgBox ("Le chemin d'enregistrement du dossier de visite est manquant")
End
End If
Cordialement
R.J.
U
Uma31
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 23 avril 2014
Version d'Excel : 2007

Message par Uma31 » 23 avril 2014, 16:29

L'instruction End sert à interrompre le déroulement de la macro, le chemin d'enregistrement du formulaire demandé en Z8 est obligatoire.

S'il est manquant, le processus de validation (donc la macro) s'arrête et doit être relancé une fois cette cellule remplie.

Manu
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'150
Appréciations reçues : 351
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 23 avril 2014, 17:52

Bonjour,

Pareil, sans fichier que veux-tu que l'on fasse à part une succession de supposition où tu diras non, ce n'est pas ça.
J'en ferai donc une seule.
J'ai vérifié avec l'espion la valeur de Z8
As-tu plutôt vérifié l'expression Dossier_BL = Range("Z8") ?
On ne sait même pas si tu as typé tes variables et de quel type est Dossier_BL. Un Range ? Un String ?
Si tu compares 2 ranges, je me méfierai des valeurs par défaut.
J'essaierai avec Dossier_BL.value = Range("Z8").value
Ou met Dim Dossier_BL as string
Bref, sans fichier on peut tout imaginer et ça risque de durer...

eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message