Ecriture semi automatique d'un élément d'une liste

Leon 47

XLDnaute Nouveau
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

Leon 47
 

Jocelyn

XLDnaute Barbatruc
Re : Ecriture semi automatique d'un élément d'une liste

Bonjour le Forum,
Bonjour Leon 47,

un test que j'avais effectué pour un autre XLDnaute

Dans cet exemple il y a 2 types de liste une qui donne tous les noms commençacnt par la ou les lettre tapées

et une qui donne tous les noms venant aprés la ou les lettres tapées

Regarde et dis nous

Jocelyn
 

Pièces jointes

  • debuter la liste sur un nom précis.zip
    2.4 KB · Affichages: 292
  • debuter la liste sur un nom précis.zip
    2.4 KB · Affichages: 290
  • debuter la liste sur un nom précis.zip
    2.4 KB · Affichages: 291
C

Compte Supprimé 979

Guest
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

Espérant que cela pourra te convenir ;)
 

Pièces jointes

  • Leon47_InsertionNom suivant début.zip
    16.2 KB · Affichages: 246

Leon 47

XLDnaute Nouveau
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

Leon 47
 
C

Compte Supprimé 979

Guest
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")

On recherche la valeur
Code:
    LigFind = .Find(What:=Quoi, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row

Test si le début du nom trouvé correspond bien à la valeur cherchée Récupère le début du nom cherché d'une longeur = au mot de reccherche
Code:
im DebNom As String
    DebNom = UCase(Left(Sheets("BdDNoms").Range("A" & LigFind), Len(Quoi)))
Met le Flag OK à vrai si cela correspond
Code:
FlgOk = DebNom = UCase(Quoi)
  End With
  On Error GoTo 0

Voilà, j'espère que mes explications seront assez claires ;)
 

Leon 47

XLDnaute Nouveau
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

Léon 47
 
C

Compte Supprimé 979

Guest
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
1=A, 2=B, 3=C, etc ...

Voilà, tiens moi au courant ;)
 

Pièces jointes

  • Leon47_UserForm1.zip
    1.1 KB · Affichages: 91

Leon 47

XLDnaute Nouveau
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 ?

Merci

Leon 47
 

Leon 47

XLDnaute Nouveau
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

Merci

Leon 47
 

Pièces jointes

  • Copie d'écran.zip
    10.8 KB · Affichages: 69
C

Compte Supprimé 979

Guest
Re : Ecriture semi automatique d'un élément d'une liste

Oups désolé,

Je pense que tu utilises une "Zone combinée" de ta boîte à Outils "Formulaires", si c'est ça, tu ne peux rien faire ... :(

Par contre tu peux mettre un "ComboBox" de la Boîte à Outils Contrôles, et là tu fais ce que tu veux :)

A+
 

Leon 47

XLDnaute Nouveau
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

Suis je assez explicite ?

en tous cas merci pour ton aide

Leon 47
 
C

Compte Supprimé 979

Guest
Re : Ecriture semi automatique d'un élément d'une liste

Voilà un fichier avec 2 exemples de ce que tu peux faire !

Le 1er combobox fait référence à une plage de cellule : Feuill!A2:A16

LE 2ème Combobox fait référence à un nom défini : AutreListe

Voilà, A+
 

Pièces jointes

  • Leon47_ComboBox.xls
    27.5 KB · Affichages: 148

Leon 47

XLDnaute Nouveau
Re : Ecriture semi automatique d'un élément d'une liste

Quand je créé un ComboBox dans la Feuil1
la formule suivante apparait : =INCORPORER("Forms.ComboBox.1";"")

Où je rentre Feuil2!A2:A12 pour que ma liste rentrée de A2 à A12 apparaisse
quand je clique sur le petit triangle noir de la ComboBox

Dans ton exemple si je fais un clique droit sur la comboBox il n'y a rien qui apparait dans la formule

A+

Leon 47
 

Discussions similaires

Statistiques des forums

Discussions
312 232
Messages
2 086 462
Membres
103 222
dernier inscrit
2BS