Macro qui travaille en arrière plan
Bonjour à tous,
J'ai un problème sur un classeur Excel. Quand je change quelques choses dans une page, excel me met en attente (avec petite roue qui tourne) pour faire des calculs ou des changements.
Le problème est que je n'arrive pas à trouver quelle macro est appelée. J'ai plusieurs feuilles avec quelques macros, mais impossible de trouver la macro qui est en cause. Je sais qu'à un moment, j'avais essayé de faire des macros appelées automatiquement, mais j'ai finalement préféré utiliser des boutons qui appelles des macros.
Quelqu'un a une idée pour retouver la macro en cause?
Merci pour votre aide
Bonjour evolto, avec un fichier ce sera plus explicite
Merci ton aide...
Même lorsque j'ai fait "enregistrer sous", et ensuite lorsque j"ai fermé le fichier une fois "anonymé", excel était bloqué...
D'ailleurs le fichier fait 1,6mo alors qu'il contient peu de choses. (C'est la raison pour laquelle je le zippe, car cela ne passait pas ici (trop lourd))
Quand je dis bloqué, je veux dire que excel se fige.... (le reste de l'ordinateur fontionne). Puis au bout de quelques minutes, j'ai de nouveau la main sur le fichier.
Il y a un potentiel problème avec ce code. Si aucune correspondance n'est trouvée, la boucle
Do Whilecontinuera indéfiniment, car la condition
Finne deviendra jamais vraie. Vous devriez ajouter une condition pour sortir de la boucle si aucune correspondance n'est trouvée. Voici une version corrigée du code :
Function NumAnimation() 'renvoie le numéro de l'animation
Dim j As Integer
Dim Repere As Integer
Dim Fin As Boolean
Repere = 4
Fin = False
Do While Repere <= Sheets("tableau AP").Cells(6, Columns.Count).End(xlToLeft).Column ' Vérifiez jusqu'à la dernière colonne de "tableau AP"
If Sheets("Emargement").Range("C5").Value = Sheets("tableau AP").Cells(6, Repere).Value Then
NumAnimation = Repere
Fin = True
Exit Do ' Sortez de la boucle lorsque la correspondance est trouvée
End If
Repere = Repere + 1
Loop
If Not Fin Then
' Si aucune correspondance n'a été trouvée, vous pouvez renvoyer une valeur par défaut ou gérer l'absence de correspondance comme vous le souhaitez.
NumAnimation = -1 ' Par exemple, -1 pour indiquer qu'aucune correspondance n'a été trouvée.
End If
End FunctionDans ce code corrigé, j'ai ajouté une condition pour vérifier si la valeur de Repere dépasse la dernière colonne de la feuille "tableau AP". Si c'est le cas, la boucle se termine, et la fonction renvoie une valeur par défaut (-1 dans cet exemple) pour indiquer qu'aucune correspondance n'a été trouvée. Vous pouvez personnaliser cette valeur par défaut en fonction de vos besoins.
Je suis impressionné que vous ayez trouvé ce problème aussi rapidement...
J'ai un peu honte de la question... mais je ne retrouve pas la fonction "NumAnimation"... J'ai fait ce classeur l'année dernière, j'ai un peu oublié.
Quand je vais dans "Visual basic", je trouve: Creationfeuille,Colorer, et EcritureGroupe... mais pas autre chose. J'aurais bien voulu essayé.
D'autre part, je ne comprends pas quelque chose... je ne vois pas pourquoi la macro avec la boucle ,qui ne s'arrête jamais, se lance, sans que j'ai appelé.
Et si c'est une boucle "infinie", je ne comprends pas pourquoi elle s'arrête (au bout d'un certain temps, sans message d'erreur)
Merci encore pour vos éclaircissements...
Je crois que ton code (fonction) est dans module 1
Une macro VBA dans Excel ne devrait pas se lancer automatiquement sans une action explicite de la part de l'utilisateur ou sans qu'elle ne soit appelée depuis une autre macro, un événement de feuille ou un module. Si une macro se lance apparemment sans être appelée, il y a généralement quelques raisons possibles à cela :
- Événements de feuille: Une macro peut être déclenchée par un événement de feuille, comme un changement de valeur dans une cellule, l'activation d'une feuille, etc. Assures-toi qu'il n'y a pas d'événements de feuille qui appellent involontairement la macro.
- Auto_Open ou Workbook_Open: Si tu as des macros Auto_Open ou Workbook_Open dans ton classeur, elles se déclencheront automatiquement lorsque le classeur est ouvert.
- Appels implicites: Il peut y avoir des appels implicites à la macro dans d'autres parties de ton classeur, comme dans des cellules avec des formules personnalisées.
- Appels depuis d'autres macros: Vérifie si cette macro est appelée à partir d'une autre macro qui est exécutée.
- Add-ins ou compléments: Si tu as des add-ins ou compléments installés, ils peuvent potentiellement influencer le comportement de ton classeur.
- Erreurs de code ailleurs: Parfois, une macro peut être interrompue en raison d'une erreur de code ailleurs dans le classeur, ce qui peut donner l'impression qu'elle s'est arrêtée.
- Temps d'exécution: Si la macro entre dans une boucle infinie, elle finira par se terminer si elle atteint une limite de temps d'exécution. Excel peut interrompre l'exécution de la macro si elle tourne trop longtemps, ce qui peut sembler un arrêt soudain.
Si tu as du mal à comprendre pourquoi cette macro s'exécute sans appel explicite, je te recommande de passer en revue tous les points mentionnés ci-dessus, de vérifier si tu as des événements de feuille ou des déclencheurs ailleurs dans ton classeur, et de surveiller attentivement le comportement pour identifier toute action spécifique qui pourrait déclencher la macro.
Re,
Cependant la source de ton problème vient de la feuille "Organisation" a mon sens. Elle semble être en liaison avec ton classeur "AP - Tableau 2023-2024- V2 - Anonyme.xls" qui lui est identique a ton classeur "AP - Tableau 2023-2024- V2 - Anonyme.xlsm" !!! Comme je vois que dans ton ZIP il y a un dossier __MACOSX. En plus des formules matricielles en colonne G qui sont assez lourde ça aide pas, je pense que tu devrais prendre ton classeur .XLS qui est sain mettre ma modif du code dedans et l'enregistrer sous en .XLSM. Le code se trouve bien dans module 1 par contre il y est pas dans le .XLS
Merci Stéphane pour toutes ces infos précises.
Je n'ai pas de xls, mais juste de xlsm.. Surement un affichage différent sur mac...
Je viens d'essayer deux choses: "enregistrer sour xls" en partant du xlsm, cela a abouti à une erreur au bout de quelques minutes. ("Impossible d'enregistrer")
Ensuite, j'ai essayé de lancer le xlsm en choisissant de ne pas lancer les macros dans le choix du lancement. Et là, contre toute attente, le problème persiste: si je clique sur un onglet, puis l'autre, j'ai encore cette latence de 2/3 mintutes... Incroyable.
Je vaus essayer de supprimer la formule matricielle en colonne G...
Je vous tiens au courant.
bonjour,
recherche le numéro d'une ligne ou colonne peut se faire avec un "match" que vous avez déjà utilisé ailleurs et qui donne une réponse immédiate (on n'aura même pas besoin d'une function supplémentaire)
Function NumAnimation() 'renvoie le numŽro de l'animation
Dim j As Integer
Dim Repere As Integer
Dim Fin As Boolean
Repere = 4
Fin = False
NumAnimation = -1
Do While Fin = False And Repere < Columns.Count
If Sheets("Emargement").Range("C5") = Sheets("tableau AP").Cells(6, Repere) Then
NumAnimation = Repere
Fin = True
End If
Repere = Repere + 1
Loop
End Function
Function NumAnimation2() 'renvoie le numŽro de l'animation
i = Application.Match(Sheets("Emargement").Range("C5").Value, Sheets("tableau AP").Rows(6), 0)
If IsNumeric(i) Then NumAnimation2 = i Else NumAnimation2 = -1
End Functionre,
cette macro met des couleurs dans votre colonne G de "organisation" (pas encore dans "tableau AP) et n'a pas besoin de la formule matricielle (qui a mon avis n'est pas la cause du lenteur). Elle crée une aide mémoire avec les couleurs de G113:G130
Merci beaucoup Bart... Je regarde ça.
Pour l'instant, j'ai enfin trouvé une solution... en enlevant la feuille "organisation", je n'ai plus aucun problème de lenteur.
Je vais donc recommencer en essayant de ne pas faire des macros trop lourdes en en faisant attention quand mpeme aux formules matricielles..
Je vais donc regarder ce que vous m'avez envoyé pour m'en inspirer.
Je précise que depuis que j'ai enlevé la feuille organisation, j'ai bien accès à toutes les macros que je ne voyais pas avant (dont NumAnimation, comme je le disais à Stéphane)... Cette feuille provoquait donc bien un méga bug d'excel...
re,
je ne pense pas que ce sont les macros mais la colonne F de "Organisation".
Il faut sauvegarder votre fichier comme ".xlsx", fermer et réouvrir. Comme çà, vous n'avez plus de macros. J'avais l'impression que le lenteur était le même. Puis vous commencer à supprimer des colonnes, par exemple F, puis G, etc. A partir de quelle colonne, le lenteur est disparu ?
Salut Bart,
Quand je sauve en xlsx, il n'y a plus de lenteur même sans toucher les colonnes de "Organisation"
Par contre, dans le xlsm, quand je veux regarder le basic,
Il y a 2 modules1, je ne sais pas si c'est normal.... et lorsque je clique sur celui qui à une croix avant le 1, cela bug, cela ouvre une fenêtre blanche bugguée (pas complète).
Désolé d'embêter tout le monde, mais j'aimerais avancer ce boulot pour la semaine prochaine et je suis complètement bloqué.
Bonjours à vous deux,
C'est normal en .XLSX tu n'as plus de macro le M dans .XLSM ça veut dire macro, ce que tu peux faire c'est supprimer la feuille Organisation dans le .XLSM ouvrir le .XLSX et créer un copie de la feuille Organisation de .XLSX vers .XLSM
Dans le message précèdent, je regardais bien les modules dans le xlsm.... et j'ai bien deux modules 1, dont un qui ne fonctionne pas... et certaines macros qui ne s'affichent pas...
Bon, je vais repartir d'un ancien fichier dans le quel il n'y a pas "organisation"... et je vais aller doucement pour rajouter mes macros/formules...
En me faisant aider ici.
En tous les cas, merci encore pour votre aide