Condition dans VBA

Fermé
STEPH - 15 mai 2008 à 18:22
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 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 dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 mai 2008 à 22:37
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 dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
16 mai 2008 à 10:16
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 dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
16 mai 2008 à 10:56
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 dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309 > lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
16 mai 2008 à 11:04
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 dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008
16 mai 2008 à 11:06
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 dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
15 mai 2008 à 19:13
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
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