XL 2016 lancer la macro selon la valeur de cellule

dindin

XLDnaute Occasionnel
Bonjour le forum,
afin de simplifier la tâche de générer un courrier automatiquement, j'ai essayé de mettre en place une macro, mais le code ne fonctionne pas.

la condition est la suivante:

dans la Feuil 1, colonne A , si la valeur de la ActiveCell = " Payé", inscrire la valeur se trouvant sur la même ligne, colonne B dans la cellule G1 de Feuil2.

1648809873973.png


dès qu'on récupère ce n° de reçu et on génère le courrier à l'aide de la formule rechercheV

Voici le code qui fonctionne pas
VB:
Private Sub Worksheet_Change(ByVal Target As Range)

  If Target.Column = 1 Then
If ActiveCell.Value <> "" Then
Exit Sub
ElseIf ActiveCell.Value = "Payé" Then
Feuil2.Range("G1").Value = ActiveCell.Offset(, 2).Value

End If
End If
  

End Sub
 

Dudu2

XLDnaute Barbatruc
Bonjour,
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Column <> 1 Then Exit Sub
    If Target.Value <> "Payé" Then Exit Sub
    
    ActiveWorkbook.Worksheets("Feuil2").Range("G1").Value = Me.Cells(Target.Row, 2).Value
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Dindin,
Sans fichier test, on ne peut que supputé.
Si la cellule est non vide on sort :
VB:
If ActiveCell.Value <> "" Then
Exit Sub
Donc on ne regardera jamais si la cellule contient "Payé" 😂
Peut être ceci :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column > 1 Then Exit Sub
    If ActiveCell.Value = "" Then           ' Si cellule vide on sort
        Exit Sub
    ElseIf ActiveCell.Value = "Payé" Then   ' Si cellule=Payé alors
        Feuil2.Range("G1").Value = ActiveCell.Offset(, 2).Value
    End If
End Sub
Indentez votre code, c'est plus lisible.
 

Dudu2

XLDnaute Barbatruc
En fait ce serait plus juste de faire ça.
Nécessaire sur un étirement ou un coller d'un "Payé" sur les lignes de la colonne A.
Aussi nécessaire pour un coller de plusieurs cellules dont une au moins contient un "Payé" en colonne 1.
Le seul truc c'est comme la cible est uniquement G1, c'est le dernier du range modifié qui gagne.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cellule As Range
 
    For Each Cellule In Target.Cells
        If Cellule.Column = 1 _
        And UCase(Trim(CStr(Cellule.Value))) = "PAYÉ" Then
            ActiveWorkbook.Worksheets("Feuil2").Range("G1").Value = Me.Cells(Cellule.Row, 2).Value
        End If
    Next Cellule
End Sub
 
Dernière édition:

dindin

XLDnaute Occasionnel
Bonjour Dindin,
Sans fichier test, on ne peut que supputé.
Si la cellule est non vide on sort :
VB:
If ActiveCell.Value <> "" Then
Exit Sub
Donc on ne regardera jamais si la cellule contient "Payé" 😂
Peut être ceci :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column > 1 Then Exit Sub
    If ActiveCell.Value = "" Then           ' Si cellule vide on sort
        Exit Sub
    ElseIf ActiveCell.Value = "Payé" Then   ' Si cellule=Payé alors
        Feuil2.Range("G1").Value = ActiveCell.Offset(, 2).Value
    End If
End Sub
Indentez votre code, c'est plus lisible.
Merci pour ton aide
 

Discussions similaires

Statistiques des forums

Discussions
299 942
Messages
1 980 245
Membres
207 039
dernier inscrit
chriichrii77