Recherchev avec VBA

Bonjour à tous et toutes,

J'ai un petit souci dans un usf (je débute avec VBA). J'ai créé un userform de consultation : si je sélectionne un de mes salariés je dois voir s'afficher ses infos (Nom, prénom,....). Ces informations sont stockées dans un onglet du classeur sous forme d'une (grosse) base.

Grosso modo, je cherche à obtenir la chose suivante : lorsque je sélectionne un salarié (format = NOM - Prénom - Matricule), je voudrais que mon usf se remplisse automatiquement avec les informations contenues dans la base pour ce salarié.

Depuis ce matin, je fais, je défais et je ne trouve pas de solution. Au début, j'ai essayé avec des codes trouvés sur des forums mais mon niveau de maitrise de VBA ne me permet pas de les comprendre et de les adapter à mon fichier.

Du coup, Je pensais faire comme avec un onglet Excel normal, c'est-à-dire une recherchev() en cherchant la valeur sélectionnée dans la combobox "ListeSal", dans ma base de données (BDDINIT), dans la colonne concernée pour chaque information.

J'ai essayé la chose suivante, mais ça ne fonctionne pas du tout ! (Je demande pardon à ceux à qui ce semblant de formule piquerait les yeux)

Function Vlookup()

EtiquNOM = WorksheetFunction.Vlookup("ListeSal", BDDINIT.Range("A3:zz2000"), 5, 0)

End Function

Je remercie d'avance toute personne susceptible de me venir en aide (et de m'éviter de sombrer dans la folie !).

A bientôt !

Bonjour Mamine,

Pour ce que tu souhaites, il te faut trouver la ligne correspondante dans ta BdD

Ne la connaissant pas, je ne sais pas si tu as un champ contenant une valeur unique (matricule)

Ensuite, pour chaque contrôles de ton UsF, il faut inscrire les renseignements de la ligne

J'espère que cela pourra t'aider

A+

Bonsoir BrunoM45 et merci pour ta réponse. J'ai effectivement une valeur unique (matricule) present dans l'usf et dans la BDD pour me permettre la recherche. Le matricule est en colonne A.

Par contre ma formule est-elle correcte ? Car je pense que c'est ca qui me bloque (ou peut etre la facon de l'integrer dans l'usf).

Merci de ton aide !

Bonjour,

Je me permets d'insister car je n'y arrive toujours pas (ça me rend chèvre !).

Je cherche à transcrire la chose suivante :

Dans .etiquNOM (Label), je veux voir apparaitre le résultat de la formule suivante : recherchev(Matricule;BASERECHERCHE;5;faux)

J'ai essayé avec la fonction suivante, je n'ai pas de message d'erreur mais pour autant, je n'ai pas de résultat qui s'affiche !

Function vlookup()

.EtiquNOM.Caption = vlookup(Matricule, BASERECHERCHE, 5, False)

End Function

Matricule = valeur unique présente dans la base et dans l'usf

BASERECHERCHE = plage de cellules pour la recherche

5 = colonne dans laquelle je recherche

Merci d'avance !

Bonjour

Pour augmenter tes chances d'avoir une réponse

Bonjour et merci de ton attention,

Je tourne tellement en boucle sur cette recherche qui ne fonctionne pas que j'en oublie les règles élémentaires !

Ci-joint le lien cjoint de mon fichier (avec de fausses informations)

Merci de votre aide !

Bonjour,

Voici déjà un code à placer dans l'USF BdDLG10 qui va remplir la combobox "ListeBig" des noms qui se trouvent en colonne C de la feuille BASE DONNEES

Private Sub UserForm_Initialize()
'Macro Dan pour Mamine - 13/08/13
Dim i As Integer
With BDDINIT
    For i = 3 To .Range("C" & Rows.Count).End(xlUp).Row
        ListeBig.AddItem .Range("C" & i)
    Next
End With
End Sub

Amicalement

Edit Dan

Pour remplir l'USF des infos, voici un début de code à coller dans l'USF

Private Sub ListeBig_Change()
'Macro Dan pour Mamine - 13/08/13
Dim lg As Integer
With BDDINIT
    lg = .Range("C3:C" & .Range("C" & Rows.Count).End(xlUp).Row).Find(ListeBig.Value, LookIn:=xlValues).Row

    EtiquNOM = .Range("G" & lg)
    EtiquPRENOM = .Range("H" & lg)
    EtiquPOSTE = .Range("J" & lg)
    'endroit pour ajouter les autres lignes de code en fonction des rubriques nommées dans l'USF
End With
End Sub

Amicalement

Bonjour

Bonjour Dan

Ma contribution

Je vous dis un immense (mais vraiment immense) merci, ça fonctionne parfaitement et j'ai réussi à comprendre ce que vous avez fait (donc top si je dois le reproduire !).

Malgré toute votre aide, j'ai quand même deux questions complémentaires :

Je voudrais dupliquer l'usf pour chaque service de la société et donc bloquer la liste des salariés consultables et modifiables via usf en fonction de la liste définie par manager.

Par exemple, pour les appros, la liste des salariés du service s'appelle "APPROS" et est stockée dans un onglet "Listes" du classeur ; elle contient les salariés consultables et modifiables par le manager des appros.

Est-il possible de déterminer quels salariés doivent apparaitre ?

Seconde question, Je voudrais faire l'inverse de la manipulation que je vous ai demandé. J'ai un second usf qui permet au manager de modifier les informations du salarié ; lorsqu'il modifie puis clique sur sauvegarder, je voudrais que les informations se déversent dans un autre onglet "Base alimentée" (BASALIM) qui contient également la valeur unique (matricule) et qui a exactement le même format que la base initiale que je vous ai transmise. J'ai essayé avec le code suivant, mais ça ne fonctionne pas. Je pense qu'il manque quelque chose qui permettrait à la macro de se lancer ?

With Sheets("BASALIM")

If Me.ListeSAL.ListIndex = -1 Then Exit Sub

Ligne = Me.ListeSAL.ListIndex + 3

.Range("L" & Ligne).Value = Me.ComboDIP

.Range("N" & Ligne).Value = Me.ComboLIBELLE

.Range("O" & Ligne).Value = Me.ComboDOMAINE

.Range("P" & Ligne).Value = Me.TxtFORPRO

.Range("W" & Ligne).Value = Me.ComboLANG1

.Range("X" & Ligne).Value = Me.ComboNIVO1

.Range("Y" & Ligne).Value = Me.ComboLANG2

.Range("Z" & Ligne).Value = Me.ComboNIVO2

.Range("Q" & Ligne).Value = Me.ComboNIVEX1

.Range("R" & Ligne).Value = Me.TxtPOSTE1

.Range("S" & Ligne).Value = Me.ComboNIVEX2

.Range("T" & Ligne).Value = Me.TxtPOSTE2

.Range("U" & Ligne).Value = Me.ComboNIVEX3

.Range("V" & Ligne).Value = Me.TxtPOSTE3

.Range("AB" & Ligne).Value = Me.TxtWMS

.Range("AC" & Ligne).Value = Me.TxtGEST

.Range("AD" & Ligne).Value = Me.TxtSPEC

.Range("AE" & Ligne).Value = Me.TxtBDD

.Range("AH" & Ligne).Value = Me.TxtCOMP1

.Range("AI" & Ligne).Value = Me.TxtCOMP2

.Range("AJ" & Ligne).Value = Me.TxtCOMP3

.Range("AK" & Ligne).Value = Me.TxtINFO1

.Range("AL" & Ligne).Value = Me.TxtINFO2

.Range("AM" & Ligne).Value = Me.TxtINFO3

.Range("AF" & Ligne).Value = Me.ComboMGMT

.Range("AG" & Ligne).Value = Me.TxtQUALITE

End If

End Sub

Encore merci pour votre aide !

Re,

Le mieux serait de voir le fichier....

Est-il possible de déterminer quels salariés doivent apparaitre ?

Il suffirait de prendre la liste des salariés depuis la feuille ou d'ajouter par exemple un x dans une colonne adjacente qui indiquerait que c'est modifiable. La combo de l'USF ne ferait appraitre que les salariés ayant un x.

Seconde question :

Je suppose que ListeSAL est une combobox alimentée depuis la feuille BASALIM et que ligne réprésente bien la ligne où le nom du salarié ?

Génial, merci pour ta réponse Dan !

J'ai fini par m'en sortir.

Et encore un grand merci à tous !

Rechercher des sujets similaires à "recherchev vba"