Instruction VBA qui se lance malgré une condition If fausse

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

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

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

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

Rechercher des sujets similaires à "instruction vba qui lance condition fausse"