Boucle avec 2 conditions pour renommer une Cellule X en VBA
Bonjour à tous,
Je suis nouveau sur ce forum, j'ai fait de nombreuses recherches et malgré des choses que j'ai trouvé qui m'ont permises d'avancer cela ne m'apporte pas le résultat escompté.
Voici ma problématique :
Disons que j'ai trois colonnes A, B, C avec ce schéma :
A B C
1 REALNOT COR REALNOT BUREAU MAITRE DILLINGER
2 MAINTENANCE REPAR BOUYGUES MAINTENANCE
3 INSTALLATION INST BT FRANCE
Je voudrais faire une boucle avec un nombre de ligne remplies inconnues avec les conditions suivantes :
Si en colonne C il y a du texte tel *REAL* alors je voudrais appliquer en colonne A le nom BT_REAL
Sinon lorsqu'il y a autre chose que *REAL* en colonne B alors Si en colonne B il y a COR je veux que le texte appliquer soit BT_SAV
Sinon si il y a en colonne B INST alors je voudrais appliquer le nom de BT_INST dans le colonne A
Et ceci pour chaque ligne, le nombre de ligne varie en fonction de l'extraction des données.
J'ai donc fait une boucle ainsi mais cela ne marche pas :
Sub Test_remplacement_activity()
Dim Row As Long
Numero_Ligne = 2
For Each Ligne In Worksheets("Feuil1").Range("2:65535").Rows
If Ligne.Cells(Numero_Ligne, 3).Value Like "*REAL*" Then
Rows.Cells(Numero_Ligne, 1).Name = "BT_REAL"
Numéro_Ligne = Numéro_Ligne + 1
Else
If Ligne.Cells(Numero_Ligne, 2).Value Like "COR" Then
Rows.Cells(Numero_Ligne, 1).Name = "BT_SAV"
Numero_Ligne = Numero_Ligne + 1
Else
If Ligne.Cells(Numero_Ligne, 6).Value Like "REPAR" Then
Rows.Cells(Numero_Ligne, 4).Name = "BT_SAV"
Numero_Ligne = Numero_Ligne + 1
Else
If Ligne.Cells(Numero_Ligne, 6).Value Like "INST" Then
Rows.Cells(Numero_Ligne, 4).Name = "BT_INST"
Numero_Ligne = Numero_Ligne + 1
End If
End If
End If
End If
Next
End Sub
Je butte là dessus, j'ai essayer d'autres formulations mais sans résultat, cela fait deux semaine que je cherche une solution, je n'en dors plus la nuit
Je vous remercie à tous de votre attention et remercie d'avance de vos réponses
Bien Bonne Soirée
Bonjour,
Je ne suis pas sûr d'avoir bien compris ce que tu veux à la vue de ton code mais voici une piste à tester :
Sub Test_remplacement_activity()
Dim Plage As Range
Dim Cel As Range
'défini la plage sur la colonne C de la feuille "Feuil1" à partir de C2
With Worksheets("Feuil1"): Set Plage = .Range(.Cells(2, 3), .Cells(.Rows.Count, 3).End(xlUp)): End With
For Each Cel In Plage
If Cel.Value Like "*REAL*" Then 'colonne C
Cel.Offset(, -2).Value = "BT_REAL" 'colonne A
ElseIf Cel.Offset(, -1).Value Like "COR" Then 'colonne B
Cel.Offset(, -2).Value = "BT_SAV" 'colonne A
ElseIf Cel.Offset(, 3).Value Like "REPAR" Then 'colonne F
Cel.Offset(, 1).Value = "BT_SAV" 'colonne D
ElseIf Cel.Offset(, 3).Value Like "INST" Then 'colonne F
Cel.Offset(, 1).Value = "BT_INST" 'colonne D
End If
Next Cel
End SubBonjour et bienvenue sur le forum
Tu devrais joindre ton fichier en y mettant un exemple de ce que tu veux obtenir...
Bye !
Bonjour,
Merci pour vos réponses et plus particulièrement à toi Theze, j'ai simplement modifié une toute petite chose dans ton code pour que ça passe bien toutes mes lignes, et c'est impeccable, voici la modif pour info quand même :
'défini la plage sur la colonne C de la feuille "Feuil1" à partir de C2
With Worksheets("Feuil1"): Set Plage = .Range(.Cells(, 3), .Cells(.Rows.Count, 3).End(xlUp)): End WithJ'ai simplement enlever le numéro de ligne que tu avais mis dans le .range(.cells(_, 3),
Merci beaucoup, ça me permet d'avancer énormément,
A très bientôt