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.])
Bonjour Thau_theme,
Merci pour ta reponse si rapide. Il y a deux choses qui ne collent pas avec ce que je veux faire
- 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
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]
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+
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
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