[VBA/Excel] Différence entre exécutions directe et pas-à-pas [Résolu]

Signaler
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
4 octobre 2006
-
cs_nico39
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
4 octobre 2006
-
Bonjour,

J'ai un problème quelque bizarre avec ma macro:
lorsque j'exécute directement (automatiquement) ma macro, une des ses sous-procédures ne se lance pas et la macro tourne comme si elle n'existait pas. Par contre, si je fais la exécuter en mode pas-à-pas ou si j'insère un point d'arrêt dans le code de cette sous-procédure, celle-ci est bien détectée et se déclenche, et la macro continue sans problème!!??
D'où peut venir cette différence de comportement entre exécution directe et mode pas-à-pas ?

Merci d'avance pour vos contributions.

Config: Windows XP Pro SP1 | Excel 2003



Amateurement vôtre... 

9 réponses

Messages postés
956
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
1
Ben voila c'est surement de là que par le problème
dans le module qui appel celui la vire les on error resume next

comme ça si y a une erreur tu sauras d'où elle vient
(car un on error resume next dans une procedure parente arrete la procedure fille en cas d'erreur sans que tu sache ce qui c'est passé)

-- Pourquoi faire simple quand on peut faire compliquer --
Messages postés
956
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
1
Bonjour,

Met ton code ce sera plus facil pour te dépanner

-- Pourquoi faire simple quand on peut faire compliquer --
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
4 octobre 2006

Salut eldim,

Mon code est assez gros. Je vais donc essayer de l'expliquer assez succintement:
- je récupère d'abord des données de deux tables Access que je place dans 2 groupes de colonnes de ma feuille Excel (p. ex. colonnes A:C et  D:F). Jusque là, absolument aucun problème.
- je "filtre" (sans fonction .Filter) mon deuxième groupe de colonnes (D:F): si D4 contient du texte, suppression de D4:F4.      Jusque là, toujours pas de problème.
- je "filtre" (sans fonction .Filter) ensuite mon premier groupe de colonnes (A:C): si la valeur de Ai ne se trouve pas dans la colonne D, suppression de Ai:Ci. Encore là, toujours pas de problème.
- et enfin, je calcule les moyennes, minima et maxima des valeurs des colonnes fraîchement filtrées C et F.

Sur ce dernier point, le mode pas-à-pas donne de valeurs de moyennes correctes, alors que l'exécution directe ne calcule pas du tout ces moyennes.
J'ai remarqué que si je plaçais l'instruction de calcul des moyennes AVANT le deuxième filtrage (bien que ce ne soit pas le but du programme), l'exécution automatique la prenait en compte.
Est-ce alors possible que le deuxième filtrage "fasse perdre la boule" à VBA, jusqu'à ce qu'il en oublie les instructions immédiatement suivantes ?

J'espère avoir été assez clair dans mes explications.
Amateurement vôtre... 
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
Salut,

Essai juste avant d'appeler la procédure de placer une pause de 2 secondes.
Application.Wait(Now + TimeValue("0:00:02"))

Sait-on jamais... (déjà eu ce genre de problème et certains ce règle comme ceci)

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
Messages postés
956
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
1
As-tu désactivé le calcul automatique dans une partie de ta macro ?

-- Pourquoi faire simple quand on peut faire compliquer --
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
4 octobre 2006

Bonjour,
 - mortalino:    j'ai essayé de retarder l'exécution avec ta ligne de code mais rien n'y fait (même en retardant jusqu'à 10s). De plus, j'ai intercalé une MsgBox entre ta ligne de code et ma sous-procédure "problématique": la Msgbox s'exécute (parfois!), mais la sous-procédure jamais!
 - eldim:    je ne sais pas comment activer/désactiver le calcul automatique. Je n'utilise pas de formule sur le feuille Excel (parce que ma plage de valeurs n'est jamais de taille fixe), mais je calcule directement les fonctions dans ma macro. Donc, si c'est lié au calcul automatique des feuilles Excel, ca n'a pas lieu d'être...

Je ne sais vraiment plus comment m'y prendre avec cette macro.
Merci pour toute l'aide que vous pourrez m'apportez.

A+



Amateurement vôtre... 
Messages postés
956
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
1
As-tu des on error resume next ?

-- Pourquoi faire simple quand on peut faire compliquer --
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
4 octobre 2006

Salut eldim,

non, ou du moins, pas du tout dans ce module, mais dans un autre module qui est exécuté avant celui-là.
Je ne suis, en fait, pas très à l'aise avec les gestions d'erreurs...

Amateurement vôtre... 
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
4 octobre 2006

Salut eldim,
sans doute, mais le module où se trouve le OnError Resume Next et le module où j'ai mon problème n'ont aucun lien de programmation (aucun appel de procédure, aucun passage de variable...). Ils sont simplement exécuté l'un après l'autre, le deuxième étant déclenché par un click sur une Listbox de ma feuille, alors que le premier se déclenche à partir d'un bouton sur ma feuille.
Leurs codes respectifs se trouvent même sur deux feuilles de codes séparées:  le premier dans un module, le second sur la page de code de la feuille Excel correspondante!
Toujours est-il qu'il se trouve que j'ai bien une erreur dans ma sous-procédure "défectueuse" (erreur que d'ailleurs je ne comprends pas, et qui fera sansdoute l'objet d'un nouveau sujet), donc le OnError pouirrait bien être la cause du problème.

Amateurement vôtre...