Afficher cellule tableau dans unserform

Bonjour a tous,

Aujourd'hui je suis bloqué sur quelque chose de différent. Je voudrais afficher les valeurs des cellules dans des textboxs d'un userform selon la ligne sélectionnée.

Pour être compréhensible je vous joins un fichier. Je souhaiterai juste l'affichage et non la modification

Dans le fichier la textbox1 correspond a la colonne A, txtbox2 <=> colB, etc...

Merci d'avance pour votre aide.

Cordialement,

Kitesurf.

Bonjour Kitesurf, bonjour le forum,

En pièce jointe ton fichier modifié. Choisit une ligne dans l'UserForm2 et valide avec le bouton Search (ou la touche [Entrée]. L'UserForm1 s'ouvre avec les données de la ligne choisie. Ferme avec le bouton EXIT (ou la touche [Échap.])

45kitesurf-v01.xlsm (18.32 Ko)

Bonjour Thau_theme,

Merci pour ta reponse si rapide. Il y a deux choses qui ne collent pas avec ce que je veux faire Mais quand je me relie tu as completement repondu a mon premier message et je t'en remercie.

- Tu boucles sur les textboxes et les colonnes mais je prefererai avoir à tout détailler. Oui c'est assez étrange mais mon userform qui enregistre ces lignes possede 250 textboxes correspondant a 250 colonnes (Oui c'est énorme et c'est une machine à gaz mais cela fonctionne) Et de plus la textbox 26 ne correspond par exemple pas a la colonne Z.

Si tu te demandes pourquoi j'ai fais ca comme ca c'est que certaines personnes ont voulu rajouter des choses etc etc donc je devais refaire la correspondance a chaque fois et au bout d'un moment...

- Pour la variable O qui correspond à la feuille 1, comment faire pour la faire passer en active.sheet ? Car je creer des onglets automatiques grâce a un autre module ce qui a pour effet de dupliquer le premier, c'est pourquoi je préfèrerai avoir la main sur l'onglet sur lequel je suis.

Merci encore Thau_theme

Kitesurf

Bonsoir Kitesurf, bonsoir le forum,

Pour définit O comme l'onglet actif il te suffit d'écrire : Set O = ActiveSheet à la place de Set O = Worksheets("Sheet1") !...

Bonjour Thau_theme,

Ok merci je vais faire ça ! Une petite idée pour l'assignation non auto entre textboxs et colonnes ?

Merci encore pour l'aide

Kitesurf

Re,

J'avoue que j'ai pas très bien compris tes explications...

Pour ma part, j'attribue à la propriété [Tag] des textboxes une valeur correspondant à la colonne où sa valeur doit être renvoyée. Par exemple, si la TextBox2 doit renvoyer sa valeur dans la colonne H, j'attribue, via la fenêtre des propriétés, la valeur H à la propriété [Tag] de la TextBox2. Ainsi de suite pour toute les textboxes et/ou les contrôles qui renvoient une valeur dans le tableau (pas les Label, Frame, etc.)

À la fin, sur le bouton de validation, j'utilise ce genre de code :

Private Sub CommandButton1_Click() 'clic sur le bouton "Valider"
Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
Dim PLV As Integer 'déclare la variable PLV (Première Ligne Vide)

PLV = Sheets("Feuil1").Cells(Application.Rows.Count, "A").End(xlUp).Row + 1 'définit la première ligne vide PLV de la colonne A d l'onglet "Feuil1"
For Each CTRL In Me.Controls 'boucle sur tous les contrôles CTRL de l'UserFom
    's la propriété [Tag] du contrôle n'est pas vide, renvoie dans la cellule ligne=PLV, colonne=propriété [Tag] du contrôle, la valeur du contrôle
    If CTRL.Tag <> "" Then Sheets("Feuil1").Cells(PLV, CTRL.Tag).Value = CTRL.Value
Next CTRL 'prochain contrôle de la boucle
Unload Me 'vide et ferme l'userform en cours
End Sub

Il me permet de renvoyer dans la ligne PLV de la première cellule vide de la colonne A, la valeur du contrôle (TextBox, Combobox, etc.) dans la colonne indiquée par sa propriété [Tag]. C'est super pratique car une boucle permet de renvoyer tous les contrôleS et, si ils ne se suivent pas, ça ne pose aucun problème.

Je ne sais pas si c'est très clair mais pour illustrer je t'envoie un petit fichier exemple :

Re-Bonjour thau_theme,

Ah oui d'accord je ne connaissais pas cette histoire de tag car moi pour l'assignation au colonnes j'ai :

Private Sub CommandButton1_Click() 'bouton Export

Dim DL As Long

DL = Ws.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1 'première ligne vide de la colonne A

Ws.Cells(DL, "A").Value = Me.DTPicker1.Value 'Colonne A à adapter et combobox,textbox 
Ws.Cells(DL, "B").Value = Me.TextBox1.Value 
Ws.Cells(DL, "C").Value = Me.TextBox2.Value 
Ws.Cells(DL, "D").Value = Me.TextBox136.Value 
Ws.Cells(DL, "E").Value = Me.TextBox168.Value
Ws.Cells(DL, "F").Value = Me.TextBox135.Value 

etc...

C'est pour cela que j'aurai voulu reprendre le même schéma pour l'affichage du coup je ne sais plus comment faire pour récupérer ^^

Kitesurf

Re,

Écoute, sans un fichier exemple je ne comprends rien à ce que tu dis... À toi de voir...

bonjour,

[totem] Bah, de toute façon le chargement/déchargement en boucle est relativement peu usité car il faut souvent en plus faire des conversions ou des mises en forme...

Une réponse basique en pièce jointe.

Le Userform2 n'est pas utilisé. Faut quand même pas exagérer : on clicque d'abord sur la bonne ligne et on envoie le bouton.

le UserForm détecte la ligne active et affiche les données.

J'ai utilisé des N° de colonnes, mais on peut indifféremment utiliser les lettres.

A+

26kitesurf-usf.xlsm (15.30 Ko)

Re-bonjour

Tout d'abord merci pour vos solutions ! Bon j'essaie depuis tout à l'heure d'imbriquer vos deux partie car la solution de galopin me donne la possibilité d'assigner txtbox et colonnes et celle de Thau_theme me permet d'avoir deux userform.

Cependant je n'arrive pas a faire quelque chose qui fonctionne :

Userform 1 (Qui demande la ligne) :

Private Sub CommandButton1_Click() 'bouton "Search"

Dim O As Worksheet 'déclare la variable O (Onglet)
Set O = ActiveSheet 'définit l'onglet O

If Me.TextBox1.Value = "" Then 'condition : si la Textbox1 est vide
    MsgBox "Indicate Line !" 'message

    Me.TextBox1.SetFocus 'place le curseur dans la Textbox1

    Exit Sub 'sort de la procédure
End If 'fin de la condition

TextBox1 = SearchRec.TextBox1.Value

Unload Me 'vide et ferme l'UserForm en cours

DATA_Display.Show 'affiche l'UserForm1

End Sub

Puis dans un module je "sauvegarde" ma ligne :

Public TextBox1 As String

Et enfin dans le deuxième userform j'inscris :

Option Explicit  'Activation de la déclaration explicite des variables
Dim Ws As Worksheet  'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm
Dim iRow
Private Sub DATA_Display_Initialize()
iRow = TextBox1
InitData
End Sub
Sub InitData()
Me.TextBox1 = Cells(iRow, 1)
Me.TextBox2 = Cells(iRow, 3)
Me.TextBox3 = Cells(iRow, 2)
Me.TextBox4 = Cells(iRow, 7)
Me.TextBox5 = Cells(iRow, 5)
Me.TextBox6 = Cells(iRow, 6)
Me.TextBox7 = Cells(iRow, 4)
End Sub

Et rien ne se passe, je suis conscient que je fais une erreur quelque part mais je ne vois pas ou

Kitesurf

Re,

En dehors du fait que j'ai utilisé une boucle, je ne vois aucune différence entre mon premier exemple (2 UserForms) et celui de Galopin !?... Pour le reste, tant que tu ne daigneras pas fournir le bon fichier je ne vois pas ce qu'on pourrait faire...

Bonjour,

Et bien Galopin utilise juste le clic sur une ligne et pas un userform qui demande la ligne.

Voila j'ai fourni mon fichier avec les données confidentielles effacées. Si demande de mdp : 1995

Le searchrec = numéro de ligne a sélectionné.

Le Data display est l'afficheur qui montre les données dans les textbox associées.

J'ai du effacer d'autres fonction au programme car il ne passait pas sur le forum sinon..

Merci a vous deux de m'avoir déjà aidé.

Kitesurf

27pour-thau-theme.xlsm (779.40 Ko)

Re,

En Haut du nodule [LanceSearchRec] la ligne :

Public Li As Integer

Le code du bouton Search :

Private Sub CommandButton1_Click() 'bouton "Search"

If Me.TextBox1.Value = "" Then 'condition : si la Textbox1 est vide
    MsgBox "Indicate Line !" 'message
    Me.TextBox1.SetFocus 'place le curseur dans la Textbox1
    Exit Sub 'sort de la procédure
End If 'fin de la condition

Li = CInt(Me.TextBox1.Value)
Unload Me 'vide et ferme l'UserForm en cours
DATA_Display.Show 'affiche l'UserForm1
End Sub

L'initialisation d'une UserForm, QUEL QUE SOIT LE NOM QUE TU LUI DONNES se fait TOUJOURS avec le code UserForm_Initialize . DATA_Display_Initialize a à peu près le même effet qu'uriner dans une contrebasse...

! Donc le code d'initialisation :

Private Sub UserForm_Initialize()
Dim O As Worksheet 'déclare la variable O (Onglet)
Set O = ActiveSheet 'définit l'onglet O
Me.TextBox1 = O.Cells(Li, 1)
Me.TextBox2 = O.Cells(Li, 3)
Me.TextBox3 = O.Cells(Li, 2)
Me.TextBox4 = O.Cells(Li, 7)
Me.TextBox5 = O.Cells(Li, 5)
Me.TextBox6 = O.Cells(Li, 6)
Me.TextBox7 = O.Cells(Li, 4)
'quelle patience !
End Sub

Supprime la macro INI...

Je plussoie Galopin, la première UserForm est inutile. Tu peux obtenir la même chose avec dans le composant ThisWorkbook (donc valable pour tous les onglets) :

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If Target.Row < 8 Then Exit Sub
Cancel = True
Li = ActiveCell.Row
DATA_Display.Show
End Sub

Merci beaucoup Thau_theme c'est super, oui cest vrai en réfléchissant le userform search n'est pas primordial...

Je ne comprends pas ce que tu dis a partir de "Supprime la macro INI... " et la suite avec le workbook, je ne suis pas un fin créateur de code et je m'en excuse mais c'est pour cela que je demande de l'aide

Kitesurf

Re,

Je voulais dire, supprime la macro Sub InitData() et met tout dans la code d'initialisation.

Copie le dernier code proposé dans le composant Thisworkbbok.

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If Target.Row < 8 Then Exit Sub
Cancel = True
Li = ActiveCell.Row
DATA_Display.Show
End Sub

Ensuite double-clique sur la ligne que tu veux afficher...

Bonjour,

Ah d'accord très bien, je garde ca sous le coude et je te remercie pour les explications

Kitesurf

Rechercher des sujets similaires à "afficher tableau unserform"