Macro avec box marche, sans Excel plante
Bonjour,
Je viens vers vous pour un problème assez bizarre.
J'ai une macro qui lance une autre macro sur 11 feuilles.
Si j'ai une msgbox qui apparait à un moment dans la macro répétée (soit pour confirmer le lancement de la macro soit pour me dire le temps à la fin) et qui donc apparait 11 fois (ce qui est un peu chiant
Par contre si j'enlève ces msgbox, excel ne répond plus et après plusieurs minutes j'en suis rendu à obliger excel à se fermer
J'ai essayé de mettre du délai à la place des msgbox mais ça ne change rien.
J'ai essayé de faire tourner la macro sur un pc plus puissant (utilisé pour la 3D) mais ça ne change rien (d'ailleurs quand il plante, le processus excel n'utilise pas plus de ram ou de mémoire du processeur)
Auriez-vous une idée ?
Merci de votre aide :
Voici la macro répétée :
Sub getPRImacro()
'vchrono = Now()
'chronomètre
If MsgBox("Êtes-vous sûr de vouloir mettre à jour les getPRI ?", vbYesNo, "MaJ getPRI") = vbYes Then 'Box de confirmation
Dim xRg As Range
'Déclaration des variables
With ThisWorkbook.ActiveSheet
'Sélection de la feuille active
Application.ScreenUpdating = False
Application.EnableEvents = False
'Désactivation de certains trucs pour accélérer la macro
For Each xRg In .Range("J6:J150")
If UCase(xRg.Text) = "VRAI" Then
'Cherche les valeurs "Vrai" (case à cocher cochée) dans la colonne
Application.Calculation = xlCalculationManual
ThisWorkbook.Worksheets("Modifications").Range("H12").Copy
'va chercher la case avec la formule
ActiveSheet.Range("K" & xRg.Row).PasteSpecial Paste:=xlPasteFormulas
'colle-special la formule en adaptant les cases auxquelles elle fait référence
Application.Calculation = xlCalculationAutomatic
ActiveSheet.Range("K" & xRg.Row).Value = ActiveSheet.Range("K" & xRg.Row).Value
'copie/colle la sélection afin que la valeur remplace la formule (éviter une mise à jour de la formule à l'ouverture
End If
Next xRg
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
'Réactive les trucs qui ralentissaient la macro
End With
End If
'vchrono = Now() - vchrono
'MsgBox Format(vchrono, "h:mm:ss")
'chronomètre
End Sub
Je précise que je fais le premier copier/coller car je n'ai pas trouver d'autre solution pour avoir ma formule qui s'incrémente avec les lignes et sans remplacer toutes les cellules (seulement celle où vrai est noté à côté).
Et que la formule copier/collé (getPRI) est une formule crée pour le fichier, qui prend des valeurs dans un bdd en fonction d'une référence, je l'ai donc remplacé par somme pour qu'elle marche pour vous.
Bon, la macro de base ne marche même pas sur le fichier anonymisé, je m'y repenche demain.
J'espère que mon sujet ne sera pas perdu dans les tréfonds du forum
Bonjour,
EDIT : heu..., je n'avais pas vu l'explication de la formule =Somme(...); mais là finalement , je n'ai rien compris.
En gros j'utilise une formule personnalisé (dont je n'ai pas fait le code) qui va chercher des valeurs dans une bbd.
Je l'avais remplacé par somme pour que la macro marche chez vous (car vous n'aurez pas accès à la bdd) mais le résultat n'est pas le même, ce qui me fait penser que ça vient en partie de la formule personnalisée
Je viens de tester, sans accès au serveur, la macro ne fait pas planter excel, donc je vais passez le fichier mais vous ne pourrez pas reproduire ce qu'il se passe chez moi.
Je met à jour le fichier (dans cette réponse car je ne peux plus modifier le message de départ)
Les macro utilisées sont nommées getPRImacro et getPRIall2
Bon j'ai réussi à régler le problème d'une façon pas très propre mais bon.
Je laisse une msgbox apparaitre (voir code du 1er message) et je fais appuyer entrée à la macro ...
Si vous avez des solutions plus propres je suis preneur
Par contre ma macro me fait défiler les pages et je souhaiterai supprimer cette navigation (que les actions s'effectue sans que l'utilisateur ne voit défiler les feuilles).
Le code utilisé (pas très optimisé) :
Sub getPRIall2()
'vchrono = Now()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Feuil13.Activate
SendKeys "{ENTER}", False
Call getPRImacro
Feuil19.Activate
SendKeys "{ENTER}", False
Call getPRImacro
Feuil21.Activate
SendKeys "{ENTER}", False
Call getPRImacro
Feuil22.Activate
SendKeys "{ENTER}", False
Call getPRImacro
Feuil23.Activate
SendKeys "{ENTER}", False
Call getPRImacro
Feuil24.Activate
SendKeys "{ENTER}", False
Call getPRImacro
Feuil25.Activate
SendKeys "{ENTER}", False
Call getPRImacro
Feuil26.Activate
SendKeys "{ENTER}", False
Call getPRImacro
Feuil27.Activate
SendKeys "{ENTER}", False
Call getPRImacro
Feuil28.Activate
SendKeys "{ENTER}", False
Call getPRImacro
Feuil29.Activate
SendKeys "{ENTER}", False
Call getPRImacro
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Feuil1.Activate
'vchrono = Now() - vchrono
'MsgBox Format(vchrono, "h:mm:ss")
End Sub