Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

la macro ne s execute pas toute seul...

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

marc19

XLDnaute Nouveau
slt , je fais un prog qui doit executer une macro qd une variable est autour de deux valeur, mais je ne comprend pas pourquoi ca ne fonctionne pas alors que le test doit etre fait sans s arréter...😕

c est pour faire une historique de la temperature

Sub TEST()

Do Until (Range("I4").Value <= Range("B47").Value) Or (Range("I4").Value >= Range("B48").Value)
Application.Run "macro1"
Loop
MsgBox "OK, poursuite de la procédure."
End Sub



'et voici la macro

sub macro1()

Range("A4:R4").Select
Selection.Copy
Sheets("historique").Select
Range("A4").Select
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("temperature").Select
Range("D4").Select
Selection.Copy
Range("G4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select

end sub

merci de bien vouloir m aider.
 
Dernière édition:
Re : la macro ne s execute pas toute seul...

bonjour,

si je comprends bien, avec ceci, si ça démarre ça ne s'arrête plus !?
puisque Do Until = boucle tant que ok
donc si on ne modifie pas une de ces cellules ça boucle à l'infini !

Sub TEST()
Do Until (Range("I4").Value <= Range("B47").Value) Or (Range("I4").Value >= Range("B48").Value)
Application.Run "macro1"
Loop
MsgBox "OK, poursuite de la procédure."
End Sub

voir:
Sub TEST()
If (Range("I4").Value <= Range("B47").Value) Or (Range("I4").Value >= Range("B48").Value) Then macro1
MsgBox "OK, poursuite de la procédure."
End Sub

maintenant il faut une procédure événementielle ou un bouton de commande ou autre lié à cette macro1
sinon ça va pas se lancer comme par enchantement !
tu peux essayer, depuis le code, avec F5 sur la macro TEST()

et puis vérifier le contenu des cellules !?
 
Re : la macro ne s execute pas toute seul...

Bonjour à tous
Code:
Do Until (Range("I4").Value <= Range("B47").Value) Or (Range("I4").Value >= Range("B48").Value)
il est peut-être également utile de spécifier la feuille sur laquelle doit se faire le test

Do Until (Sheets("la_feuille").Range("I4").Value <= Sheets("la_feuille").Range("B47").Value) Or (Sheets("la_feuille").Range("I4").Value >= Sheets("la_feuille").Range("B48").Value)

à+
Philippe
 
Re : la macro ne s execute pas toute seul...

désolé mais le resultat est le meme .
que ce soit avec do while , until .... et if , ca s execute 1 fois ou pas , alors j ai mis un bouton que j execute a chaque fois en manuellement mais meme resultat. le bouton ne resoud rien car je ne peux pas appuyer xxx nbr et en plus j ai pas envie, j sais plus koi faire, plus d idées et c est stressant, en tt cas merci de vs pencher la dessus ,roland_m et phlaurent55...
 
Re : la macro ne s execute pas toute seul...

j ai remarqué qu en faisant le pas-à-pas (F8) il n y a pas de probleme avec la formule (qui est logique d'ailleur) elle marche...Mais

quand je réinitialise, elle ne fonctionera q'une fois et elle s 'arrete ou elle bug la feuille excel et répete l execution de la macro sans cesse ce qui fait bugger et figer toute la page et meme d autre calcule sur d autre feuille... donc je me doute a ce que cela ai un rapport avec la vitesse de calcule d excel ,(le pc est loin d etre nul) 😕

je pense que je doit modifier la macro au niveau du 2eme copier coller qui est en rapport avec (i4), j ensuis presque sur ,je vais modifier/tester

SINON laisser un temps dééxecution entre le 1er copier coller et le 2eme , c est surement ca !!! en faite elle s execute tellement vite que la feuille n a pas le temps de "respirer"( de recupérer des information venant d autre calcule)

(ps: i4 n est pas un chiffre aléatoire il monte descend de 1)
 
Dernière édition:
Re : la macro ne s execute pas toute seul...

re

en debut de macro mettre ceci :
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual


et en fin de macro remettre ceci :
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

soit :
Sub macro1()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Range("A4:R4").Copy
Sheets("historique").Select
Range("A4").Select
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("temperature").Select
Range("D4").Copy
Range("G4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
 
Dernière édition:
Re : la macro ne s execute pas toute seul...

Re, bonjour
elle s execute tellement vite que la feuille n a pas le temps de "respirer" .......

c'est un point de vue assez poétique,
et si tu veux que le code travaille en apnée: Application.Calculation = (manuel en début de code et remettre en Automatic à la fin

comme suggéré à la réponse #5, un fichier exemple serait le bienvenu

à+
Philippe

Édit: Bing, Bonjour Roland
 
Re : la macro ne s execute pas toute seul...

Bonjour,

Si tu veux exécuter ta macro à chaque changement de valeur des cellules "I4", "B47" et "B48", il te faut mettre le code dans le module de la feuille sur l'évènement "Change" car même avec un DoEvents dans ta boucle, tu monopolise inutilement le processeur. A mettre dans le module de la feuille :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Not Intersect(Target, Union(Range("I4"), Range("B47"), Range("B48"))) Is Nothing Then
    
        If Range("I4") <= Range("B47") Or Range("I4") >= Range("B48") Then
            
            macro1
            
        End If

    End If
    
End Sub

Sub macro1()

    With Application

        .ScreenUpdating = False

        .Calculation = xlCalculationManual

        Range("A4:R4").Copy Sheets("historique").Range("A4")

        .CutCopyMode = False

        Sheets("temperature").Range("D4") = Sheets("temperature").Range("G4")

        .Calculation = xlCalculationAutomatic

        .ScreenUpdating = True

    End With
    
End Sub

Hervé.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
18
Affichages
514
Réponses
10
Affichages
738
Réponses
2
Affichages
368
Réponses
17
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…