Erreur création combobox

Bonjour,

Je vous sollicite parce-que je bloque sur une erreur sur ce fichier :

6outil-exemple.xlsm (250.49 Ko)

Je souhaite chaque cellule de ma colonne N3:N42 sur la feuille "C1" ouvre des listes déroulantes type combobox comme sur ce fichier (sur la colonne D) :

6estim-trvx.xlsm (51.91 Ko)

En gros l'idée c'est d'avoir une liste déroulante avec une saisie automatique à la façon du fichier d'estimation de travaux, mais en allant chercher les noms dans la colonne A de la feuille Consommables

J'ai recopié la macro, et adaptée à mon cas, mais j'ai une erreur sur cette ligne :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Si vous savez d'où ça vient ça m'aiderait !

Merci

Pierre

Bonjour Pierre, le code manipule un activeX présent sur la feuille mais invisible (il le fait apparaitre juste quand nécessaire)

Vous avez copier le code, mais par l'activeX qui allais avec !

Je vous montre la manip:

image image

Ensuite passez en mode création, sélectionnez l'activeX et renommez le "ComboBox1"

A+

Ok, mais je croyais que le but était justement que l'active X n'apparaisse que lorsque je suis sur la case en question (car il me faut un Active X par cellule)

Si je comprends bien, il faut que je crée des activeX manuellement sur chaque cellule ?

Je suis désolé, je suis hyper débutant sur les macros

J'ai trouvé ce qui me bloque :

choix = Range("conso").Value

J'ai ce code qui va chercher la liste qui sert dans la liste déroulante, sauf que dans le fichier sur lequel j'ai pris cette macro, la liste était sur la même feuille, or dans mon cas je dois aller chercher sur une autre feuilles : "Consommables"

Et je ne sais comment faire pour indiquer ça à la macro !

Re,

Si je comprends bien, il faut que je crée des activeX manuellement sur chaque cellule ?

Non, le code s'occupe de déplacer l'activeX sur chaque cellules concerné. Donc besoin que d'un seul.

Ensuite dans ton fichier je pensais que tu avais définit "conso" dans le gestionnaire de nom.

Où la liste doit être prise ? Si par exemple c'est la colonne A tu peux juste faire comme cela:

choix = Sheets("Consommables").Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value

A+

Re,

J'ai réussi à régler ce problème, j'ai bien nommé la liste dans le gestionnaire de noms, mais il fallait quand même préciser dans quelle feuille elle se trouvait

Par contre, j'essaye de créer une 2ème macro sur la même feuille, mais il n'accepte pas que je duplique le code en changeant les variables... (il y a un "nom ambigüe détecté")

9outil-exemple.xlsm (256.84 Ko)

Merci beaucoup pour tes réponses !

C'est normal, il ne peut y avoir qu'une macro "Worksheet_SelectionChange"

Cette macro se déclenche à chaque fois qu'une modif est faite sur ton onglet "C1".

D'où la condition "if" :

If Not Intersect(Target, Range("n3:n214")) Is Nothing And Target.Count = 1 Then

Qui permet n'afficher la liste déroulante que si la cellule sélectionnée est comprise dans l'intervalle n3:n214 et que le nombre de cellules sélectionnées est de 1

Donc, il te suffit de mettre à la suite ton nouveau code, de toute manière la cellule ne peux pas être a la fois dans n3:n214 et g3:g214

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("n3:n214")) Is Nothing And Target.Count = 1 Then
        choix = Worksheets("Consommables").Range("conso").Value
        With Me.ComboBox1
            .List = choix
            .Height = Target.Height + 4
            .Width = Target.Width
            .Top = Target.Top - 2
            .Left = Target.Left
            .Value = Target
            .Visible = True
            .Activate
        End With
    Else
        Me.ComboBox1.Visible = False
    End If

    If Not Intersect(Target, Range("g3:g214")) Is Nothing And Target.Count = 1 Then
        choix1 = Worksheets("Matériel").Range("mat").Value
        With Me.ComboBox1
            .List = choix1
            .Height = Target.Height + 4
            .Width = Target.Width
            .Top = Target.Top - 2
            .Left = Target.Left
            .Value = Target
            .Visible = True
            .Activate
        End With
    Else
        Me.ComboBox1.Visible = False
    End If
End Sub

Enfin, pas la peine de créer un combobox2, rien n'empêche de réutiliser toujours le même en changeant juste la liste déroulante comme tu as fais avec "mat"

A+

Top, merci beaucoup, ça marche comme sur des roulettes !

Juste, est ce possible que la liste qui s'ouvre soit plus large que la cellule ? j'ai des textes assez long qui ne peuvent pas s'afficher en entier (je n'ai pas envie que la cellule soit trop large elle même, juste sa liste déroulante)

c'est ma dernière question, promis !

encore un grand merci

Re, pas de soucis tkt, c'est le plaisir de rendre la pareille à ce forum qui m'aide tellement sur mes projets.

Tu va pouvoir régler la largeur en jouant avec ce paramètre et modifier la valeur (ici 100)

.Width = Target.Width + 100

La liste ne sera plus centrée du coup, il faudra également jouer sur ce paramètre pour la décaler à gauche:

.Left = Target.Left - 50

Du coup pour bien centrer la liste c'est pas sorcier, si tu élargis de 100 tu décales à gauche de 100/2 = 50 !

Super, merci beaucoup !

ça m'a bien aidé, le fichier est bien fonctionnel !

Bonne fin de journée

Rechercher des sujets similaires à "erreur creation combobox"