VBA _ Ajout d'une ComboBox avec Auto-complétion
Bonjour,
Je souhaiterais adapter une auto-complétion trouvée ici : https://forum.excel-pratique.com/excel/auto-completion-liste-deroulante-62166
Mais je ne comprends pas un élément :
Dans l'explorateur d'objet, feuille "liste d'élèves", je vois (Général), Worksheet, et ComboBox1.
Comment ajoute-t'on "ComboBox1" lors de la création d'un fichier ?
J'espère que la question est bien posée, je suis novice en VBA et il me manque probablement des notions (objets-méthodes)
Bonjour,
Comment ajoute-t'on "ComboBox1" lors de la création d'un fichier ?
Je suppose que vous parlez des combobox ajoutées en colonne E dans le fichier ?
Si oui, vous devez allez dans le menu Developpeur --> icone Inserer
- Choisir Controle activeX --> zone de Liste déroulante
- Une fois la combo ajoutée, faites un double click dessus pour créer le code
Maintenant si vous devez faire cela à chaque ligne, cela va devenir compliqué notamment en cas d'ajout. Il faudrait comprendre ce que vous voulez faire pour mieux vous orienter
Cordialement
En fait, je cherche à comprendre le passage du fichier "liste-eleves-test.xlsx" au fichier "liste-eleves-test-1.xlsm" :
Il y a l'ajout de la macro, mais si je fais un copier-coller, ça ne fonctionne pas.
Dans le fichier "liste-eleves-test-1.xlsm", sur la feuille "liste d'élèves", je vois l'objet (?) "ComboBox1" que je ne sais pas ajouter (voir capture d'écran).
Merci pour votre aide !
Dans le fichier "liste-eleves-test-1.xlsm", sur la feuille "liste d'élèves", je vois l'objet (?) "ComboBox1" que je ne sais pas ajouter (voir capture d'écran).
Vous voulez l'ajoutez où ? Je ne comprends pas ce que vous voulez faire
je cherche à comprendre le passage du fichier "liste-eleves-test.xlsx" au fichier "liste-eleves-test-1.xlsm
Simplement que le fichier xlsx ne contient pas de macro. Ce fichier a été renommé en XLSM suite à l'ajout des macros que vous voyez.
Lorsque vous placez des macros dans un fichier XLSX vous devez le renommer avec l'extension XLSM. Sans quoi les macros ne seront pas actives ou conservées
...renommer avec l'extension XLSM... jusque là, ça va
...le fichier xlsx ne contient pas de macro... ça aussi j'avais saisi...
...Vous voulez l'ajoutez où ? ==> voir les captures d'écran
* Dans l'explorateur d'objets VBA, sur le fichier "liste-eleves-test-1.xlsm", feuille "liste d'élèves", je vois l'objet "ComboBox1" entre "(Général)" et "Worksheet".
* Dans l'explorateur d'objets VBA, sur le fichier "liste-eleves-test.xlsx", feuille "liste d'élèves", je NE vois PAS l'objet "ComboBox1" mais seulement "(Général)" et "Worksheet".
Je souhaite comprendre comment "ComboBox1" est arrivé là ?
* Dans l'explorateur d'objets VBA, sur le fichier "liste-eleves-test-1.xlsm", feuille "liste d'élèves", je vois l'objet "ComboBox1" entre "(Général)" et "Worksheet".
* Dans l'explorateur d'objets VBA, sur le fichier "liste-eleves-test.xlsx", feuille "liste d'élèves", je NE vois PAS l'objet "ComboBox1" mais seulement "(Général)" et "Worksheet".
Je pense que vous n'avez pas compris mon message...
Fichier xlsx il n'y a pas de macro puisque c'est un fichier XLSX et de plus il n'y a pas de combobox dans la feuille
Fichier xlsm il y a une macro qui a créée sur base de la combobox qui est sur la feuille en colonne E
Je souhaite comprendre comment "ComboBox1" est arrivé là ?
je vous l'ai expliqué ici --> https://forum.excel-pratique.com/s/goto/1147915. Faites ce que j'ai expliqué vous allez comprendre
Bonjour,
Tout d'abord, merci pour votre aide.
Ci-joint le fichier "Planning1.xlsx" ou je souhaite avoir l'autocomplétion des colonnes "Conducteur" et Véhicule" dans la feuille "Planning" :
Pour la colonne "Conducteur", les données sont dans la feuille "Conducteurs", colonne "Réf_Conducteur".
Pour la colonne "Véhicule", les données sont dans la feuille "Véhicules", colonne "Réf_Véhicule".
J'ai bien une liste de choix en utilisant la validation des données, mais je n'arrive pas à avoir l'autocomplétion en adaptant le code du fichier "liste-eleves-test-1.xlsm".
==>Voir le fichier "Planning1.xlsm" avec une erreur "Type défini par l'utilisateur non défini" lorsqu'on clique sur une cellule de la feuille "Planning"
Je bloque ici.
Re,
==>Voir le fichier "Planning1.xlsm" avec une erreur "Type défini par l'utilisateur non défini" lorsqu'on clique sur une cellule de la feuille "Planning"
Mais vos erreurs sont normales puisque dans le fichier Planning1.xlsm, vous n'avez pas de combobox
Si je regarde votre titre pourquoi vouloir ajouter un objet combo alors que vous avez une liste de validation qui fonctionne bien dans chaque cellule ?
Sinon je vous ai expliqué comment ajouter la combobox ici --> https://forum.excel-pratique.com/s/goto/1147915
Dites moi
OK, mon titre n'est pas le bon, je clôture donc ce sujet et je repose la question du dernier post avec un autre titre : "auto-complétion"
Nul besoin de dupliquer le fil pour une raison de titre sans quoi on se perd dans ce qui a été fait
Restez sur celui ci.
Il suffit de changer le titre
Arrivez-vous à ajouter la combo ou pas ? Sinon je vous réexplique tout
Désolé, je poste très rarement sur les forums, je ne sais même pas comment changer le titre.
"Arrivez-vous à ajouter la combo ou pas ?"
On oublie cette question, mon but est d'avoir l'autocomplétion comme décrit dans le post précédent.
je ne sais même pas comment changer le titre.
Je l'ai changé parce que vous ne pouvez pas le faire vu que vous n'avez pas posté suffisamment sur ce forum. Sinon, il suffit de reprendre votre premier post du fil, et cliquer sur le petit crayon à droite dans le menu. Cela vous permet d'éditer.
mon but est d'avoir l'autocomplétion comme décrit dans le post précédent.
Si vous voulez afficher la liste en cliquant dans le cellule, il vous faut la combobox (comme cela se passe avec le fichier xlsm que vous avez posté), sinon lorsque vous cliquez sur la cellule, vous avez une flèche sur le droite de la cellule qui vous permet de choisir dans la liste de validation déroulante.
Dites moi
Merci pour le changement de titre et pour le temps que vous passez sur ma problématique.
Je cherchais à adapter le code fournit par Jacques Boisgontier pour mon fichier car je n'imagine pas qu'il ait créé les combobox une par une dans chaque cellule du fichier.
Cependant, il me manque des éléments de compréhension et M. Boisgontier avait une telle maitrise que je crains que peu de personnes soient capable de reprendre et d'adapter ce qu'il nous a offert.
Je vous propose donc de laisser le sujet ouvert si d'autres personnes ont des idées, ou de le clôturer si vous estimez qu'on a fait le tour de la question.
Je vous propose donc de laisser le sujet ouvert si d'autres personnes ont des idées, ou de le clôturer si vous estimez qu'on a fait le tour de la question.
Ben pourquoi. La solution je l'ai mais vous ne semblez pas vouloir faire ce que je vous écrit.
Soit vous préférez y aller pas à pas avec ce que je vous écrit ou alors je peux vous balancer le fichier avec la solution.
Mais vu votre question de demande de compréhension, je pense pas que ce soit la bonne idée si vous voulez comprendre
Dites moi
Je pense avoir progressé grâce à vous et je vous remercie pour votre patience, car effectivement je n'arrivais pas a appliquer ce que vous m'expliquiez mais le problème venait de moi.
Il me reste quelques éléments à comprendre quand il fera jour, mais j'ai le principal sur le fichier joint.
Je passe donc en résolu en vous remerciant.
Au passage, rien a voir avec la question, mais à chaque fois que je me connecte(identification), je clique sur "forum" et je dois me reconnecter (re-identification). Je ne sais pas si c'est un bug ou si c'est une mauvaise manip.
Je pense avoir progressé grâce à vous et je vous remercie pour votre patience, car effectivement je n'arrivais pas a appliquer ce que vous m'expliquiez mais le problème venait de moi.
pas de souci vous avez compris c'est le principal. Par contre en regardant votre fichier, vous pouvez améliorer comme ceci :
1. Remplacez tous les "b" dans les codes par "a". Vu que vous utilisez la combo dans la colonne B ou C, vous n'avez pas besoin de deux variables différentes
2. Supprimez Dim(b) au dessus des codes
3. Si vous devez toujours remplir la colonne A, vous pouvez modifier ces deux lignes dans le code Private Sub Worksheet_SelectionChange
If Not Intersect(Range("B3:B" & Range("A" & Rows.Count).End(xlUp).Row), Target) Is Nothing And Target.Count = 1 Thenet plus bas
If Not Intersect(Range("C3:C" & Range("A" & Rows.Count).End(xlUp).Row), Target) Is Nothing And Target.Count = 1 ThenCes modifications apportent les avantages suivants :
- On commence sur la ligne 3, cela vous évite de reprendre les titres de la ligne 2 dans les choix de la combo
- si vous n'avez pas la colonne A complétée vous n'aurez pas de combo disponible en colonne B ou C
- Pas de limitation à la ligne 50 (B50 et C50 dans le IF) comme dans votre fichier
Au passage, rien a voir avec la question, mais à chaque fois que je me connecte(identification), je clique sur "forum" et je dois me reconnecter (re-identification). Je ne sais pas si c'est un bug ou si c'est une mauvaise manip.
Oui c'est normal, vous devez d'abord cliquer sur le forum puis sur "se connecter". Le cas échéant vous êtes sur le site excel pratique (https://www.excel-pratique.com/) et vous avez accès uniquement à votre compte (bouton en haut à droite) et non au forum. Les deux sont séparés.
Dans votre URL, vous devez avoir ceci --> https://forum.excel-pratique.com/
Cordialement
Bonjour,
Merci pour ce complément.
Une question subsidiaire, pour afficher dans la combobox une liste filtrée suivant les actions sur les données de base (dans feuille véhicules ou conducteurs) :
Doit-on ajouter un élément de code dans "a = Application.Transpose(Sheets("Conducteurs").Range [FILTRE] ("Conduc").Value)" ou peut-on faire une liste filtrée dans le gestionnaire de noms (=[FILTRE] Véhicules!$C$2:$C$50) ?
Bonjour
Lorsque vous parlez de liste filtrée vous pouvez donner un exemple ? Là je vois que vos listes sont filtrées.
A moins que vous vouliez les faire par le code ? Si oui, cela doit être fait sur base la colonne A ou autre ?
Aussi autre chose que je viens de voir dans le gestionnaire de noms, adapter vos noms comme ceci :
Conduc --> =DECALER(Conducteurs!$A$2;;3;NBVAL(Conducteurs!$A:$A)-1)
Vhl --> =DECALER(Véhicules!$A$2;;2;NBVAL(Véhicules!$A:$A)-1)
Du coup votre combo ne contiendra que les données nécessaires
Pour faire simple, je souhaiterais que ce qui apparait dans la combobox soit ce que je vois dans la feuille "Conducteurs" (ou dans la feuille "Véhicules") lorsque j'applique un filtre sur les colonnes de ces feuilles.
Le filtre peut être en colonne A ou dans la colonne des données (D ou C suivant la feuille).
Conduc =DECALER(... dans le gestionnaire de noms m'apporte une partie de la solution.
J'ai pensé à remplacer NBVAL(... par SOUS.TOTAL(3;... mais ça ne fonctionne car j'ai l'affichage dans la liste correspond aux n premiers noms, qu'ils soient cochés ou non dans mon filtre.
je ne sais pas si je suis clair dans mon explication, dites moi.
Pour faire simple, je souhaiterais que ce qui apparait dans la combobox soit ce que je vois dans la feuille "Conducteurs" (ou dans la feuille "Véhicules") lorsque j'applique un filtre sur les colonnes de ces feuilles.
Je pense que ce n'est pas trop pratique cela, mais si vous voulez comme cela, allez dans la feuille planning et modifiez les codes comme ceci:
1. Variables. En dessous de Dim(a), rajoutez ceci
Dim f As Worksheet
Dim col As Byte2. Dans le code Private Sub Worksheet_SelectionChange... remplacez les deux lignes
a = Application.Transpose(Sheets("Conducteurs")....par ceci :
Set f = Sheets("Conducteurs")
col = 4
Call Filtreet
a = Application.Transpose(Sheets("Conducteurs")....par ceci
Set f = Sheets("Véhicules")
col = 3
Call Filtre3. Ajoutez le code Filtre ci-dessous en dessous de tous vos codes
Private Sub Filtre()
Dim i As Integer, j As Integer, dlg As Integer
dlg = f.Range("A" & Rows.Count).End(xlUp).Row
j = 1
For i = 2 To dlg
If f.Rows(i).Hidden = False Then
ReDim Preserve a(1 To j)
a(j) = f.Cells(i, col).Value
j = j + 1
End If
Next i
End SubFaites un test
Crdlt