Exécuter 2 actions si une condition est vrai

Bonjour,

Je cherche à appeler deux macros à la suite si la valeur d'une cellule change.

Ma première macro sert à effacer les valeurs d'une colonne et ma deuxième sert à ajouté des valeurs en fonction d'une cellule.

J'ai réaliser la macro suivante mais elle ne fonctionne pas.

image

Auriez-vous une solution ?

JM

Bonsoir

Vous pouvez peut être essayer :

Call AuSecours

Mais je ne garanti rien

Plus sérieusement avec le fichier on pourrait peut être voir ce qu'il y a à faire…

Cordialement

Bonsoir,

en reprenant votre code sur ce fichier :

Cela fonctionne... Alors il faudrait voir au niveau de vos deux macros : autant la deuxième efface le résultat de la seconde. La cellule C2 est elle modifiée par une (les deux) macros ? Du coup cela pourrait provoquer des "interférences"...

@ bientôt

LouReeD

2excel.zip (578.54 Ko)

Yal_Excel, si cette fonction existait ça m'aiderais grandement ! J'ai joins mon fichier

LouReeD, oui je crois que le problème vient de là, ma première macro efface la deuxième c'est pour cela que je souhaite savoir comment appeler les macro l'une après l'autre, peut être qu'avec le fichier joint vous comprendrez mieux mon problème...

Bonjour

Il suffit de désactiver la gestion des évènements le temps que la première macro s'exécute

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False ' Désactivation des évènements
   If Target.Address = "$C$2" Then

    Call Efface
    Call Longueur
    End If

Application.EnableEvents = True' Résactivation des évènements
End Sub

Dans le code de la feuille "Diagramme de moments"

Bonjour,

Merci pour la réponse mais cependant ça ne marche pas, mes valeurs ne s'affiche toujours pas quand la valeur de la cellule C2 est changé...

image

Il me semble avoir écris la même chose que toi mais il est possible que je n'ai pas bien compris..

Bonjour

Pourquoi ne pas appeler la macro Longueur à la fin du code de la macro Efface ?

Bonjour Scorpdragon,

J'ai essayé cette option mais ça ne fonctionne pas non plus...

Avez vous d'autres idées ?

Dans la feuille Diagramme de moments

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
Set Cell = Range("C2")
    If Not Application.Intersect(Cell, Range(Target.Address)) Is Nothing Then
        Call Efface
    End If
End Sub

Après je ne suis pas un pro. Il y a surement des gens plus éclairés que moi.

Je ne suis pas une pro non plus, j'ai essayer mais ça ne marche toujours pas...

Je n'ai pas vraiment compris ce que vous avez essayer de faire, auriez vous le temps de m'expliquer ?

Merci quand même pour la réponse

Tu es sûr que "EnableEvents" est bien True

Sub restaureEvents()
  Application.EnableEvents = True
End Sub

Dans un module standard

3excel.zip (578.12 Ko)

Alors j'ai modifié ton fichier en espérant avoir compris ce que tu voulais faire.par contre impossible de l'uploader du coup pour la faire courte

J'ai supprimé tout les modules et les macros existantes ensuite dans la feuille "sens de portée" j'ai mis ça :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
    If Not Intersect(Target, Range("D4")) Is Nothing Then
        Worksheets("Diagramme de moments").Range("C2") = Worksheets("Sens de portée").Range("D4").Value
    End If
    Worksheets("Diagramme de moments").Activate
    Lx = 0 'Valeur de départ
    ligne = 5
    Do While Lx <= Worksheets("Diagramme de moments").Range("C2").Value 'Tant que la longueur n'a pas atteint lx max
        Worksheets("Diagramme de moments").Cells(ligne, 2) = Lx
        Lx = Lx + 0.1 'lx est augmenté de 0.1 à chaque boucle
        ligne = ligne + 1 'La ligne est augmenté de 1 à chaque boucle
    Loop
Application.EnableEvents = True
End Sub
Private Sub Suivant_Click()
     If Range("C7") = "La dalle porte dans un sens" Then
       Sheets("Dalle portant dans un sens").Activate       
     ElseIf Range("C7") = "La dalle porte dans les deux sens" Then
       Sheets("Dalle portant dans deux sens").Activate       
     Else     
       Sheets("Sens de portée").Activate     
     End If     
End Sub

Comme tu peux le voir je n'ai pas touché au Private Sub Suivant_Click par contre le code le concernant ne fonctionne pas car il doit manquer des feuilles à ton classeur je suppose.

Rien ne marche merci tout de même pour vos réponse...

JM

Si ça ne fonctionne pas c'est que ton fichier n'est pas conforme à celui que tu as envoyé. Parce que chez moi ça marche. Quand je change la valeur en C2 de la feuille Diagramme de moments la liste en dessous se met bien à jour.

2excel.zip (578.12 Ko)

Bonjour

En regardant ton fichier j'ai supposé que tu mettais une valeur dans la feuille "sens de portée" que cette valeur se copie dans la cellule C2 de la feuille Diagramme de moments et alors que tu efface la colonne B5: B1005 pour ensuite lancer ta boucle qui incrémente de 0,1 jusqu'à la valeur de C2

Chez moi le code que je t'ai transmis fonctionne donc je ne vois pas comment t'aider.

Bonjour,

Yal_excel, si je change la valeur de lx alors même dans votre fichier, ça ne marche pas, je n'ai plus les valeurs dans la feuille "calcul de moments".

Bonjour,

Scopdragon, je ne souhaite pas que l'utilisateur est accès à la feuille Diagramme des moment donc je ne souhaite pas passer automatiquement à cette feuille...

De plus je souhaite que les valeurs « résiduelle » de la potentielle précédente longueur ne restent pas.

Je m’explique, si la dernière fois que j’ai utilisé la note de calcul j’ai calculé une dalle qui avait une longueur lx de 5 m et qu’aujourd’hui ma longueur lx est de 3 m, si on n’efface pas les valeurs dans le tableau alors on aura toujours les valeurs jusqu’à lx = 5 m.

J'ai peur de paraitre dans l'attente de vos réponse mais j'essaye moi aussi de trouver des solutions, si j'y parviens je la posterais ici.

J'ai ENFIN réussis, la solution était simple finalement !

Sous les conseils de Scorpdragon j'ai supprimé mes macro et j'ai simplement écrit le code suivant dans la feuille "Diagramme de moments":

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$C$2" Then

        Worksheets("Diagramme de moments").Range("B5:B1005").ClearContents

          Lx = 0 'Valeur de départ
            ligne = 5

    Do While Lx <= Worksheets("Diagramme de moments").Range("C2").Value 'Tant que la longueur n'a pas atteint lx max
        Worksheets("Diagramme de moments").Cells(ligne, 2) = Lx
        Lx = Lx + 0.1 'lx est augmenté de 0.1 à chaque boucle
        ligne = ligne + 1 'La ligne est augmenté de 1 à chaque boucle

    Loop

    End If

End Sub

Merci à tous, vos proposition m'ont grandement aidé à trouver la solution !

Voilà une solution s'affranchissant des appels de procédures.

4excel-yal-v2.zip (579.88 Ko)
Rechercher des sujets similaires à "executer actions condition vrai"