Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro IF[ valeur] dans colonne 1, insérer [valeur2] dans colonne 2

  • Initiateur de la discussion Initiateur de la discussion bessarabian
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

bessarabian

Guest
Bonjour,

Je suis débutant (archi débutant même) en vba et suis bloqué depuis des heures pour une action qui vous paraîtra sûrement très simple.

Je dois mettre à jour une base de produits.

Mon tableau comporte donc entre autres une colonne "produit" (colonne A) et une colonne "thème" (colonne C). Je voudrais que pour chaque nom de produit qui contient les chaînes de caractères "123" ou "223" ou "222", la valeur de la colonne C à la ligne correspondante soit "11".

Et j'aimerais répéter cette opération dans tous les onglets de mon tableau (qui, dans sa vraie version, est énorme et comporte un nombre de lignes différent à chaque onglet).

J'ai mis un fichier test en pièce jointe, avec ce que j'aimerais obtenir.

J'ai cherché dans le forum (génial d'ailleurs, je suis impressionné par le travail offert par les VBA-experts!), mais n'ai rien trouvé qui corresponde à mon projet. Je remercie par avance tous ceux qui voudront bien m'aider!

Bien sincèrement,
 

Pièces jointes

Re : Macro IF[ valeur] dans colonne 1, insérer [valeur2] dans colonne 2

Bonjour bessarabian,

Bienvenue sur XLD,

un essai

Code:
Sub Met11()
Dim i as long
    For i = 2 To 9
        If CStr(Range("A" & i).Value) Like "*[12]2[23]*" Then
            Range("C" & i).Value = 11
        End If
    Next i
End Sub
Edit : Oups, mon code met 11 aussi pour "122", je ne sais pas si c'est grave...

Re-Edit : Bonjour JNP 😉. Et en plus, je n'avais pas lu la question jusqu'au bout (plusieurs feuilles, nombre de lignes variable), la solution de JNP s'impose donc 🙂
 
Dernière édition:
Re : Macro IF[ valeur] dans colonne 1, insérer [valeur2] dans colonne 2

Bonjour Bessarabian et bienvenue, salut TotoTiti 🙂,
Une proposition pour tous les feuillets
Code:
Sub Test()
Dim Feuille As Worksheet, Cellule As Range
For Each Feuille In ThisWorkbook.Worksheets
With Feuille
For Each Cellule In .Range("A2:A" & .Range("A1048576").End(xlUp).Row)
If Cellule Like "*123*" Or Cellule Like "*223*" Or Cellule Like "*222*" _
    Then Cellule.Offset(0, 2) = 11
Next
End With
Next
End Sub
Les classes de TotoTiti sont plus efficaces, mais pas forcément évidentes pour un débutant 🙄...
Bonne soirée 😎
Ajout : Oui, j'avais pas vu ton dérapage de classe 😛... Avec RegExp, on aurait pu "*(123|223|222)*", mais pas avec Like 🙄...
 
Dernière édition:
Re : Macro IF[ valeur] dans colonne 1, insérer [valeur2] dans colonne 2

Bonjour bessarabian, Tototiti ; ), JNP ; )
En retard, mais comme j'ai préparé quelque chose.....
VB:
Sub test()
Dim Liste(), Tablo()
Liste = Array(123, 223, 222)
For Each F In Worksheets
    Tablo = F.Range(F.Cells(1, 1), F.Cells(Rows.Count, 3).End(xlUp)).Value
    For i = 2 To UBound(Tablo, 1)
        For j = LBound(Liste) To UBound(Liste)
            If InStr(Tablo(i, 1), Liste(j)) <> 0 Then Tablo(i, 3) = 11: Exit For
        Next j
    Next i
    F.Cells(1, 1).Resize(UBound(Tablo, 1), UBound(Tablo, 2)) = Tablo
Next F
End Sub
Cordialement
 
Re : Macro IF[ valeur] dans colonne 1, insérer [valeur2] dans colonne 2

Bonsoir le fil, bienvenu Bessarabian, bonsoir le forum,

je te propose aussi la macro événementielle SheetChange ci-dessous à placer dans le composant ThisWorkbook :
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'si le changement a lieu ailleurs que dans la colonne A, sort de la procédure
If Target.Column <> 1 Then Exit Sub
'si la cellule de la colonne A est effacée, efface la cellule de la colonne C
If Target.Value = "" Then Target.Offset(0, 2).Value = ""
'si la cellule de la colonne A contient "123" ou "223" ou "222", la cellule de la colonne C prend la valeur "11"
If Target.Value Like "*123*" Or Target.Value Like "*223*" Or Target.Value Like "*222*" Then Target.Offset(0, 2).Value = "11"
End Sub
 
Re : Macro IF[ valeur] dans colonne 1, insérer [valeur2] dans colonne 2

Merci infiniment!!!! Quelle rapidité!

La macro de JNP m'affiche une erreur cependant (erreur d'exécution 1004). Quand je lance le déboguage VBA surligne la ligne:

For Each Cellule In .Range("A2:A" & .Range("A1048576").End(xlUp).Row)

Celle de tototiti fonctionne parfaitement mais puisqu'il me conseille celle de JNP 🙂 ...

Merci en tout cas!!!!

EDIT: je n'avais pas rafraîchi, je viens de voir la solution de Efgé qui fonctionne parfaitement!

Merci à tous pour cette aide précieuse! Je reviendrai!! (comme disait un certain acteur américain qui doit avoir à peu près mon niveau de VBA). Et dire que j'y ai passé ma journée 🙂
 
Dernière modification par un modérateur:
Re : Macro IF[ valeur] dans colonne 1, insérer [valeur2] dans colonne 2

Re 🙂,
La macro de JNP m'affiche une erreur cependant (erreur d'exécution 1004). Quand je lance le déboguage VBA surligne la ligne:

For Each Cellule In .Range("A2:A" & .Range("A1048576").End(xlUp).Row)
C'est sûr que si tu demande une version 2010, mais que tu l'exécutes sur des fichiers venant de 2003, ça peut pas le faire 😛...
Avec Range("A65536"), ça aurait fonctionné, mais tu as dit
mon tableau (qui, dans sa vraie version, est énorme et comporte un nombre de lignes différent à chaque onglet).
J'ai donc considéré que tu avais plus de 65000 lignes 🙄...
Bonne soirée 😎
 
Re : Macro IF[ valeur] dans colonne 1, insérer [valeur2] dans colonne 2

Merci Robert,

J'aimerais utiliser ta macro mais je n'arrive pas à l'exécuter! Je l'ai pourtant placée dans le classeur concerné (c'est bien ce que tu veux dire par insérer dans le composant ThisWorkbook? ou je suis à côté de la plaque?).

Merci d'avance!

Edit: pour être plus précis, j'ai essayé d'insérer le code dans ThisWorkbook, dans le module du classeur, partout en fait! Mais je n'arrive pas à l''exécuter! Je ne connais pas les macros évenementielles et ne parviens pas à trouver la solution... Quelqu'un peut m'aider??? Merci beaucoup d'avance!
 
Dernière modification par un modérateur:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

D
Réponses
11
Affichages
2 K
D
S
Réponses
0
Affichages
1 K
StagiaiireVannes
S
R
Réponses
15
Affichages
5 K
razorlight
R
D
Réponses
5
Affichages
1 K
Dimebag
D
Y
Réponses
11
Affichages
3 K
Y
F
Réponses
12
Affichages
2 K
T
Réponses
11
Affichages
7 K
T
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…