Condition dans VBA

STEPH -  
lermite222 Messages postés 9042 Statut Contributeur -
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. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  2. Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   310
     
    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
    1. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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+
      0
      1. Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   310 > lermite222 Messages postés 9042 Statut Contributeur
         
        Merci pour les explications.
        Où se trouve le bouton Garder la mise en forme, stp ? dans CCM ? dans VBE ?
        I.
        0
      2. lermite222 Messages postés 9042 Statut Contributeur 1 199 > Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention  
         
        Dans CCM..
        Dans la barre d'outils juste au dessus de la fenêtre d'édition du message (c'est le bouton qui est blanc)
        0
  3. Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   310
     
    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...
    0
    1. steph
       
      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
      0