Remplacement de données avec une boucle If

Bonjour à tous,

Débutant dans le VBA, je me suis attaqué à un problème au-delà de mes capacités...

Je dispose d’un code de remplacement de valeur écrit comme ceci :

Sheets("A").Select

Columns("I:I").Select

Selection.Replace What:="S", Replacement:="S1", LookAt:=xlPart, SearchOrder:=xlByRows

Cependant sur ce même onglet "A", j’aimerais faire régir la colonne J, en intégrant dans le remplacement, une boucle if tel que si en face de S de la colonne I j’ai P en colonne J alors je remplace S en S2, sinon en S1.

If Columns(« J :J »).Value Like « *P* » then

Selection.Replace What:="S", Replacement:="S2", LookAt:=xlPart, SearchOrder:=xlByRows

Else

Selection.Replace What:="S", Replacement:="S1", LookAt:=xlPart, SearchOrder:=xlByRows

End If

Si quelqu’un comprend mon problème et dispose d’éléments, merci,

Bien Cordialement

David

Bonjour David, et bienvenue sur le Forum,

Essaye le code ci-dessous et reviens vers nous si sa ne conviens pas !

Sub Remplace()
Dim x As Long
For x = Range("I1").End(xlDown).Row To Range("I" & Rows.Count).End(xlUp).Row
    If InStr(1, Cells(x, 10), "P") > 0 Then Cells(x, 9).Replace What:="S", Replacement:="S2", LookAt:=xlPart, SearchOrder:=xlByRows
    If InStr(1, Cells(x, 10), "P") = 0 Then Cells(x, 9).Replace What:="S", Replacement:="S1", LookAt:=xlPart, SearchOrder:=xlByRows
Next
End Sub

Restant à ta dispo !

Bonjour Juice,

Merci beaucoup pour ta réponse, cela fonctionne exactement comme je le voulais, j'ai juste remplacé xlDown et xlUp l'un par l'autre,

Bien Cordialement

David

Bonjour Juice,

Merci beaucoup pour ta réponse, cela fonctionne exactement comme je le voulais, j'ai juste remplacé xlDown et xlUp l'un par l'autre,

Bien Cordialement

David

Bonjour,

Range("I1").End(xlDown).Row

Donne la ligne de la première donnée contenue en colonne I, en partant de I1 (et en descendant vers le bas, d'où xlDown). Ceci est équivalent à CTRL + FLECHE BAS en partant de I1. S'il n'y a pas de cellule vide entre I1 et la fin de tes données, la ligne renvoyée sera la dernière.

A l'inverse :

Range("I" & Rows.Count).End(xlUp).Row

Remonte la colonne I en partant de la dernière ligne jusqu'à trouver une cellule contenant des données (ou une formule...). En clair, cela te donne la dernière ligne non vide en colonne I.

Tout ça pour dire que le code proposé par Juice (salut au passage !) est correcte, sauf si tu n'as pas de vide avant la première donnée. Auquel cas, l'instruction Range("I1").End(xlDown).Row peut être remplacé par 1 (ou 2 si la première ligne est une en-tête).

Bonjour Pedro22,

Merci pour les précisions, ça m'est encore plus clair maintenant !

David

Rechercher des sujets similaires à "remplacement donnees boucle"