Condition dans VBA

Bonjour,

J'ai une colonne qui contient des mots séparées par des virgules.

Exemple :

Colonne A :

baba,bibi,bobo
bibi,bebe
bibi,baba,bubu,boba

Le nombre de mots peux varier d'une ligne à l'autre

Je voudrais dans une colonne B à côté afficher 1 qd la colonne A contient bobo
2 qd la colonne A contient bebe
3qd la colonne A contient boba

Je suis débutant sur VBA , merci pour votre aide.
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. Salut Steph,
    si tu sélectionnes ta colonne B, ton test sera sous la forme :

    With ActiveCell
    If .Offset(0, -1) Like "*bebe*" Then .Value = 1
    If .Offset(0, -1) Like "*bobo*" Then .Value = 2
    If .Offset(0, -1) Like "*boba*" Then .Value = 3
    End With

    Il n'y a plus qu'à rajouter une boucle pour traiter l'ensemble de tes données.

    A suivre...
    1. dsl je suis vraiment débutant en vba
      donc mettre une boucle ca donnerait ca ?

      Dim i As Integer
      For i = 65000 To 1 Step -1
      Cells(i, 7).Select
      With ActiveCell
      If .Offset(0, -1) Like "bebe" Then .Value = 1
      If .Offset(0, -1) Like "bobo" Then .Value = 2
      If .Offset(0, -1) Like "baba" Then .Value = 3
      End With
      Next i

      mERCI
  2. Contributeur
    bonsoir,
    Sub Separe()
    Dim T, i As Integer, e As Integer
        For e = 1 To Range("A1").SpecialCells(xlCellTypeLastCell).Row
            T = Split(Cells(e, 1).Text, ",")
            For i = 0 To UBound(T)
                select case T(i)
                case "bebe" : Cells(e, 2).Value = 1 : exit For
                case "bobo" : Cells(e, 2).Value = 2: exit For
                case "baba : Cells(e, 2).Value = 3: exit For
                end select 
            Next i
            Erase T
        Next e
    End Sub


    A+
    1. Salut Steph,
      tout ce qui marche est une bonne solution !
      ta solution semble correcte, sauf qu'elle teste (sans doute inutilement) les 65000 lignes de la feuille.
      la solution de lermitte est plus intéressante, parce que vachement plus rigoureuse ; pour ma part j'y ai appris beaucoup.

      Autre proposition (simpliste) ci-dessous

      Sub Bob()
      Range("G1").Select
      While ActiveCell.Offset(0, -1).Value <> ""
      With ActiveCell
      If .Offset(0, -1) Like "*bebe*" Then .Value = 1
      If .Offset(0, -1) Like "*bobo*" Then .Value = 2
      If .Offset(0, -1) Like "*boba*" Then .Value = 3
      .Offset(1, 0).Activate
      End With
      Wend
      End Sub
      1. Contributeur
        Bonjour,
        Avec un Select case... dés que la condition à été trouvée quitte le select (sans tester les autres) donc plus rapide, mais pas tellement quand uniquement 3 tests, mais avec les IF il y a moyen de remédier à cela.
        Sub Bob() 
            Range("G1").Select 
            While ActiveCell.Offset(0, -1).Value <> "" 
                With ActiveCell 
                     If .Offset(0, -1) Like "*bebe*" Then
                           .Value = 1 
                     ElseIf .Offset(0, -1) Like "*bobo*" Then 
                           .Value = 2 
                     ElesIf .Offset(0, -1) Like "*boba*" Then 
                           .Value = 3 
                     end if
                     .Offset(1, 0).Activate 
                End With 
            Wend 
        End Sub

        Quand vous mettez du code... le sélectionner et clic sur le bouton Garder la mise en forme Ca met lesbalises <code> celui-ci étant alors plus facile a suivre.
        A+
      2. @lermite222Merci pour les explications.
        Où se trouve le bouton Garder la mise en forme, stp ? dans CCM ? dans VBE ?
        I.
      3. Contributeur
        @Ivan-hoeDans CCM..
        Dans la barre d'outils juste au dessus de la fenêtre d'édition du message (c'est le bouton qui est blanc)