Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Ecriture semi automatique d'un élément d'une liste
Bonjour
Je dois écrire dans une cellule le nom et le prénom d'une personne qui fait partie d'une liste d'environ une centaine de personnes.
Pour que cela soit plus rapide; puis je bénéficer de l' écriture semi automatique?
c-à-d quand j'écris les premières lettres d'un nom, Excel propose un nom qui réponde à ces premières lettres, ce nom faisant partie de la liste.
Cela éviterai d'ouvrir la liste, de chercher le nom dans la liste, de cliquer dessus pour l'inscrire dans la cellule
Est ce possible ?
Si oui par quel moyen ?
Merci pour votre aide
Re : Ecriture semi automatique d'un élément d'une liste
Bonjour Leon47,
Bonjour Jocelyn,
Léon tu trouveras ci joint un fichier avec :
1) une BdDNoms
2) une petite macro VBA
Après saisie du début de nom,
1) si il correspond à un seul nom => insertion directe du nom complet
2) si il correspond à plusieurs possibilités => USF pour choisir lequel tu veux
Re : Ecriture semi automatique d'un élément d'une liste
Bonjour Jocelyn
Bonjour BrunoM45
Merci de m'avoir répondu si rapidement
J'ai essayé la solution de BrunoM45 elle répond en grande partie à ma demande. par contre j'aimerai comprende la construction.
On rempli une feuille appelée "BdDNoms" on y rempli la liste des noms de la façon suivante :
dans une cellule le "nom" et dans la cellule à côté le "prénom_le nom"
avec la fonction : ="Prénom_"&A2
ensuite je n'ai pas trouvé la macro pour la cellule dans la feuille 1 où se marque le résultat
apparemment c'est toutes les cellules de la colonne A qui répondent
(Est-ce le code de la feuille1 ?)
Pour mon travail j'ai besoin que d'une cellule qui répond à cette macro les cellules adjacentes sont occupées à autres choses.
Si ce n'est pas trop demandé peux m'expliquer la Macro et sa mise en place
Merci d'avance
Re : Ecriture semi automatique d'un élément d'une liste
Bonsoir Leon,
Ne fait pas attention à la formule dans la feuille "BddNoms", c'était simplement pour mettre quelque chose en face des noms.
Le code qui permet de compléter les noms, est bien celui dans la Feuil1.
Une petite explication, s'impose effectivement. Module1 existe pour déclarer la variable Cel comme étant publique
Ce qui permet d'utiliser la variable dans la Sub de Feuil1, mais aussi, dans le code de UserForm1
Sinon le code de WorkSheet_Change s'exécute à chaque modification apportée dans une cellule de la feuille 1 (n'importe qu'elle cellule)
C'est pour cela que sur la première ligne :
Code:
If Target.Column <> 1 Or Target.Value = "" Or Target.Count > 1 Then Exit Sub
Je teste :
1) si la colonne de saisie est bien la n° 1 (Target.Column) si elle est différente je n'éxécute pas le code (Ext Sub)
2) si la valeur saisie n'est pas vide (effacement de valeur)
3) si le nombre de cellule renvoyée pour modification n'est pas > 1
Code:
UserForm1.ChoixNom.Clear
Je remets la liste de Choix des noms du USF1 à zéro
Code:
Do
Lig = LigFind(VSearch)
Je lance la boucle de recherche du mot saisi, ce qui utilise la fonction LigFind
Code:
If Lig > 0 And FlgOk = True Then
MemLig = Lig
UserForm1.ChoixNom.AddItem Sheets("BdDNoms").Cells(Lig, 1) & " " & Sheets("BdDNoms").Cells(Lig, 2)
NbNom = NbNom + 1
Si la ligne à été trouvée la valeur de Lig>0
FlgOK pour controler que le mot tapé correspond bien au début du nom trouvé
Continue la boucle ... Sauf si valeur de Lig (ligne trouvée) =0 -> alors on sort de la boucle "Do ... Loop"
Code:
ElseIf Lig = 0 Then
Exit Do
End If
Si le nombre de nom trouvé est >1 alors on affiche le USF1
Code:
If NbNom > 1 Then
Cel = Target.AddressLocal
UserForm1.ChoixNom.Value = UserForm1.ChoixNom.List(0)
UserForm1.Show
Sinon on inscrit directement le nom trouvé dans la cellule
Code:
ElseIf NbNom = 1 Then
Application.EnableEvents = False
Target.Value = Sheets("BdDNoms").Cells(MemLig, 1) & " " & Sheets("BdDNoms").Cells(MemLig, 2)
Application.EnableEvents = True
End If
La fonction LigFind(ValeurRecherchée) :
Pour la plage de cellule dans la colonne A, allant de LigneTrouvée + 1 à la fin
Code:
Function LigFind(Quoi As String)
On Error Resume Next
With Sheets("BdDNoms").Range("A" & Lig + 1 & ":A65536")
Re : Ecriture semi automatique d'un élément d'une liste
Bonjouir BrunoM45
Merci d'avoir pris le temps de m'expliquer ta macro mais mes compétences ne me permettent pas de tout comprendre
afin de pouvoir utiliser ta macro je me suis permis de la copier dans mon document mais cela ne fonctionne pas.
J'ai procédé de la façon suivante :
j'ai fait un copier-coller de ta macro dans la feuil1 de mon document
(boutondroit de la souris sur l'onglet Feuill1_visualiser le code_coller ta macro.
Sur la feuil2 que j'ai renommer "BdDNoms" j'ai remplis une liste de noms et Prénoms.
Quand je veux exécuter la macro dans la cellule réservée aux Noms et Prénoms dans mon document
je rentre les deux premières lettres d'un nom qui figure dans la liste "BdDNoms"
je fais "entrée"
Cela ne fonctionne pas et j'ai un message :
"Erreur de compilation Variable non définie"
Peux tu m'éclairer ? si cela ne te dérange pas trop
Merci d'avance
Re : Ecriture semi automatique d'un élément d'une liste
Bonsoir Leon47,
1) Il ne faut pas oublier de déclarer la variable publique dans un Module
Code:
Option Explicit
' Définition OBLIGATOIRE de la variable PUBLIC
Public Cel As String
2) Il te faut également le USF (fichier joint)
Tu décompresses l'archives, dans l'éditeur VBA, tu vas dans le Menu -> Fichier -> Importer un Fichier
Tu sélectionnes : UserForm1.frm et tu fais ouvrir
3) Si la saisie du début du nom se fait bien dans la colonne A = pas de problème
Sinon il faut adapter la 1ère ligne du code
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If [COLOR=blue][B]Target.Column <> 1[/B][/COLOR] Or Target.Value = "" Or Target.Count > 1 Then Exit Sub
Re : Ecriture semi automatique d'un élément d'une liste
Bonjour BrunoM45
ça marche, grand merci pour tes explications et ta patience.
Je profite aussi pour remercier Jocelyn et Jyll pour leurs propositions
J'ai toujours trouvé sur ce forum gentilesse et performance.
Encore merci à tous.
J'aurai un dernier renseignement à demander :
Comment faire varier (taille et couleur) la police qui s'inscrit dans la cellule d'une liste déroulant ? J'ai beau faire ces variations dans la liste de référence cela n'a aucun effet sur la police qui apparait dans la cellule de la liste déroulante.
As tu une idée ?
Re : Ecriture semi automatique d'un élément d'une liste
Salut Leon47,
Il faut que tu ailles sur le UserForm, dans les propriétés de la liste déroulante (ComboBox), tu as la possibilité de changer le style, la taille et la couleur de la police.
Re : Ecriture semi automatique d'un élément d'une liste
BrunoM45
Merci pour ta réponse rapide.
ma demande n'a rien à voir avec les posts précédents.
Je souhaiterai faire varier la police dans une liste déroulante
voir copie d'écran
Re : Ecriture semi automatique d'un élément d'une liste
BrunoM45
J'ai créé une combobox mais comment je peux avoir la liste que j'ai rentré dans une autre feuille, quand je clique sur le petit triangle noir.
Comme dans une liste déroulante.
qu'est ce que je rentre dans la formule pour voir listé les textes que j'ai renter dans l'autre feuille
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.