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 !
 

Pièces jointes

  • Aide forum.xlsm
    20.2 KB · Affichages: 7

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
 

Discussions similaires

Réponses
11
Affichages
836
Réponses
7
Affichages
485