Donner une valeur X pour chaque ultime occurrence d'un champ

Bonjour à tous,

En vue de l'utilisation des formules "Suivant si" pour un publipostage, je cherche à donner une valeur spécifique (par exemple la valeur "X") à un champ pour chaque dernière occurrence d'une valeur d'un autre champ.

Je vous illustre tout cela en vous donnant le résultat attendu :

Champ A | Champ B

M X |

M X |

M X | X

M Y |

M Y | X

M Z | X

M @ |

M @ | X

Sachant que j'ai plus de 11000 lignes pour environ 2300 Champ A différents, je cherche à automatiser la manip' pour que ce ne soit pas fastidieux et pour éviter de me tromper.

En vous remerciant d'avance de vos réponses !

bonsoir

une proposition de macro

Sub metx()
    a = "A"    'colonne champ A
    b = "B"    'colonne champ B
    dl = Cells(Rows.Count, a).End(xlUp).Row
    For i = 2 To dl
        If Cells(i, a) <> Cells(i + 1, a) Then Cells(i, b) = "X"
    Next i
End Sub

Bonjour,

Un essai dis moi si cela fonctionne.

Instruction:

Copie colle tes valeurs du champs A à partir de A1 et clique sur Go.

Rebonjour,

C'est la première fois que je tente de créer une macro donc je galère un peu même si le code est déjà créé, fatalement.

Pour la méthode avec la macro, lorsque je l'exécute dans un module de VisualBasic, ça m'annonce :

Erreur d'exécution '1004'

Erreur définie par l'application ou par l'objet

En cliquant sur débogage j'obtiens :

bugmacroultoccpubpost imagesia com ob46

Merci d'avance de vos débogages !

Pour la méthode de bigdaddy154, où est le Go sur le quel il faut cliquer ?

Bonjour,

c'est ta variable a qui est incorrecte.

a doit être le numéro de ta colonne ou tu souhaites compter le nb de lignes.

Super, merci bigdaddy154 !

Ce qui, vu que :

  • ma colonne Destinataire_Nom est en colonne M, soit la 13ème ;
  • ma colonne X est en colonne R, soit la 18ème ;
, me donne donc :
Sub Macro()
    a = 13
    b = 18
    dl = Cells(Rows.Count, a).End(xlUp).Row
    For i = 2 To dl
        If Cells(i, a) <> Cells(i + 1, a) Then Cells(i, b) = "X"
    Next i
End Sub

Ce qui en faisant F5 me permet d'arriver au résultat escompté, avec la valeur X pour le champ X à chaque dernière occurrence d'une valeur donnée au champ Destinataire_Nom.

Merci à vous !

bonjour,

macro adaptée pour déterminer le numéro de colonne sur base de son entête

Sub metx()
   ta = " Destinataire_Nom"    'titre exact de colonne champ A
   tb = "X"    'titre exact de colonne champ B
   lt = 1            ' numéro de la ligne des titres de colonne
   Set re = Rows(lt).Find(ta, lookat:=xlWhole)
   If re Is Nothing Then MsgBox "titre de colonne " & ta & " non trouvé": Exit Sub
   a = re.Column
   Set re = Rows(1).Find(tb, lookat:=xlWhole)
   If re Is Nothing Then MsgBox "titre de colonne " & tb & " non trouvé": Exit Sub
   b = re.Column
   dl = Cells(Rows.Count, a).End(xlUp).Row
    For i = 2 To dl
        If Cells(i, a) <> Cells(i + 1, a) Then Cells(i, b) = "X"
    Next i
End Sub

SMPSS a écrit :

Super, merci bigdaddy154 !

Ce qui, vu que :

  • ma colonne Destinataire_Nom est en colonne M, soit la 13ème ;
  • ma colonne X est en colonne R, soit la 18ème ;
, me donne donc :
Sub Macro()
    a = 13
    b = 18
    dl = Cells(Rows.Count, a).End(xlUp).Row
    For i = 2 To dl
        If Cells(i, a) <> Cells(i + 1, a) Then Cells(i, b) = "X"
    Next i
End Sub

Ce qui en faisant F5 me permet d'arriver au résultat escompté, avec la valeur X pour le champ X à chaque dernière occurrence d'une valeur donnée au champ Destinataire_Nom.

Merci à vous !

tu pouvais aussi mettre l'identifiant de la colonne plutôt que son numéro

Sub Macro()
    a = "M"
    b = "R"
    dl = Cells(Rows.Count, a).End(xlUp).Row
    For i = 2 To dl
        If Cells(i, a) <> Cells(i + 1, a) Then Cells(i, b) = "X"
    Next i
End Sub

Merci pour toutes ces précisions H2SO4 !

Rechercher des sujets similaires à "donner valeur chaque ultime occurrence champ"