DEBOGAGE - la macro n'affiche plus les résultats demandés

Bonjour,

Je vais essayer de faire simple :

Je travaille sur un fichier excel confidentiel qui permet de réaliser des devis, fichier créé en 2008 par un prédécesseur et mis à jour en 2013.

Dans ce fichier, j'ai plusieurs macros, 13 modules, X variables, 14 formulaires avec plusieurs cas possibles de devis (appelons-les cas 1, 2 et 3).

Le fichier pointe sur un autre fichier qui est une base de données fixes, elle aussi conséquente (22 onglets).

Lorsque l'utilisateur à complété le formulaire correspondant, les résultats s'affichent dans une feuille excel. Les résultats sont des copies des données entrées dans les formulaires et des calculs faits en automatique par la maccro.

MON PROBLEME : dans le cas 3, mes données s'affichent toutes dans la feuille excel mais dans les cas 1 et 2 seulement une partie des données s'affichent dans la feuille excel (les données entrées dans un des divers formulaires). Sachant que l'affichage des données entrées et calculées se fait à la toute fin de mon code. Les données d'entrée sont stockées dans des variables intermédiaires.

J'ai retourné le truc dans tous les sens et impossible pour moi de solutionner ce maudit fichier surtout qu'on se perds facilement dans toutes ces lignes de code.

J'ai essayé débogage, mode pas à pas, corrigé plusieurs erreurs 91 mais toujours aucun résultat de devis n'apparait dans le cas 1 et 2. Je sèche.

=> Avez-vous des astuces à me conseiller ? Une méthodologie pour trouver la source de mon problème ? Des choses à vérifier en priorité ?

Bonjour,

Dans ce fichier, j'ai plusieurs macros, 13 modules, X variables, 14 formulaires avec plusieurs cas possibles de devis (appelons-les cas 1, 2 et 3).

Une "usine à gaz" en quelque sorte...

Le fichier pointe sur un autre fichier qui est une base de données fixes, elle aussi conséquente (22 onglets).

Base de données de 22 onglets ?? waouh
C'est pas une trop bonne idée et cela complique le bazar...
Là c'est déjà un point à corriger. Faites une base de données en un seul onglet

Avez-vous des astuces à me conseiller ?

Pas vraiment sans voir votre fichier...sinon voir avec celui qui a fait le fichier ou tout refaire...

Cordialement

Bonjour,

Oui c'est clairement une usine à gaz... malheureusement je ne peux pas modifier la BDD ni refaire la macro car cela me prendrai encore 6 mois à plein temps...

J'ai peut-être des pistes :

- est-ce que stocker directement les données du formulaire dans l'onglet devis avant de faire les calculs est pertinent ? Actuellement, ces données sont stockées dans des variables pour les calculs mais ces données sont remplies dans l'onglet qu'à la toute fin du fichier.

- est-ce que le mode débogage pas à pas avec des espions permet de trouver une erreur de nom de variable ? J'ai déjà utilisé le mode pas à pas pour déboger des erreurs 91 mais jamais pour des noms de variable.

- sinon, comment trouver une variable avec une erreur de frappe dans le nom ?

Bonjour,

6 mois... , je dirais qu'il faut plutôt quelqu'un qui peut analyser rapidement là où le bas blesse et vous corriger ce qui ne fonctionne pas

- est-ce que stocker directement les données du formulaire dans l'onglet devis avant de faire les calculs est pertinent

Cela peut être une idée effectivement. C'est que j'avais d'ailleurs fait pour mon travail. Je stockais les données dans une feuille sous forme de base de données et les calculs statistiques et autre étaient réalisés dans une autre feuille.

- est-ce que le mode débogage pas à pas avec des espions permet de trouver une erreur de nom de variable ? J'ai déjà utilisé le mode pas à pas pour déboger des erreurs 91 mais jamais pour des noms de variable.

Mettons que cela sert à trouver la ou les lignes qui font défaut. Si vous ne savez pas ce que la variable à comme valeur, une fois arrêté sur la ligne à défaut, vous pouvez placer votre souris sur la variable pour voir sa valeur. Autre méthode est d'afficher la fenêtre "Variables locales" via le menu Affichage de l'éditeur VBA.
Si vous faites du pas à pas, vous verrez la valeur de chaque variable lors de l'exécution des codes

- sinon, comment trouver une variable avec une erreur de frappe dans le nom ?

je n'ai pas compris la question ou votre pensée. Vous pouvez faire une recherche de variable en tapant son nom via le menu Edition --> Rechercher dans l'éditeur VBA

A votre dispo

Merci pour vos réponses !

Cela peut être une idée effectivement. C'est que j'avais d'ailleurs fait pour mon travail. Je stockais les données dans une feuille sous forme de base de données et les calculs statistiques et autre étaient réalisés dans une autre feuille.

Ok pour ça.

Mettons que cela sert à trouver la ou les lignes qui font défaut. Si vous ne savez pas ce que la variable à comme valeur, une fois arrêté sur la ligen à défaut, vous pouvez placer votre souris sur la variable pour voir sa valeur. Autre méthode est d'afficher la fenêtre "Variables locales" via le menu Affichage de l'éditeur VBA.

Si vous faites du pas à pas, vous verrez la valeur de chaque variable lors de l'exécution des codes

Ok

je n'ai pas compris la question ou votre pensée. Vous pouvez faire une recherche de variable en tapant son nom via le menu Edition --> Rechercher dans l'éditeur VBA

Je me suis mal exprimée, quand je vérifie le code avec pas à pas sortant je n'ai plus aucun message d'erreur nul part ni de résultat de devis affiché. Au vu des multiples variables, peut-être qu'une variable a une erreur de nom et que par conséquent la valeur de cette variable ne peut pas s'afficher dans mon devis puisque c'est une variable d'un autre nom qui est appelé.

exemple : cout.value = a+b

cells(1,2) = coutt

Donc la valeur calculé cout ne peut s'afficher.

est-ce plus clair ?

Je vais me rapprocher d'une personne compétente pour nous aider, merci à vous.

Au vu des multiples variables, peut-être qu'une variable a une erreur de nom et que par conséquent la valeur de cette variable ne peut pas s'afficher dans mon devis puisque c'est une variable d'un autre nom qui est appelé.

Cela se peut mais cela voudrait aussi dire que quelqu'un est allé modifier quelque chose dans les codes
Si vous avez une erreur qui apparait dans un code, vous devriez avoir la ligne à souci surlignée en jaune
Là si vous avez une variable, vous pouvez prendre son nom et vérifier dans tous le fichier en faisant une recherche via le menu Edition. De cette sorte vous saurez aussi si cette variable est bien nommée.

Avant de changer vérifiez tout de même que l'auteur n'a pas ajouté une lettre à une variable pour en faire une deuxième...

Il faudrait voir votre fichier pour vous en dire peut-être plus... peut-être enlever les données confidentielles ou si trop compliqué me l'envoyer en MP ?

Compliqué de l'envoyer.

En revanche, je viens de faire des modifs et j'ai une erreur 91 mais aucune ligne n'est surligné en jaune comme habituellement.

Avez-vous déjà eu le cas ?

image

Compliqué de l'envoyer.

Comme vous voulez

En revanche, je viens de faire des modifs et j'ai une erreur 91 mais aucune ligne n'est surligné en jaune comme habituellement.

Là l'erreur 91 ce n'est pas simple sans voir le fichier
A priori, il y a un objet non défini.
A la vue de votre photo, vérifiez dans le gestionnaire de noms, si vous voyez un nom tab_gene_multibloc et si oui regardez à quelle plage cela correspond
Les instructions sont placées dans un module ou une Userform ?
Puis c'est quoi cette info "Code ajoute 2023" ?

Les noms tab_gene_multibloc sont déclarés dans le code en temps que Variant, les autres variables de ma capture d'écran sont aussi déclarées en début du code.

Je n'ai rien déclaré dans le gestionnaire de noms.

Cet extrait de code se trouve dans un bouton d'un formulaire et les instructions se déclenchent quand on clique sur le bouton : c'est dans un Sub OK_Button_Click()

Le commentaire signifie juste que c'est un code ajouté en 2024*, pour que je puisse me souvenir de ce que j'ai modifié.

Je viens de remettre en commentaire l'extrait et j'ai tout de même l'erreur 91 sans ligne surlignée. Je vais tenter ligne par ligne de voir où ce code intervient en mettant en commentaire chaque ligne.

Ca peut paraitre ancestrale mais au moins je devrai trouvé comme ça.

Ok pour vos explications

Les noms tab_gene_multibloc sont déclarés dans le code en temps que Variant, les autres variables de ma capture d'écran sont aussi déclarées en début du code.

De ce que je vois dans votre vue, je m'étonne que vous n'avez rien dans le gestionnaire de noms
Votre déclaration tab_gen_mutibloc est certainement déclarée comme ceici --> Dim tab_gene_multibloc () as variant

Cet extrait de code se trouve dans un bouton d'un formulaire et les instructions se déclenchent quand on clique sur le bouton : c'est dans un Sub OK_Button_Click()

Au vu du code Sub ok, je me pose la question de savoir si votre formulaire est une USERFORM ou une feuille dédiée à ce formulaire

Déjà dans l'éditeur VBA on pourrait voir la structure des objets
Avez-vous des modules, modules de classe et feuilles ?
On peut voir cela dans l'editeur VBA à gauche via VBA project

Le commentaire signifie juste que c'est un code ajouté en 2024*,

Ok

Je vais tenter ligne par ligne de voir où ce code intervient en mettant en commentaire chaque ligne.
Ca peut paraitre ancestrale mais au moins je devrai trouvé comme ça.

Non c'est comme cela que vous pouvez faire. Le pas à pas aide à comprendre ce qu'excel fait et à déboguer le cas échéant

Dim tab_gene_multibloc () as variant

C'est exact.

Au vu du code Sub ok, je me pose la question de savoir si votre formulaire est une USERFORM ou une feuille dédiée à ce formulaire

Excusez-moi, oui c'est un userform.

Bonjour OCE,

Merci de respecter la charte, pas de demande ou de fichier en MP

Il suffit de le réduire à sa plus simple expression et de l'anonymisé

  • Joignez (si possible) un fichier pour augmenter vos chances d'obtenir de l'aide en cliquant sur le bouton Fichier de l'éditeur. Si votre fichier est trop lourd ou contient des données personnelles, créez une version allégée de votre fichier avec juste assez d'informations pour permettre de comprendre votre problème. Dans tous les cas, ne postez JAMAIS de fichiers avec des informations personnelles ou confidentielles (cet utilitaire peut vous aider à les retirer).

A+

Bonjour à tous,

sinon, comment trouver une variable avec une erreur de frappe dans le nom ?

C'est clair que c'est les pires à trouver. Tu pourras relire 20 fois, ton cerveau corrigera et tu ne la verras pas.

Dans chaque module il faut mettre en 1ère ligne Option Explicit

Ca t'oblige à déclarer chaque variable, en profiter pour le typer au plus près du besoin (éviter As Variant donc)
Sauvegarder une copie auparavant, à te lire ça risque d'être fastidieux si tu en as beaucoup et pas dit que tu aies le courage d'arriver au bout (?)
Déclarer de préférence dans les modules et functions.

Les variables globales, publiques ne doivent l'être que si nécessaire.
C'est nécessaire si une variable est appelée dans plusieurs modules. Dans ce cas les déclarer dans un module standard.
Si tu en as beaucoup ça peut être intéressant de le regrouper dans un module dédié. Quitte à mettre une ligne de commentaire les rassemblant par blocs décrivant l'utilisation.
Tout ceci que si tu as peu déclaré. Sinon garde tel que bien sûr.


Dans les options VBE coche 'Déclaration obligatoire des variables'. Ca te mettra Option Explicit dans tous les modulres de tes futurs projets.
eric

Bonjour Bruno,

Je ne savais pas, veuillez- m'excuser.

J'ai simplement envoyé à Dan une question + précise en mp.

Il suffit de le réduire à sa plus simple expression et de l'anonymisé

Concernant le fichier, si je veux que les membres du forum puissent l'utiliser convenablement il y a beaucoup (trop) de modifs à faire et puis ce fichier est confidentiel. C'est pour cette raison que je ne l'ai ni posté ni envoyé en mp à quiconque.

Bonjour Eric,

Merci pour votre réponse, je vais essayer votre méthode que je ne connais pas.

Je vais essayer également de revérifier une X ème fois la déclaration de mes variables. Comme vous le dites, je suis sans doute passé à côté de quelque chose.

Salut,

Commence par écouter Eric.

  • Mets Option Explicit en début d'un module.
  • Ensuite lance le debogage. Menu Débogage/ComplillerVBAProject
  • Tu refais pareils pour la totalité de modules.
  • Attention à bien regarder le nom de la variable qui cloche avant de la déclarée (exemple faute de frappe, et non pas variable non déclarée).
Rechercher des sujets similaires à "debogage macro affiche resultats demandes"