Utiliser des variables définis dans userform sur vlookup

Bonjour,

j'ai un problème vba, suis débutant en programmation:

Public nbrofficer As Long

Public numerotelephone As String

Public initial As String

Public listeofficer As Range

Sub generateur()

Application.Workbooks("fax_gen.xls").Worksheets("officer").Activate

'ici je selection le nombre d'employer listé sur la feuille officer de mon doc excell

nbrofficer = Application.Workbooks("fax_gen.xls").Worksheets("officer").Range("A2", Range("A2").End(xlDown)).Count

i = 1

For i = 1 To nbrofficer

UserForm1.combobox_officer.AddItem Cells(i + 1, 1)

Next

' ici je peuple ma combo box avec les initials des employés sur mon userform de la colonne A

UserForm1.Show

' à ce niveau j'a rempli ma combo box avec les initial des employés

' ci dessous ce trouve le sub de mon user form ou il y a un bouton de commande ok ainsi que ma combo box

Public Sub bouton_OK_Click()

initial = UserForm1.combobox_officer.Value

UserForm1.Hide

End Sub

' je suppose que en fonction de ce que j'ai choisi dans ma combo box, ma variable initial va prendre la valeur de la chaine de caractere de la combobox

' ensuite je reviens sur ma procédure sub generateur je veux utilisé la valeur de la variable initial enfin de déterminer le numéro de téléphone de l'employé qui se trouve dans la collone 2 - l'erreur ressorti est run time error '5'

'invalid procedure call or argument (c'est callé sur la ligne de code listeofficer....

listeofficer = Application.Workbooks("fax_gen.xls").Worksheets("officer").Range("A2", Range("B2").End(xlDown))

numerotelephone = Application.WorksheetFunction.VLookup(initial, listeofficer, 2, False).Value

msgbox numerotelephone

JE CRAQUUUUEEE HELLLLPPP PLLLLLSSSS

MERCI

Bonjour

Avant de craquer, joins ton fichier

oui dsl, merci banzai64

je voudrais voir aparaitre le numero correspondant apparaitre

45fax-genn.zip (26.51 Ko)

Bonjour

A voir

merci beaucouppp maitre

mais je ne comprend pas ce qu'est "me."

peux tu m'expliquer ce que cela represente?

et pourquoi met tu une .row à la fin de Ws.Range("A" & Rows.Count).End(xlUp).Row ?

et encore une fois parce que je suis vrmt naze lol

peux tu m'expliqué le raisonement de cette fonction:

Set Ws = Sheets("officer")

With Me.initialofficer

.Clear

.ColumnCount = 2

.ColumnWidths = "-1;0"

For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row

.AddItem Ws.Range("A" & J)

.List(.ListCount - 1, 1) = J

Next J

End With

Bonjour

Quelques explications

Meremplace l'objet que tu manipules, dans ce cas c'est Userform1

Ws.Range("A" & Rows.Count).End(xlUp).Row 

Row indique la ligne, et ce code retourne la dernière cellule non vide de la colonne A

Set Ws = Sheets("officer")
With Me.initialofficer
.Clear
.ColumnCount = 2
.ColumnWidths = "-1;0"
For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("A" & J)
.List(.ListCount - 1, 1) = J
Next J
End With

Grosso modo

On affecte à la variable WS la feuille (c'est plus facile à manipuler que de marquer chaque fois Sheets("officer") )

Ensuite on initialise la ComboBox (initialofficer) avec nombre de colonnes et largeur des colonnes

Puis on remplit cette ComboBox (comme tu faisais dans ta macro)

Particularité: Je note dans une colonne (cachée car largeur = 0) de la ComboBox le numéro de ligne de la valeur que je viens d'ajouter

Pour trouver des renseignements sur la signification de tel ou tel code

Tu places ton curseur sur le mot et tu appuies sur F1

merci

Bonjour Banzai64,

en fait je rencontre un autre problème, ton code me permet d'afficher la donnée de la colonne B en fonction de mon choix de la colonne A.

J'ai compris la logique d'ajouter un colonne "d'indexation" invisible des items dans la combo box pour ensuite s'en servir dans le module1 (très futé).

Mais je ne comprend pas comment fonctionne la ligne

 me.combobox_counterparty.column(1)

malgré l'aide Excel - comment cette ligne peux retourner une valeur long correspondant a la ligne choisi? ca ne devrait pas plutot etre row(j)?

.List(.ListCount - 1, 1) = j

à quoi ca sert puisse que tu a déjà mis les items dans la combo box?

je suis naze....

Merci beaucoup en tout cas

Bonjour

Explication:

C'est dans ce sens que cela fonctionne

1er)

.List(.ListCount - 1, 1) = j

Une fois que j'ai rajouté l'item dans la ComboBox, dans la colonne cachée j'y note la ligne (Row)

2ème)

 me.combobox_counterparty.column(1)

Je récupère dans la colonne 1, la valeur que j'avais "cachée" , elle correspond à la ligne (Row) où se trouve l'item et cette valeur est transmise à la variable

1) ok j'ai compris mais comment savoir que c'est la collonne 1 qu'on doit remplir?

on défini que la list fait 2 colonne mais de -1 à 0 donc la collone 1 ne devrait pas exister

2)du coup (en règle générale) une fois que la combobox est rempli, l'objet combobox prend la valeur en surbrillance??

je comprend que dalle

Private Sub UserForm_Initialize() ('défini la valeur de la combobox- comment la remplir)

Dim j As Long ('J correspond à un nombre)

With Me.combobox_officer ('on va définir les propriétés et appliquer des méthodes à la combobox)

.Clear (on vide la combobox au cas ou il y aurait déjà des valeurs)

.ColumnCount = 2 (on dit que dans la combobox il va y avoir 2 colonne de données)

.ColumnWidths = "-1;0" (on dit que la première colonne sera -1 (donc invisible) et on dit que la seconde colonne sera "0")

For j = 2 To Sheets("officer").Range("A" & Rows.Count).End(xlUp).Row (on dit que j commence par 2 et va jusqu'à la ligne correspondant à la celllule la plus au dessus en partant de la cellule la plus en bas de la colonne A -> déjà là je comprend pas puisque row retourne un plage et non un nombre

.AddItem Sheets("officer").Range("A" & j)

.List(.ListCount - 1, 1) = j (on dit que sur l'item qu'on vient d'ajouter, la colonne 1 = j (indexation des lignes)) comment sait-on que c'est 1 et pas 0 ou -1 la colonne puisque la largeur à été défini de -1 à 0?

Next j

End With

End Sub

Public Sub bouton_OK_Click()

Dim initial As Long

If Me.combobox_officer.ListIndex = -1 Then (ca veut dire que si l'index n'a pas été choisi alors msgbox)

MsgBox "choisir les initiales de créateur du fax"

Exit Sub

End If

initial = Me.combobox_officer.Column(1) (est ce qu'on aurait pas pu mettre juste column(0) ou je sais pas trop quoi pour avoir l'initial de l'officer en tant que string?)( si je comprend bien au moment ou on fait notre choix dans la liste box quand on fait tourner la macro, la macro combobox prend la valeur selectionner?) et la fonction colomn permet en fait de retourner la valeur contenue dans la colonne 1 et correspondant à l'item selectionné

End Sub

compliqué tout ca....

Bonjour

C'est presque ça

.ColumnWidths = "-1;0" (on dit que la première colonne sera -1 (donc invisible) et on dit que la seconde colonne sera "0")

.ColumnWidths = "-1;0" (on dit que la première colonne aura une largeur standard (-1) la 2ème colonne aura une largeur de 0)

For j = 2 To Sheets("officer").Range("A" & Rows.Count).End(xlUp).Row (on dit que j commence par 2 et va jusqu'à la ligne correspondant à la celllule la plus au dessus en partant de la cellule la plus en bas de la colonne A -> déjà là je comprend pas puisque row retourne un plage et non un nombre

For j = 2 To Sheets("officer").Range("A" & Rows.Count).End(xlUp).Row (on dit que j commence par 2 et va jusqu'à la dernière ligne non vide de la colonne A (en fait on se place sur la dernière cellule de la colonne et on remonte pour trouver une cellule non vide))

If Me.combobox_officer.ListIndex = -1 Then(ca veut dire que si l'index n'a pas été choisi alors msgbox)

If Me.combobox_officer.ListIndex = -1 Then (ça veut dire que l'information contenue dans la ComboBox ne fait partie des possibilités)

initial = Me.combobox_officer.Column(1) (est ce qu'on aurait pas pu mettre juste column(0) ou je sais pas trop quoi pour avoir l'initial de l'officer en tant que string?)( si je comprend bien au moment ou on fait notre choix dans la liste box quand on fait tourner la macro, la macro combobox prend la valeur selectionner?) et la fonction colomn permet en fait de retourner la valeur contenue dans la colonne 1 et correspondant à l'item selectionné

initial = Me.combobox_officer.Column(1) (En mettant column(0) on aurait retourné juste ce qui y avait d'inscrit dans la ComboBox, mais tu as besoin de savoir le numéro de la ligne (pour récupérer le numéro de téléphone) c'est pour cela que l'on retourne la valeur qui est stockée dans la 2ème colonne)

Petit info

Modifies le code suivant

[barrer].ColumnWidths = "-1;0"[/barrer]
.ColumnWidths = "-1;-1"

ben en fait je peux comprendre le truc de column même si je trouve ca bizarre mais comment mon noueau fichier qui est le meme ne me retourne pas pas ma valeur?

je craaaquueee, c'est misére pour faire utiliser une variable ,défini dans un userform, dans un module ...

36fax-genn.zip (26.69 Ko)

Bonjour

Tu n'as pas essayé avec "-1;-1" tu as essayé avec "-1;1"

    .ColumnWidths = "-1;-1"

Sinon dans tes macros Sub gener() et Private Sub truc_Click() tu supprimes la déclaration de la variable initial : Dim initial As Long

Dans le module1 avant ta macro Sub gener() tu rajoutes

Public initial As Long

j'ai enfin compris lol

c'est la propriété columnwidth que j'avais pas saisi, je pensais que ca allait de -1 à 0, alors que en fait c'est premiere collone = -1 (largeur non spécifié) et la seconde 0 (invisible)

merci pour votre patience, super prof. j'ai juste envie de vous payer pour me former . MERCIII

Rechercher des sujets similaires à "utiliser variables definis userform vlookup"