XL 2019 Boucle For VBA / Remplissage auto

James Dean

XLDnaute Nouveau
Bonjour, j’aimerai remplir des cellules en fonction d’autres cellules
Mes données se trouvent dans la colonne E (et commence ligne ligne 3)
Pour l'instant rien ne s'affiche dans la cellule adjacente malheureusement.

Voici ce que j’ai codé, merci d'avance !

VB:
For j = 3 To Range("E100") Step 1
    Select Case Cells(j, 5)
        Case « Nounours » ou « doudou »
            Cells(j, 6) = « Peluche »
        Case « Action-Man » ou « Barbie »
            Cells(j, 6) = « Jouet »
    End Select
Next j
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, James Dean, sylvanu, jmfmarques


Fonctionne chez moi
VB:
Sub test_OK()
Dim j&
For j = 3 To Cells(Rows.Count, "E").End(3).Row
    Select Case UCase(Cells(j, 5))
        Case Is = "NOUNOURS", "DOUDOU"
            Cells(j, 6) = "Peluche"
        Case Is = "ACTION-MAN", "BARBIE"
            Cells(j, 6) = "Jouet"
        Case Else
        '
    End Select
Next j
End Sub
 

James Dean

XLDnaute Nouveau
Merci à tous pour vos réponses et plus particulièrement à staple1600 car il répondait mieux à ma demande qui était peu précise je vous l'accorde.

J'aimerai donc la reformuler plus clairement pour m'aider au mieux dans mon module.

Suite à un paquet de données que je reçois, j'aimerai qu'un tri "automatique" s'opère avec le VBA.
Cependant les données sont un peu en bazar. Par exemple il n'y a pas de continuité dans les lignes donc pour créer une boucle c'est un poil compliqué (enfin à mon niveau).
J'aimerai que les données en colonne E soit classé en catégorie dans la colonne adjacente F.
La réponse de Staple1600 est sûrement superbe pour l’énoncé de base mais je n'arrive pas à la transposer correctement.

Voici le bout de code qui pose problème:
VB:
For j = 3 To Cells(Rows.Count, "E").End(3).Row
    Select Case (Cells(j, 5))
        Case Left(Cells(j, 5), 14) = " CB MC DONALD'S"
            Cells(j, 6) = "Fast Food"
        Case Left(Cells(j, 5), 14) = " CB  MGP*Pumpkin"
            Cells(j, 6) = "Pumpkin"
        Case Else
    End Select
Next j
Je joins un fichier exemple avec le code VBA entier.

Merci pour votre temps !
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
Re

Déjà à la base si on reprend mon exemple tu aurais du écrire
VB:
For j = 3 To Cells(Rows.Count, "E").End(3).Row
    Select Case  Left(Cells(j, 5), 14)
        Case Is = " CB MC DONALD'S"
            Cells(j, 6) = "Fast Food"
        Case Is = " CB  MGP*Pumpkin"
            Cells(j, 6) = "Pumpkin"
        Case Else
    End Select
Next j
PS: Je parle juste de la syntaxe (je n'ai pas ouvert la PJ)
 

Staple1600

XLDnaute Barbatruc
Re

J'ai juste parlé de syntaxe
(et j'ai précisé que je n'avais pas testé)
Il n'y a pas mille façons d'écrire un Select Case
La preuve avec ce petit test (qui fonctionne, non ?)
;)
VB:
Sub Tests()
Dim Chaine, i&
Chaines = Array(" CB MC DONALD'S", "CB MGP*Pumpkin")
For i = 0 To 1
Select Case Left(Trim(Chaines(i)), 14)
        Case Is = "CB MC DONALD'S"
            MsgBox "Fast Food"
        Case Is = "CB MGP*Pumpkin"
            MsgBox "Pumpkin"
        Case Else
    End Select
    Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Donc si ta syntaxe de Select Case est bonne si le contenu de ta colonne E correspond strictement à ton critère Left(Cells(j, 5), 14), cela doit fonctionner
Or déjà dans ton exemple, ca ne matche pas
(d'ou le Trim ajouté dans mon code)
Exemple du problème que j'évoque
VB:
Sub Tests_2()
Chaine = " CB  MGP*Pumpkin"
MsgBox Len(Trim(Chaine)) = Len(Left(Chaine, 14))
ChaineOk = Replace(Chaine, Chr(32), "")
MsgBox ChaineOk = "CBMGP*Pumpkin"
End Sub
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas