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