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 ) la macro marche bien et met environ 30s-1min à s'exécuter (en cliquant vite sur les box).

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.

10fichier-anony.xlsm (760.57 Ko)

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

0fichier-anony.xlsm (759.09 Ko)

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
Rechercher des sujets similaires à "macro box marche plante"