J’ai beaucoup cherche sur internet et ai un peu avance mais la je bloque.
J’utilise excel 2010.
Je suis ultra novice VBA, donc je c’utilise que des trucs que je trouve sur le net, je suis desole.
Donc j’ai une colonne de cases dans laquelle je veux une liste deroulante.
J’ai ultilise combobox-VBA, car cela donne beaucoup plus de souplesse (notamment en matiere de taille de caractere) que la function donnees validation-liste.
J’ai trouve sur le net un VBA tres abouti qui me faitapparaitre la liste deroulante quand je clique sur la cellule. J’ai egalement integer le fait que je veux que cette liste soit choisie dans la meme ligne que la cellule (function Application.Transpose(Range("c2:f100").Value)).
Cf exemple ci joint plus concret
Maintenant j’aimerai que a chaque ligne, la liste deroulante choisie (independamment des autres lignes) soit celle de la ligne ou on travaille:
Ex:en A3, je voudrai la liste nom1 prenom3 ddn3 fu3 et ainsi de suite en a4, a5…
Auriez vous une solution simple plutot que de repeater 250 fois le VBA pour chque cellule de cette premiere colonne? SVP
Merci de votre aide, patience et de votre indulgence pour mon inexperience VBA.
Tres cordialement
xls ci Joint
et
code:
Code:
Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([A2:A100], Target) Is Nothing And Target.Count = 1 Then
Me.ComboBox1.List = Sheets("bd").Application.Transpose(Range("c2:f2").Value)
Me.ComboBox1.Height = Target.Height + 3
Me.ComboBox1.Width = Target.Width
Me.ComboBox1.Top = Target.Top
Me.ComboBox1.Left = Target.Left
Me.ComboBox1 = Target
Me.ComboBox1.Visible = True
Me.ComboBox1.Activate
'If Val(Application.Version) > 10 Then SendKeys "{esc}"
'Me.ComboBox1.DropDown
Else
Me.ComboBox1.Visible = False
End If
End Sub
OK,
genial
cela marche du tonnerre, MAIS dans le fichier original.
Maintennat, j'essaie de creer ce module de classe dans un autre fichier,
mais c'est un Echec:
je vais dans mon nouveau fichier
j'ouvre le VBA
je selectionne mon worksheet dans la colonne VBA Projects
je colle le code
en adaptant aux cellules que je veux
je modifie egalement le nom de la feuil utilisee
et la il me souligne en jaune la premiere ligne (qui est exactement la meme que dans le fichier qui marche)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
et puis il surligne egalement
.ComboBox1
sur la ligne 3
Avec le message d'erreur
Compile erroe
Method or data member not found
voici le fichier simplifie sans donnees confidentielles
pour ta question, je ne sais pas du tout. en fait je pensais que Combobox etait une commande de code VBA, et que cela fonctionnait partout...mais je me sens tres incompetent pour cela en fait...
merci!!
Oui, tout-à-fait. Mais auparavant, il faut insérer un ComboBox depuis la barre d'outils Contrôles ActiveX du menu Développeur...Insérer (voir copie d'écran en PJ). Un double-clic sur le contrôle dans la feuille de calcul ouvrira le Private Sub ComboBox1_Change() dans lequel tu n'auras plus qu'à ajouter la ligne ActiveCell = ComboBox1.
OKI,
Great, many thanks!!!
...
aurais je le droit a une question subsidiaire?? allez, je me Lance:
disons que, au lieu de appliquer cette combobox a toutes les cellules c1:c148
je lappliquer que aux lignes ou la colonne d contient un element
(ou inversement, ne pas avoir de liste deroulante dans les lignes ou la colonne d est vide)
marche pas:
en fait je pense que c'est parceque jai modifie la place des colonnes:
j'ai bien Change [c1:c148] en [J1:J148]
mais le critere "case vide ou pas" est dans une autre colonne (deplacee): la colonne c
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect([j1:j148], Target) Is Nothing Then Exit Sub
If Not Target.Offset(0, -7) = "" And Target.Count = 1 Then
Me.ComboBox1.List = Sheets("dataset vertic2").Application.Transpose(Range("c" & Target.Row & ":i" & Target.Row).Value)
Me.ComboBox1.Font.Size = 25
Me.ComboBox1.Height = Target.Height + 3
Me.ComboBox1.Width = Target.Width
Me.ComboBox1.Top = Target.Top
Me.ComboBox1.Left = Target.Left
Me.ComboBox1 = Target
Me.ComboBox1.Visible = True
Me.ComboBox1.Activate
Else
Me.ComboBox1.Visible = False
End If
End Sub
Merci beaucoup.
Cela va sauver beaucoup de temps.
Et aidera a mieux comprendre comment mieux traiter les enfants malades du Coeur!
bravo pour votre Expertise et votre Dispo exceptionnelle.