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. 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)
    2. 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