VBA : execution automatique de macro si cellule modifiée

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 !

dionys0s

XLDnaute Impliqué
Bonsoir le forum

J'aimerais que ma macro s'exécute automatiquement à chaque fois que ma cellule C2 est modifiée, et ce sans appuyer sur un bouton.

Est-ce possible ?

le code :

Code:
Sub CdS()

Range("C3").Select
ActiveCell.FormulaR1C1 = _
        "=IF(ISNA(IF(COUNTIF('Datas CdS'!R2C1:R5000C1,R2C[0])=0,"""",INDEX('Datas CdS'!R1,MATCH(R[0]C2,OFFSET('Datas CdS'!R1C1,MATCH(R2C[0],'Datas CdS'!R2C1:R5000C1),,,256),0)))),"""",IF(COUNTIF('Datas CdS'!R2C1:R5000C1,R2C[0])=0,"""",INDEX('Datas CdS'!R1,MATCH(R[0]C2,OFFSET('Datas CdS'!R1C1,MATCH(R2C[0],'Datas CdS'!R2C1:R5000C1),,,256),0))))"

Range("D3").Select

ActiveCell.FormulaR1C1 = _
        "=IF(SUMPRODUCT(('Datas CdS'!R1C2:R1C87=CdS!R[0]C[-1])*('Datas CdS'!R1C2:R1C87<>""Annonce"")*('Datas CdS'!R1C2:R1C87<>""Entracte"")*('Datas CdS'!R4C2:R4C87))=0,"""",SUMPRODUCT(('Datas CdS'!R1C2:R1C87=CdS!R[0]C[-1])*('Datas CdS'!R1C2:R1C87<>""Annonce"")*('Datas CdS'!R1C2:R1C87<>""Entracte"")*('Datas CdS'!R4C2:R4C87)))"

    Range("C3:D3").Select
    Range("D3").Activate
    Selection.AutoFill Destination:=Range("C3:D35")
    Range("C3:D35").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("C36").Select
    
    ActiveCell.FormulaR1C1 = "=SUM(R[-33]C[1]:R[-1]C[1])&"" secondes *"""
    Range("C36").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("C2:D2").Select

End Sub

Merci d'avance 😎
 
Dernière édition:
Re : VBA : execution automatique de macro si cellule modifiée

Bonsoir dyonisos,

Tu copie le code dans la zone code de la feuille où tu souhaites que ta macro s'exécute.
Ensuite, tu écris le code :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [C2]) Is Nothing Then
        Cds
    End If
End Sub

A+
 
Re : VBA : execution automatique de macro si cellule modifiée

Je ne suis pas certain d'avoir compris.

J'ai mis le code de ma macro dans le code de la feuille concernée, et ensuite le code de Fred0o juste à la suite. En tout cas c'est ce que j'ai compris qu'il fallait faire.
 
Re : VBA : execution automatique de macro si cellule modifiée

Bonjour dyonisos,

En fait, suivant ma version d'EXCEL, mon code est légèrement différent. Je t'ai donc mis l'ensemble du code à copier dans le code de ta feuille :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [C2]) Is Nothing Then
        CdS
    End If
End Sub

Sub CdS()
    Range("C3").FormulaR1C1 = "=IF(ISNA(IF(COUNTIF('Datas CdS'!R2C1:R5000C1,R2C[0])=0,"""",INDEX('Datas CdS'!R1,MATCH(R[0]C2,OFFSET('Datas CdS'!R1C1,MATCH(R2C[0],'Datas CdS'!R2C1:R5000C1),,,256),0)))),"""",IF(COUNTIF('Datas CdS'!R2C1:R5000C1,R2C[0])=0,"""",INDEX('Datas CdS'!R1,MATCH(R[0]C2,OFFSET('Datas CdS'!R1C1,MATCH(R2C[0],'Datas CdS'!R2C1:R5000C1),,,256),0))))"
    Range("D3").FormulaR1C1 = "=IF(SUMPRODUCT(('Datas CdS'!R1C2:R1C87=CdS!R[0]C[-1])*('Datas CdS'!R1C2:R1C87<>""Annonce"")*('Datas CdS'!R1C2:R1C87<>""Entracte"")*('Datas CdS'!R4C2:R4C87))=0,"""",SUMPRODUCT(('Datas CdS'!R1C2:R1C87=CdS!R[0]C[-1])*('Datas CdS'!R1C2:R1C87<>""Annonce"")*('Datas CdS'!R1C2:R1C87<>""Entracte"")*('Datas CdS'!R4C2:R4C87)))"
    Range("C3:D3").Select
    Range("D3").Activate
    Selection.AutoFill Destination:=Range("C3:D35")
    Range("C3:D35").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("C36").ActiveCell.FormulaR1C1 = "=SUM(R[-33]C[1]:R[-1]C[1])&"" secondes *"""
    Range("C36").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("C2:D2").Select
End Sub

Si ça ne marche pas, il faudra que tu mettes en pièce jointe ton fichier pour que je puisse y voir plus clair. A+
 
Re : VBA : execution automatique de macro si cellule modifiée

Rhaaaa mais je comprends pas !!

En fait j'ai posté ce thread hier et depuis j'ai modifié mon code pour "variabiliser" les lignes et colonnes de mes deux premières formules, et la macro fonctionnait complètement.

Du coup j'ai mis le code suivant dans ma feuille CdS :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [C2]) Is Nothing Then
        CdS
    End If
End Sub

Sub CdS()

Feuil22.Select

Dim DerLign As Integer

DerLign = Range("A65536").End(xlUp).Row

Dim DerCol As Integer

DerCol = Range("IV1").End(xlToLeft).Column

Feuil23.Select

Range("C3").Select
ActiveCell.FormulaR1C1 = _
        "=IF(ISNA(IF(COUNTIF('Datas CdS'!R2C1:R" & DerLign & "C1,R2C[0])=0,"""",INDEX('Datas CdS'!R1,MATCH(R[0]C2,OFFSET('Datas CdS'!R1C1,MATCH(R2C[0],'Datas CdS'!R2C1:R" & DerLign & "C1),,,256),0)))),"""",IF(COUNTIF('Datas CdS'!R2C1:R" & DerLign & "C1,R2C[0])=0,"""",INDEX('Datas CdS'!R1,MATCH(R[0]C2,OFFSET('Datas CdS'!R1C1,MATCH(R2C[0],'Datas CdS'!R2C1:R" & DerLign & "C1),,,256),0))))"

Range("D3").Select

ActiveCell.FormulaR1C1 = _
        "=IF(SUMPRODUCT(('Datas CdS'!R1C2:R1C" & DerCol & "=CdS!R[0]C[-1])*('Datas CdS'!R1C2:R1C" & DerCol & "<>""Annonce"")*('Datas CdS'!R1C2:R1C" & DerCol & "<>""Entracte"")*('Datas CdS'!R4C2:R4C" & DerCol & "))=0,"""",SUMPRODUCT(('Datas CdS'!R1C2:R1C" & DerCol & "=CdS!R[0]C[-1])*('Datas CdS'!R1C2:R1C" & DerCol & "<>""Annonce"")*('Datas CdS'!R1C2:R1C" & DerCol & "<>""Entracte"")*('Datas CdS'!R4C2:R4C" & DerCol & ")))"

    Range("C3:D3").Select
    Range("D3").Activate
    Selection.AutoFill Destination:=Range("C3:D31")
    Range("C3:D31").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("C32").Select
    
    ActiveCell.FormulaR1C1 = "=SUM(R[-29]C[1]:R[-1]C[1])&"" secondes *"""
    Range("C32").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("C2").Select

End Sub

ca ne marche toujours pas. Bon au moins ça arrête de faire tourner mon truc en boucle, mais ça me met des valeurs vides ou #VALEUR!

😕
 
- 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

C
Réponses
8
Affichages
2 K
Genii
G
M
  • Question Question
Réponses
0
Affichages
1 K
Mirguy23
M
N
  • Question Question
Réponses
5
Affichages
3 K
K
Réponses
0
Affichages
3 K
K
L
Réponses
7
Affichages
3 K
Limbouille
L
L
Réponses
4
Affichages
2 K
Lorenzogazier
L
Y
Réponses
0
Affichages
2 K
Y
Retour