Macro qui tourne en boucle

fileofish

XLDnaute Occasionnel
Bonsoir le forum,

Décidément qu'est ce que je ne ferai pas sans vous :)

Me voilà confronter à un nouveau problème

Dans le petit fichier joint, dans l'onglet Menu, il y a un menu déroulant qui vient activer une combo box qui elle même vient activer une macro ... peut être y avait -il plus facile mais bon!!

Lorsque la macro se déclenche on dirait qu'elle ne s'arrête pas !!

Je suis obligé d'appuyer sur echap pour l'arrêter !

Quelqu'un saurait-il d'où vient le bug

Merci encore

Philippe
 

Pièces jointes

  • Calendrier 2013 ED.xlsm
    266.5 KB · Affichages: 74
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Macro qui tourne en boucle

Bonsoir.
Ben moi je n'ai pas été obligé d'appuyer sur echap pour que ça plante tout de suite Excel par deux fois !
Je n'ai pu examiner quoi que ce soit. Ça sent la saturation de la pile par un processus récursif non contrôlé, c'est tout ce que je peux vous dire.
À +
 

Papou-net

XLDnaute Barbatruc
Re : Macro qui tourne en boucle

Bonsoir Philippe,
Bonsoir Dranreb,

Si j'ai bien compris la question, voici ma solution sur la copie ci-jointe.

Philippe, tu remarqueras que les macros ont été sérieusement raccourcies dans les modules Menu et Module4.

J'ai modifié l'événement Change du ComboBox1 car il y avait redondance. J'ai donc testé la valeur de la cellule C6 pour définir les zones de lignes masquées.

Bonne soirée.

Cordialement.
 

Pièces jointes

  • Copie de Calendrier 2013 ED.xlsm
    271.9 KB · Affichages: 77

fileofish

XLDnaute Occasionnel
Re : Macro qui tourne en boucle

Bonsoir Papou-net

Je suis rentré chez mes parents pour ce grand week end :) et il n'ont qu'une version 2003, donc il m'est impossible de lire le fichier en .xlsm
Je tenais à te remercier une 1ere fois maintenant avant de te remercier une 2nde fois j'en suis sur lundi :)
J'espère en tout cas que le fichier n'a pas fait sauté excel comme se fut le cas chez Dranreb !
Encore merci pour l'aide apportée

Bon week end à tous
Philippe
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Macro qui tourne en boucle

Bonjour Philippe,

Voici donc la version 2003 pour t'occuper ce WE si besoin est (ce dont je doute).

Pour apaiser tes craintes, sois rassuré, je n'ai pas eu de plantage.

Mais je n'ai pas bien compris ta façon de gérer l'affichage des mois : tu as une liste déroulante et tu affectes le choix à une combobox qui, de ce fait, ne comporte qu'une ligne ? J'ai respecté la structure de ton classeur pour répondre à ta question, mais je pense qu'il est sûrement possible de faire beaucoup plus simple.

Quoiqu'il en soit, la décision t'appartient mais je reste à ta disposition.

En te souhaitant un bon WE prolongé.

Cordialement.

PS : je ne vois pas de quelle façon tu as créé la liste déroulante en cellule C6 : si tu pouvais m'en dire un peu plus ?
 

Pièces jointes

  • Copie de Calendrier 2013 ED.xls
    410.5 KB · Affichages: 90

fileofish

XLDnaute Occasionnel
Re : Macro qui tourne en boucle

Bonjour Papou-net

C'est super gentil à toi d'avoir transformé la version 2007 en 2003.
J'ai regardé ce que tu as fait :
- C'est très intelligent d'avoir pensé à factoriser, ce qui du coup réduit la macro considérablement :)
- A vrai dire mes connaissance en vba sont limitées et la seule façon que j'ai trouvé d’exécuter une macro à l'aide d'un menu déroulant créer pour répondre à ta question à partir de "Données" -> "Validation" -> "Liste" et de l'affecter ensuite à une combo box
- Pourrais tu stp me dire ce que signifie :

Application.ScreenUpdating = False
Application.EnableEvents = False
=> Est ce que c'est ce qui t'as permis d'éviter la redondance de la macro ?

J'ai égelement vu que tu as déclaré une variable
Public Mois As Byte
J'aimerais savoir ce que signifie "Public" & "Byte"

Encore merci pour ton aide et le temps passé sur mon fichier
Excellent week end à toi aussi également :)
Philippe
 

Papou-net

XLDnaute Barbatruc
Re : Macro qui tourne en boucle

- Pourrais tu stp me dire ce que signifie :

Application.ScreenUpdating = False
Application.EnableEvents = False
=> Est ce que c'est ce qui t'as permis d'éviter la redondance de la macro ?

J'ai égelement vu que tu as déclaré une variable
Public Mois As Byte
J'aimerais savoir ce que signifie "Public" & "Byte"

Bonsoir Philippe,

Application.ScreenUpdating = False gèle le rafraîchissement de l'écran pendant le déroulement de la macro. Outre le fait d'augmenter la rapidité d'exécution, cela évite également un sautillement désagréable pour les yeux.

Application.EnableEvents = False est l'instruction qui empêche la redondance de la macro qui génère dans bien des cas une boucle infinie. Effectivement, si cette procédure opère une modification dans la cellule à l'origine de son déclenchement, alors la macro reprend dès le début ce qui est assez simple à comprendre. Mettre cette instruction à False empêche VBA d'intercepter tout nouvel événement lors du déroulement de la procédure.

Attention, dans les deux cas il ne faut pas oublier de remettre ces paramètres à True sinon bonjour les problèmes. Pour ma part, lorsque je les utilise, j'écris toujours la ligne de remise à True dans la foulée puis j'insère mon code entre ces deux lignes.

La déclaration de la variable Mois est Public, ce qui signifie qu'elle est accessible depuis n'importe quel module de code dans le projet. Par défaut, VBA la met à Private, ce qui la rend accessible uniquement dans le module ou dans la procédure qui la contiennent. J'ai déclaré son type en Byte, qui est un format numérique économe en mémoire vive mais qui limite ses valeurs de 0 à 255. Ce n'est pas un problème dans ce cas puisque les mois sont compris entre 1 et 12, donc on est largement dans la plage.

De mon côté, je n'ai toujours pas compris comment tu as créé ta liste déroulante au-dessus de la cellule C6, je ne la retrouve nulle part.

Voilà, espérant avoir répondu de façon claire et compréhensible.

Bonne fin de WE.

Cordialement.
 

fileofish

XLDnaute Occasionnel
Re : Macro qui tourne en boucle

Bonjour Papou-net
Merci pour toutes ces explications ... je me coucherai un peu moins bête ce soir :)
En tout cas très intéressant !!
La facon dont la liste a été créée est la suite. Sous excel 2003 :
Positionne toi en C6 de l'onglet Menu Clique sur "Données" puis "Validation" (un message apparaît cela vient du fait que la cellule C6 est fusionnée avec la cellule D6 appuie sur oui), là un menu apparaît dans "option" puis critères de validation sélectionne liste: Dans mon cas la plage de cellule pour définir la liste est :"=$C$59:$C$70" appuie ensuite sur ok
Cette étape m'a permis de créer un menu déroulant en c6
Je mets également un petit lien :
Appliquer la validation des données aux cellules - Excel - Office.com


Ensuite j'ai crée une combobox et dans les propriétés de celle ci j'ai mis dans cellule liée : C6

Une nouvelle fois merci Papou-net ... c'est très sympa de ta part
J'essaye ca lundi et te tiens au courant
Bon week end
Philippe
 

fileofish

XLDnaute Occasionnel
Re : Macro qui tourne en boucle

Bonjour Papou-net, le Forum

Merci beaucoup, je n'ai plus le bug que j'avais auparavant
En revanche et c'est une simple question la macro prend 1m50s avant de se terminer car je ne travaille pas avec 4 onglets mais 31, lesquels sont bourrés de formule.
Je souhaitais donc peut être "gagner" un peu de temps en insérant
Application.Calculation = xlManual
Application.Calculation = xlAutomatic

Lorsque j'ai inséré ces petites lignes la macro était certes beaucoup plus rapide mais rien n'avait changé.
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
Application.EnableEvents = False
ComboBox1 = Format(ComboBox1.Value, "mmmm")
Application.Calculation = xlManual
Call Masquertout
Traitement (Mois)
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
End Sub

Ex: lorsque je change janvier en février à la fin de la macro figure encore janvier

D'avance merci
Cordialement
Philippe
 

fileofish

XLDnaute Occasionnel
Re : Macro qui tourne en boucle

Bonjour Fo_rum,

Merci pour ton post!
J'ai envie de tester ton idée sur mon fichier mais je n'arrive pas en revanche à localiser comment tu as fait pour insérer les mois dans la liste déroulante?

Encore merci
Philippe
 

Papou-net

XLDnaute Barbatruc
Re : Macro qui tourne en boucle

Bonjour Philippe,

Fo_rum, que je salue au passage, documente sa ListBox (contrôle ActiveX sur la feuille Menu) dans la procédure Open du module WorkBook :

Code:
Private Sub Workbook_Open()
  For n = 1 To 12
    ActiveSheet.ComboBox1.AddItem MonthName(n)
  Next
   ActiveSheet.ComboBox1.ListIndex = -1
End Sub
Il a eu une bonne idée d'utiliser ce type de contrôle qui est plus en adéquation avec VBA que les contrôles Formulaires.

Par contre, si tu sauvegardes le fichier avec une autre page active que Menu tu obtiendras une erreur à l'ouverture. Je te propose donc de remplacer ActiveSheet par Sheets("Menu")

Au passage, si tu préfères que la liste affiche par défaut le mois en cours, tu peux écrire :
Code:
Private Sub Workbook_Open()
  For n = 1 To 12
    Sheets("Menu").ComboBox1.AddItem MonthName(n)
  Next
   Sheets("Menu").ComboBox1.ListIndex = Month(Date) - 1
End Sub
Bonne journée.

Cordialement.
 

Discussions similaires

Statistiques des forums

Discussions
312 322
Messages
2 087 273
Membres
103 503
dernier inscrit
maison