Problème VBA liste déroulante abréviation

Bonjour à tous,

J'ai créer une liste déroulante avec "Au petit matin", "Matin", "Après-midi", "Soir" et "Nuit".

Je souhaiterais que, dans les plages indiquées ci-dessous, les abréviations apparaissent au lieu des mots complets.

J'ai trouvé ce code. Mais il a l'air de fonctionner aléatoirement.

Le débogage me renvoi sur la ligne For Each ActiveCell.

J'ai changé les point-virgule en virgule et ça bogue.

C'est surtout quand j'apporte une modification à la liste déroulante

Je ne m'y connais pas du tout en langage VBA,

J'ai besoin de votre aide, svp, merci d'avance.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim ActiveCell As Range

For Each ActiveCell In Range("U4:V4;AP4:AQ4;BK4:BL4;CF4:CG4;DA4:DB4;DV4:DW4;EQ4:ER4;FL4:FM4;GG4:GH4;HB4:HC4;HW4:HX4;IR4:IS4")

If ActiveCell = "Au petit matin" Then ActiveCell = "PM"

If ActiveCell = "Matin" Then ActiveCell = "M"

If ActiveCell = "Après-midi" Then ActiveCell = "AM"

If ActiveCell = "Soir" Then ActiveCell = "S"

If ActiveCell = "Nuit" Then ActiveCell = "N"

Next

End Sub

Bonjour,

ActiveCell est une syntaxe déjà utilisée par VBA, donc il faut éviter d'utiliser une variable qui s'appelle ainsi.

Aussi, ta macro se déclenche automatiquement à chaque changement sur la feuille en question, et à chaque fois tu lui fais parcourir une plage de cellule. Il faudrait mieux contrôler que la cellule modifiée (Target) appartient à la plage : "U4:V4;AP4:AQ4;BK4:BL4;CF4:CG4;DA4:DB4;DV4:DW4;EQ4:ER4;FL4:FM4;GG4:GH4;HB4:HC4;HW4:HX4;IR4:IS4"

Auquel cas on remplace le texte par l'abréviation correspondante.

Merci de joindre un fichier pour que j'illustre tout ça !

Merci pour ton retour,

Ci-joint le fichier

Il est protégé sans mot de passe

Les cellules fluos sont modifiables

Ça a l'air de bien marcher en séparant les groupes de cellules et en formant 12 plages au lieu d'une.

Mais, le code s'est allongé par copier coller.

Si tu as une proposition plus simple, elle est la bienvenue.

Bonjour Rundle,

En complément des remarques de Pedro22, je te conseille d'utiliser plutôt une "Plage nommée". Quelque comme:

"Ma_Plage" au lieu de :

"U4:V4;AP4:AQ4;BK4:BL4;CF4:CG4;DA4:DB4;DV4:DW4;EQ4:ER4;FL4:FM4;GG4:GH4;HB4:HC4;HW4:HX4;IR4:IS4"

L'utilisation des "Plages nommées" et expliquée (par exemple) ici : https://support.office.com/fr-fr/article/d%C3%A9finir-et-utiliser-des-noms-dans-les-formules-4d0f13ac-53b7-422e-afd2-abd7ff379c64

Merci du rappel,

J'utilise déjà les noms mais je n'y avais pas du tout pensé en VBA

Voilà ton fichier modifié :

Ta plage est maintenant nommée "MaPlage" ( @GVIALLES) et le code VBA est le suivant :

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("MaPlage")) Is Nothing Then
    If Target = "Au petit matin" Then Target = "PM"
    If Target = "Matin" Then Target = "M"
    If Target = "Après-midi" Then Target = "AM"
    If Target = "Soir" Then Target = "S"
    If Target = "Nuit" Then Target = "N"
End If

End Sub

Autre possibilité :

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("MaPlage")) Is Nothing Then
    Select Case Target
        Case "Au petit matin"
            Target = "PM"
        Case "Matin"
            Target = "M"
        Case "Après-midi"
            Target = "AM"
        Case "Soir"
            Target = "S"
        Case "Nuit"
            Target = "N"
    End Select
End If

End Sub

Impeccable, ça fonctionne !

Merci à vous deux Pedro22 et GVIALLES pour votre contribution.

À bientôt

Rechercher des sujets similaires à "probleme vba liste deroulante abreviation"