Condition dans VBA

STEPH -  
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   - 16 mai 2008 à 11:06
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.

3 réponses

lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
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
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
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
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
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
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309 > lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention  
 
Merci pour les explications.
Où se trouve le bouton Garder la mise en forme, stp ? dans CCM ? dans VBE ?
I.
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191 > 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
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
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
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