Recherche via userform

Le
BV
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, 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ê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 bon=
nes
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #19813111
Bonjour BV,

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



"BV"
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
BV
Le #19813701
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"
Bonjour BV,

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

"BV"
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


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

http://cjoint.com/?hxn3p4nnks



"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"
Bonjour BV,

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

"BV"
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


BV
Le #19814171
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"
Voici le même fichier mais coder différemment...
de cette façon, c'est peut être plus facile !

http://cjoint.com/?hxn3p4nnks

"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"
> Bonjour BV,

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

> "BV" >
> 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


MichDenis
Le #19814311
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
'---------------------------------
BV
Le #19814491
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"
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
'---------------------------------


MichDenis
Le #19814801
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"
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"
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
'---------------------------------


BV
Le #19814991
ok je comprends mieux maintenant
merci encore pour ton aide

VB

On 23 juil, 15:27, "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 colo nne

"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"
> 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
> '---------------------------------  


Publicité
Poster une réponse
Anonyme