Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche via userform

8 réponses
Avatar
BV
Bonjour =E0 tout le forum

J'ai un formulaire qui me permet d'ajouter =E0 la mani=E8re d'access un
nouvel enregistrement dans ma feuille CANDIDAT. Pas de probl=E8me !
Ce que j'aimerai faire, c'est un formulaire de recherche avec une zone
de liste d=E9roulante (qui comporterait 4 colonnes mais la cellule
stock=E9e serait un ID alphanum). D=E8s lors que j'active le nom
recherch=E9, les autres contr=F4les r=E9cup=E8rent via une recherche ou une
une recherchev ou autre les donn=E9es, que je peux ou non modifier
directement.

J'ai r=E9ussi pour l'instant =E0 cr=E9er ma zone de liste d=E9roulante, mai=
s
je bloque sur la recherche
voila ce que j'ai pour l'instant :
' Initialisation de la liste deroulante (sachant que les en-t=EAtes ne
s'affichent pas)
Private Sub UserForm_Initialize()
Dim tbl As Variant
With Sheets("CANDIDAT")
Set plage =3D .Range("A1:D1000")
tbl =3D plage
End With
With Me.CMB_RechercheCandidat
.ColumnCount =3D 4
.ColumnWidths =3D "30 pt;80 pt;80 pt;80 pt"
.List =3D tbl
End With
End Sub

j'aimerai =E0 pr=E9sent que les contr=F4les suivants r=E9cup=E8rent les bon=
nes
donn=E9es en fonction de l'ID s=E9lectionn=E9 auparavant (ordre de mon
tableau) :
Me.ID
Me.titre
Me.Nom
Me.prenom

et surtout que je puisse les modifier directement depuis le formulaire
(bouton de validation qui modifie la bonne ligne)

Merci d'avance pour votre aide
BV

8 réponses

Avatar
MichDenis
Bonjour BV,

Un petit exemple à adapter : http://cjoint.com/?hxmkNm2rMD



"BV" a écrit dans le message de groupe de discussion :

Bonjour à tout le forum

J'ai un formulaire qui me permet d'ajouter à la manière d'access un
nouvel enregistrement dans ma feuille CANDIDAT. Pas de problème !
Ce que j'aimerai faire, c'est un formulaire de recherche avec une zone
de liste déroulante (qui comporterait 4 colonnes mais la cellule
stockée serait un ID alphanum). Dès lors que j'active le nom
recherché, les autres contrôles récupèrent via une recherche ou une
une recherchev ou autre les données, que je peux ou non modifier
directement.

J'ai réussi pour l'instant à créer ma zone de liste déroulante, mais
je bloque sur la recherche
voila ce que j'ai pour l'instant :
' Initialisation de la liste deroulante (sachant que les en-têtes ne
s'affichent pas)
Private Sub UserForm_Initialize()
Dim tbl As Variant
With Sheets("CANDIDAT")
Set plage = .Range("A1:D1000")
tbl = plage
End With
With Me.CMB_RechercheCandidat
.ColumnCount = 4
.ColumnWidths = "30 pt;80 pt;80 pt;80 pt"
.List = tbl
End With
End Sub

j'aimerai à présent que les contrôles suivants récupèrent les bonnes
données en fonction de l'ID sélectionné auparavant (ordre de mon
tableau) :
Me.ID
Me.titre
Me.Nom
Me.prenom

et surtout que je puisse les modifier directement depuis le formulaire
(bouton de validation qui modifie la bonne ligne)

Merci d'avance pour votre aide
BV
Avatar
BV
C'est exactement ce que je recherche ! merci
en fait j'avais réussi à le faire par une zone de liste dans la
feuille excel

par contre en reprenant le formulaire de l'exemple, je ne parvient pas
à
à le positionner sur la bonne cellule pour modifier les valeurs à
partir du formulaire
Je vais essayer en essayant de récupérer un numéro de ligne






On 23 juil, 12:11, "MichDenis" wrote:
Bonjour BV,

Un petit exemple à adapter :http://cjoint.com/?hxmkNm2rMD

"BV" a écrit dans le message de groupe de discussio n :

Bonjour à tout le forum

J'ai un formulaire qui me permet d'ajouter à la manière d'access un
nouvel enregistrement dans ma feuille CANDIDAT. Pas de problème !
Ce que j'aimerai faire, c'est un formulaire de recherche avec une zone
de liste déroulante (qui comporterait 4 colonnes mais la cellule
stockée serait un ID alphanum). Dès lors que j'active le nom
recherché, les autres contrôles récupèrent via une recherche ou u ne
une recherchev ou autre les données, que je peux ou non modifier
directement.

J'ai réussi pour l'instant à créer ma zone de liste déroulante, m ais
je bloque sur la recherche
voila ce que j'ai pour l'instant :
' Initialisation de la liste deroulante (sachant que les en-têtes ne
s'affichent pas)
Private Sub UserForm_Initialize()
Dim tbl As Variant
With Sheets("CANDIDAT")
Set plage = .Range("A1:D1000")
tbl = plage
End With
With Me.CMB_RechercheCandidat
.ColumnCount = 4
.ColumnWidths = "30 pt;80 pt;80 pt;80 pt"
.List = tbl
End With
End Sub

j'aimerai à présent que les contrôles suivants récupèrent les b onnes
données en fonction de l'ID sélectionné auparavant (ordre de mon
tableau) :
Me.ID
Me.titre
Me.Nom
Me.prenom

et surtout que je puisse les modifier directement depuis le formulaire
(bouton de validation qui modifie la bonne ligne)

Merci d'avance pour votre aide
BV


Avatar
MichDenis
Voici le même fichier mais coder différemment...
de cette façon, c'est peut être plus facile !

http://cjoint.com/?hxn3p4nnks



"BV" a écrit dans le message de groupe de discussion :

C'est exactement ce que je recherche ! merci
en fait j'avais réussi à le faire par une zone de liste dans la
feuille excel

par contre en reprenant le formulaire de l'exemple, je ne parvient pas
à
à le positionner sur la bonne cellule pour modifier les valeurs à
partir du formulaire
Je vais essayer en essayant de récupérer un numéro de ligne






On 23 juil, 12:11, "MichDenis" wrote:
Bonjour BV,

Un petit exemple à adapter :http://cjoint.com/?hxmkNm2rMD

"BV" a écrit dans le message de groupe de discussion :

Bonjour à tout le forum

J'ai un formulaire qui me permet d'ajouter à la manière d'access un
nouvel enregistrement dans ma feuille CANDIDAT. Pas de problème !
Ce que j'aimerai faire, c'est un formulaire de recherche avec une zone
de liste déroulante (qui comporterait 4 colonnes mais la cellule
stockée serait un ID alphanum). Dès lors que j'active le nom
recherché, les autres contrôles récupèrent via une recherche ou une
une recherchev ou autre les données, que je peux ou non modifier
directement.

J'ai réussi pour l'instant à créer ma zone de liste déroulante, mais
je bloque sur la recherche
voila ce que j'ai pour l'instant :
' Initialisation de la liste deroulante (sachant que les en-têtes ne
s'affichent pas)
Private Sub UserForm_Initialize()
Dim tbl As Variant
With Sheets("CANDIDAT")
Set plage = .Range("A1:D1000")
tbl = plage
End With
With Me.CMB_RechercheCandidat
.ColumnCount = 4
.ColumnWidths = "30 pt;80 pt;80 pt;80 pt"
.List = tbl
End With
End Sub

j'aimerai à présent que les contrôles suivants récupèrent les bonnes
données en fonction de l'ID sélectionné auparavant (ordre de mon
tableau) :
Me.ID
Me.titre
Me.Nom
Me.prenom

et surtout que je puisse les modifier directement depuis le formulaire
(bouton de validation qui modifie la bonne ligne)

Merci d'avance pour votre aide
BV


Avatar
BV
merci pour la réponse

Ooups! je ne voyais pas ça comme cela
là je dois avouer que je ne vois pas comment le positionner en auto
pour qu'il modifie chaque cellule modifiée
directement dans le tab

je pourrais éventuellement m'en sortir avec des fonctions Indirect,
adress, dans une feuille mais en vba :(





On 23 juil, 13:56, "MichDenis" wrote:
Voici le même fichier mais coder différemment...
de cette façon, c'est peut être plus facile !

http://cjoint.com/?hxn3p4nnks

"BV" a écrit dans le message de groupe de discussio n :

C'est exactement ce que je recherche ! merci
en fait j'avais réussi à le faire par une zone de liste dans la
feuille excel

par contre en reprenant le formulaire de l'exemple, je ne parvient pas
à
à le positionner sur la bonne cellule pour modifier les valeurs à
partir du formulaire
Je vais essayer en essayant de récupérer un numéro de ligne

On 23 juil, 12:11, "MichDenis" wrote:

> Bonjour BV,

> Un petit exemple à adapter :http://cjoint.com/?hxmkNm2rMD

> "BV" a écrit dans le message de groupe de discuss ion :
>
> Bonjour à tout le forum

> J'ai un formulaire qui me permet d'ajouter à la manière d'access un
> nouvel enregistrement dans ma feuille CANDIDAT. Pas de problème !
> Ce que j'aimerai faire, c'est un formulaire de recherche avec une zone
> de liste déroulante (qui comporterait 4 colonnes mais la cellule
> stockée serait un ID alphanum). Dès lors que j'active le nom
> recherché, les autres contrôles récupèrent via une recherche ou une
> une recherchev ou autre les données, que je peux ou non modifier
> directement.

> J'ai réussi pour l'instant à créer ma zone de liste déroulante, mais
> je bloque sur la recherche
> voila ce que j'ai pour l'instant :
> ' Initialisation de la liste deroulante (sachant que les en-têtes ne
> s'affichent pas)
> Private Sub UserForm_Initialize()
> Dim tbl As Variant
> With Sheets("CANDIDAT")
> Set plage = .Range("A1:D1000")
> tbl = plage
> End With
> With Me.CMB_RechercheCandidat
> .ColumnCount = 4
> .ColumnWidths = "30 pt;80 pt;80 pt;80 pt"
> .List = tbl
> End With
> End Sub

> j'aimerai à présent que les contrôles suivants récupèrent les bonnes
> données en fonction de l'ID sélectionné auparavant (ordre de mon
> tableau) :
> Me.ID
> Me.titre
> Me.Nom
> Me.prenom

> et surtout que je puisse les modifier directement depuis le formulaire
> (bouton de validation qui modifie la bonne ligne)

> Merci d'avance pour votre aide
> BV


Avatar
MichDenis
Modifie le code du formulaire comme ceci :
la procédure : CommandButton1_Click
valide les modifications que tu peux avoir
fait dans les textbox et retourne ces valeurs
directement dans les cellules de la feuille
où elles ont été extraites.


'Déclaration dans le haut du formulaire :
Dim Rg As Range, Ok As Integer
'---------------------------------
Private Sub ComboBox1_Change()
If Ok = 1 Then Exit Sub
With Me.ComboBox1
Me.TextBox2 = .Value
Me.TextBox3 = Rg(.ListIndex + 1, 2)
Me.TextBox4 = Rg(.ListIndex + 1, 3)
Me.TextBox5 = Rg(.ListIndex + 1, 4)
End With

End Sub
'---------------------------------
Private Sub CommandButton1_Click()
Ok = 1
With Me.ComboBox1
Rg(.ListIndex + 1, 1) = Me.TextBox2
Rg(.ListIndex + 1, 2) = Me.TextBox3
Rg(.ListIndex + 1, 3) = Me.TextBox4
Rg(.ListIndex + 1, 4) = Me.TextBox5
End With
Ok = 0
End Sub
'---------------------------------
Private Sub UserForm_Initialize()
Dim DerLig As Long
With Worksheets("Feuil1")
DerLig = .Range("A" & .Cells.Rows.Count).End(xlUp).Row
Set Rg = .Range("A2:D" & DerLig)
End With
With Me.ComboBox1
.ColumnCount = 4
.ColumnWidths = "55;55;55;55"
With Rg
Me.ComboBox1.RowSource = .Parent.Name & "!" & .Address
End With
End With

End Sub
'---------------------------------
Avatar
BV
Cela fonctionne très bien j'ai pu adapter à mon code.

Juste pour mon info perso, peux tu m'expliquer très rapidement la
syntaxe
rg(.listIndex +1,1) encore merci pour ton aide si précieuse

BV




On 23 juil, 14:40, "MichDenis" wrote:
Modifie le code du formulaire comme ceci :
la procédure : CommandButton1_Click
valide les modifications que tu peux avoir
fait dans les textbox et retourne ces valeurs
directement dans les cellules de la feuille
où elles ont été extraites.

'Déclaration dans le haut du formulaire :
Dim Rg As Range, Ok As Integer
'---------------------------------
Private Sub ComboBox1_Change()
If Ok = 1 Then Exit Sub
With Me.ComboBox1
    Me.TextBox2 = .Value
    Me.TextBox3 = Rg(.ListIndex + 1, 2)
    Me.TextBox4 = Rg(.ListIndex + 1, 3)
    Me.TextBox5 = Rg(.ListIndex + 1, 4)
End With

End Sub
'---------------------------------
Private Sub CommandButton1_Click()
Ok = 1
With Me.ComboBox1
    Rg(.ListIndex + 1, 1) = Me.TextBox2
    Rg(.ListIndex + 1, 2) = Me.TextBox3
    Rg(.ListIndex + 1, 3) = Me.TextBox4
    Rg(.ListIndex + 1, 4) = Me.TextBox5
End With
Ok = 0
End Sub
'---------------------------------
Private Sub UserForm_Initialize()
Dim DerLig As Long
With Worksheets("Feuil1")
    DerLig = .Range("A" & .Cells.Rows.Count).End(xlUp).Row
    Set Rg = .Range("A2:D" & DerLig)
End With
With Me.ComboBox1
    .ColumnCount = 4
    .ColumnWidths = "55;55;55;55"
    With Rg
        Me.ComboBox1.RowSource = .Parent.Name & "!" & .Address
    End With
End With

End Sub
'---------------------------------


Avatar
MichDenis
Rg est une variable objet de type "Range"

En fait, rg(.listIndex +1,1) est un raccourci où la propriété "Item"
a été omis volontairement. La syntaxe complète est :
rg.Item(.listIndex +1,1)

Pour imager le tout, c'est la même chose que :
range("A1:D10").Item(Numéro ligne, numéro colonne)
pour désigner une cellule particulière de la plage de cellules.

.Listindex fait référence à une propriété du combobox.
Le premier élément d'un combobox à un index de 0. Pour
une cellule, la première ligne est 1 c'est ce pourquoi il y
.listindex + 1
Le dernier 1 dans rg.Item(.listIndex +1,1) fait référence à la colonne


"BV" a écrit dans le message de groupe de discussion :

Cela fonctionne très bien j'ai pu adapter à mon code.

Juste pour mon info perso, peux tu m'expliquer très rapidement la
syntaxe
rg(.listIndex +1,1) encore merci pour ton aide si précieuse

BV




On 23 juil, 14:40, "MichDenis" wrote:
Modifie le code du formulaire comme ceci :
la procédure : CommandButton1_Click
valide les modifications que tu peux avoir
fait dans les textbox et retourne ces valeurs
directement dans les cellules de la feuille
où elles ont été extraites.

'Déclaration dans le haut du formulaire :
Dim Rg As Range, Ok As Integer
'---------------------------------
Private Sub ComboBox1_Change()
If Ok = 1 Then Exit Sub
With Me.ComboBox1
Me.TextBox2 = .Value
Me.TextBox3 = Rg(.ListIndex + 1, 2)
Me.TextBox4 = Rg(.ListIndex + 1, 3)
Me.TextBox5 = Rg(.ListIndex + 1, 4)
End With

End Sub
'---------------------------------
Private Sub CommandButton1_Click()
Ok = 1
With Me.ComboBox1
Rg(.ListIndex + 1, 1) = Me.TextBox2
Rg(.ListIndex + 1, 2) = Me.TextBox3
Rg(.ListIndex + 1, 3) = Me.TextBox4
Rg(.ListIndex + 1, 4) = Me.TextBox5
End With
Ok = 0
End Sub
'---------------------------------
Private Sub UserForm_Initialize()
Dim DerLig As Long
With Worksheets("Feuil1")
DerLig = .Range("A" & .Cells.Rows.Count).End(xlUp).Row
Set Rg = .Range("A2:D" & DerLig)
End With
With Me.ComboBox1
.ColumnCount = 4
.ColumnWidths = "55;55;55;55"
With Rg
Me.ComboBox1.RowSource = .Parent.Name & "!" & .Address
End With
End With

End Sub
'---------------------------------


Avatar
BV
ok je comprends mieux maintenant
merci encore pour ton aide

VB

On 23 juil, 15:27, "MichDenis" wrote:
Rg est une variable objet de type "Range"

En fait, rg(.listIndex +1,1) est un raccourci où la propriété "Item "
a été omis volontairement. La syntaxe complète est :
rg.Item(.listIndex +1,1)

Pour imager le tout, c'est la même chose que :
range("A1:D10").Item(Numéro ligne, numéro colonne)
pour désigner une cellule particulière de la plage de cellules.

.Listindex fait référence à une propriété du combobox.
Le premier élément d'un combobox à un index de 0. Pour
une cellule, la première ligne est 1 c'est ce pourquoi il y
 .listindex + 1
Le dernier 1 dans rg.Item(.listIndex +1,1) fait référence à la colo nne

"BV" a écrit dans le message de groupe de discussio n :

Cela fonctionne très bien j'ai pu adapter à mon code.

Juste pour mon info perso, peux tu m'expliquer très rapidement la
syntaxe
rg(.listIndex +1,1) encore merci pour ton aide si précieuse

BV

On 23 juil, 14:40, "MichDenis" wrote:

> Modifie le code du formulaire comme ceci :
> la procédure : CommandButton1_Click
> valide les modifications que tu peux avoir
> fait dans les textbox et retourne ces valeurs
> directement dans les cellules de la feuille
> où elles ont été extraites.

> 'Déclaration dans le haut du formulaire :
> Dim Rg As Range, Ok As Integer
> '---------------------------------
> Private Sub ComboBox1_Change()
> If Ok = 1 Then Exit Sub
> With Me.ComboBox1
>     Me.TextBox2 = .Value
>     Me.TextBox3 = Rg(.ListIndex + 1, 2)
>     Me.TextBox4 = Rg(.ListIndex + 1, 3)
>     Me.TextBox5 = Rg(.ListIndex + 1, 4)
> End With

> End Sub
> '---------------------------------
> Private Sub CommandButton1_Click()
> Ok = 1
> With Me.ComboBox1
>     Rg(.ListIndex + 1, 1) = Me.TextBox2
>     Rg(.ListIndex + 1, 2) = Me.TextBox3
>     Rg(.ListIndex + 1, 3) = Me.TextBox4
>     Rg(.ListIndex + 1, 4) = Me.TextBox5
> End With
> Ok = 0
> End Sub
> '---------------------------------
> Private Sub UserForm_Initialize()
> Dim DerLig As Long
> With Worksheets("Feuil1")
>     DerLig = .Range("A" & .Cells.Rows.Count).End(xlUp).Row
>     Set Rg = .Range("A2:D" & DerLig)
> End With
> With Me.ComboBox1
>     .ColumnCount = 4
>     .ColumnWidths = "55;55;55;55"
>     With Rg
>         Me.ComboBox1.RowSource = .Parent.Name & "!" & .Addres s
>     End With
> End With

> End Sub
> '---------------------------------