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,
    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)
  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,
      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