Afficher données d'un tableau dans Userform
Bonjour à tous, Forum,
Grâce à votre aide, je sais maintenant transférer la saisie effectuée via un Userform dans un tableau. Maintenant, je cherche à faire le contraire, c'est à dire afficher les données d'un tableau dans un Userform en fonction d'une "entrée".
L'exemple dans le fichier ci-après devrait être plus parlant...
Merci d'avance pour votre aide.
Fabrice,
Salut fabrice, forum,
Comme on se retrouve!
P'tite question : où se trouve le numéro d'agence ?
Sinon tu peux faire un truc du genre :
Private Sub TextBox4_Change()
If TextBox4.Value <> "" Then
Label31.Caption = Sheets("Agences").Range("D" & TextBox4.Value)
Else
Label31.Caption = "Libellé Agence"
End If
End Sub- textbox4 étant la case où tu entres le n° d'agence (ici j'ai fait comme si c'était un simple chiffre)
- "Sheets("Agences").Range("D" & TextBox4.Value)" étant la cellule où se trouve le libellé
Ensuite tu peux rajouter des lignes de code pour les DA, DRC et cie...
Salut vba-new, Forum,
Je suis sincèrement ravi de te retrouver pour ce nouveau coup de main...
Le numéro d'agence est saisi dans le Usf quand le dossier arrive. La base où se trouve tous les n° d'agence ainsi que d'autres informations est dans l'onglet "Agences" (colonne A pour le n°). Je souhaite donc que, quand le n° d'agence est saisi, les informations de l'agence s'alimente dans le Usf automatiquement.
J'ai testé ton code avant de te répondre et cela ne fonctionne pas... En fait, cela ne me ramène rien...
D'autre part, dans le fichier exemple que j'ai joint, j'ai supprimé quelques colonnes et il se peut que les infos ne se mettent pas un bon endroit mais ça, je dois pouvoir "maitriser"...
Le principe, le collaborateur saisit dans le Usf une date, un nom et un prénom, le n° d'agence et, automatiquement, les informations de l'agence se remplissent dans le Usf, puis il passe à une autre TextBox en dessous pour continuer sa saisie...
Merci d'avance pour ton aide.
A te relire,
Fabrice,
Re,
Houla j'avais pas vu les colonnes A, B, C
Pas eu le réflexe de faire défiler la feuille
Voici le code (avec ce que j'ai compris) :
Private Sub TextBox4_Change()
Dim lig%
If TextBox4.Value <> "" And Len(TextBox4.Value) = 5 Then
With Sheets("Agences").Range("A:A")
Set c = .Find(TextBox4.Value, LookIn:=xlValues)
If Not c Is Nothing Then
lig = Right(c.Address, Len(c.Address) - InStrRev(c.Address, "$"))
Label31.Caption = Sheets("Agences").Range("B" & lig)
Label32.Caption = Sheets("Agences").Range("C" & lig)
Label33.Caption = Sheets("Agences").Range("H" & lig)
Label34.Caption = Sheets("Agences").Range("I" & lig)
Label35.Caption = Sheets("Agences").Range("j" & lig)
End If
End With
Else
Label31.Caption = "Libellé Agence"
Label32.Caption = "EDS Région"
Label33.Caption = "DA"
Label34.Caption = "DRC"
Label35.Caption = "DRCA"
End If
End SubA adapter selon tes besoins!
Bonjour Forum, à tous,
Merci vba-new pour le code que je vais tester rapidement... Je te tiens au courant.
Merci encore et joyeuse fêtes de fin d'année à tous.
Fabrice,
Bonjour à tous, Forum,
Merci encore vba-new pour le code. J'aurai cependant deux petites choses à (encore...) te demander si possible.
- Peut-on afficher les données de l'agence juste après la saisie du n° (sans passer par le bouton valider) ?
- Est-il possible de faire en sorte que la date change dans "TextBox1" en fonction de la valeur de "Calendar1" ?
Merci d'avance et bonne journée.
Amicalement.
Fabrice,
re fabrice,
Bien sûr mon amiFabrice69 a écrit :J'aurai cependant deux petites choses à (encore...) te demander si possible.
Fabrice69 a écrit :- Peut-on afficher les données de l'agence juste après la saisie du n° (sans passer par le bouton valider) ?
Normalement, c'est déjà fait! Quand je rentre par exemple 30110 (dans le textbox4) dans le fichier que tu as fourni avec le code que j'ai fourni, les données concernant l'agence de "ST SYMPHORIEN D'OZON" sont bien affichées! Sans appuyer sur le bouton valider!
Avons-nous le même fichier?
Fabrice69 a écrit :- Est-il possible de faire en sorte que la date change dans "TextBox1" en fonction de la valeur de "Calendar1" ?
Tu rajoutes le petit bout de code suivant :
Private Sub Calendar1_Click()
Me.TextBox1 = Calendar1.Value
End SubEn atteste le fichier suivant :
Bonjour à tous, Forum,
vba-new, mille mercis pour tout ce que tu fais pour moi... Je n'ai pas dû utiliser le même fichier que toi car effectivement, avec celui que tu as renvoyé, l'affichage des données de l'agence fonctionne bien.
J'essaye d'appliquer tout le code à mon fichier définitif et te tiens au courant.
Bonne journée.
Amicalement.
Fabrice,
Bonjour Forum,
Cher ami vba-new, la petite procèdure permettant la mise à jour dans la TextBox1 fonctionne bien. Le seul petit ennui, c'est que quand je récupère sa valeur dans l'onglet "Détail dossier", elle est en format Anglais et ce, malgré le formatage de la colonne au format date normal (jj/mm/aaaa).
Serait-il possible de m'indiquer comment faire ?
Merci d'avance et bonne soirée.
Fabrice,
Bonjour fabrice, forum,
Pour ça il me faudrait, si possible, un bout du fichier sur lequel tu travailles car dans ma version, la date est bien au format français!
Sans fichier, je n'arrive pas à comprendre.
Bonjour à tous, Forum,
Ci-joint, le fichier sur lequel je travaille. Je ne sais pas, en fait, si c'est un format Anglais mais quand je choisis la date du 08/12/2009 par exemple, il me le transforme en 12/08/2009 dans l'onglet "Détail dossier"...
Sinon, je vous souhaite d'excellentes fêtes de fin d'année à tous et à vba-new en particulier.
Merci encore.
Amicalement.
Fabrice,
Re,
Dans le code de "ButValider_click" remplace le :
Sheets("Détail dossiers").Cells(ligne, 1) = TextBox10.Valuepar :
Sheets("Détail dossiers").Cells(ligne, 1) = TextBox10Cela semble résoudre le problème, va savoir pourquoi!
Bonnes fêtes également à toi et ta famille fabrice
Re-,
Effectivement, cela semble fonctionner...
Encore une fois, merci à toi, vba-new, pour tout ce que tu as fait pour moi sur ce coup là.
Je ne passe pas le fil en résolu tout de suite car j'aurais certainement quelques conseils (encore) à demander après tests des collaborateurs qui vont effectuer la saisie au jour le jour.
Joyeuses fêtes de fin d'année à tous.
Amicalement.
Fabrice,
Bonjour à tous;
Tout d'abord, j'adresse mes meilleurs voeux pour cette nouvelle année à tous ceux qui font que ce forum admirable vive et, en particulier, à tous ceux qui ont bien voulu apporter leur aide à un "VBiste" débutant comme moi... Merci à vous...
Malgré des recherches sur le net, je n'arrive pas à "pré-formater" mes TextBox comme je le voudrais. En effet, je souhaite que les TextBox de date (TextBox51, 60, 80 et 90) soient déjà au bon format (jj/mm/aaa) à la saisie et que l'utilisateur ne puisse pas saisir autre chose qu'une date...
Je souhaite également qu'à la saisie du NOM et du Prénom (TextBox20, TextBox30), les caractères soient transformés automatiquement en majuscules, mais je ne sais pas si c'est possible.
Je vous remercie par avance de prendre encore un peu de votre temps pour moi.
Amicalement.
Fabrice,
Bonjour,
Les TextBox sont comme leur nom l'indique des boites de textes.
C'est à toi d'en interprèter la saisie à ta guise.
Le bon usage veut qu'on fasse toutes les vérifications de la saisie cohérence, sémantique, formatage... avant de basculer les données dans la BD. Et pas seulement pour les dates...
Si tu zappes cette étape tu as de fortes chance de te retrouver avec des données incohérentes.
A+
-- Mer Jan 06, 2010 12:16 pm --
Je souhaite également qu'à la saisie du NOM et du Prénom (TextBox20, TextBox30), les caractères soient transformés automatiquement en majuscules
rajouter dans le USF:
Private Sub TextBox20_Change()
TextBox20 = UCase(TextBox20)
End SubA+
-- Mer Jan 06, 2010 12:43 pm --
Concernant la saisie des dates...
Je sais bien que le calendrier est très fun et tout et tout... il y a aussi d'autres utilitaires pour la saisie de date...
Personnellement je n'en utilisais aucun : Comme j'utilisais beaucoup de saisie de date dans un domaine sensible,
je préférait force l'utilisateur à rentrer les dates sous la forme JJMMAA.
Avec pour chaque contrôle date un ControlTipText :
dates sous la forme "JJMMAA"
Le controle de cohérence est fort simple et la transformation en date également.
On peut même créer une fonction personnalisé pour ces contrôles et transformations...
parce que là ton calendrier, il te sert que pour la date du jour. Pour les autres contrôles, ceinture !
Enfin bon... moi je dis ça... On fait come on aime... hein !
Bonjour galopin01, forum,
Merci pour le code sur les majuscules galopin01, cela fonctione bien.
Concernant les dates, je sais d'expérience qu'il vaut mieux "brider" la saisie car dans ce projet, je ferai certainement des calculs de délais en fonction des dates rentrées. C'est pourquoi je souhaite vraiment que l'utilisateur ne puisse pas saisir autre chose qu'une date dans les TextBox...
parce que là ton calendrier, il te sert que pour la date du jour. Pour les autres contrôles, ceinture !
Enfin bon... moi je dis ça... On fait come on aime... hein !
Effectivement, le calendrier ne me sert que pour la première date mais c'est par méconnaissance du VBA tout simplement... C'est possible de se servir du même calendrier pour chaque TextBox de date ? Cela résoudrait les problèmes de format...
Merci de ton aide galopin01.
Amicalement.
Fabrice,
J'ai testé le "ControTipText" et si j'ai bien compris, cela permet d'insérer une sorte de commentaire sur la TextBox. Seulement, on peut saisir à sa guise et cela ne me convient pas... Non, il faut absolument que la saisie dans ces TextBox soient limitées à une date et rien d'autre. C'est vrai que le top du top serait que l'on puisse se servir de "Calendar1" pour chaque date...
je souhaite vraiment que l'utilisateur ne puisse pas saisir autre chose qu'une date dans les TextBox
Puisqu'on te dit que ce n'est pas possible ! Les TextBox ne prenne que du String !
Le contrôle de saisie (dont je parlais plus haut) n'est pas optionnel. C'est une nécessité à laquelle tu dois te soumettre au même titre que la déclaration de variables...
Ce contrôle (calendrier) ne résoud pas les problème de format puisque ton textBox prend un String que tu es obligé de reformater...
De toutes façon le problème est que ton calendar est immuablement fixé sur :
Private Sub Calendar1_Click()
Me.TextBox10 = Calendar1.Value
De plus ce calendar n'empêche pas l'utilisateur de saisir n'importe quoi dans le TextBox ! Encore faut-il qu'il comprenne qu'il doit utiliser le calendrier pour modifier cette date... De plus il n'est pas prouvé que ce calendar soit plus ergonomique que la saisie de six chiffres au clavier... Mon expérience personnelle me dit même le contraire !
Mébon, je ne tiens pas spécialement à te vendre ma marchandise... On fait comme on aime !
En fatiguant très, beaucoup... beaucoup ! on y arriverait peut-être, mais ce ne serait plus un USF de nourrissage de BD mais un proto de fusée lunaire... Si tu doit poser plus de code à régler ton contrôle de saisie que le reste du USF, c'est que la méthode est mauvaise. Inutile de réinventer la roue !
A+
Bonjour Fabrice69
sans trop me meler de votre conversation
il faut que ton textbox1 soit declaré en date
Sheets("Détail dossiers").Cells(Ligne, 1) = CDate(TextBox1.Value)
bon courage
Bonjour à tous,
Voici un code de silkyroad qui permet de forcer un format date type jj/mm/aaaa dans un TextBox :
Private Sub TextBox1_Change()
Dim Valeur As Byte
TextBox1.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
Valeur = Len(TextBox1)
If Valeur = 2 Or Valeur = 5 Then TextBox1 = TextBox1 & "/"
End Sub
'Ensuite pour vérifier que c'est bien une date qui a été saisie
Private Sub CommandButton1_Click()
If Not IsDate(TextBox1) Then
MsgBox "Format incorrect"
TextBox1 = ""
Exit Sub
Else
MsgBox "Format correct"
'...la suite de la procédure
End If
End Subça me gène un peu de parler de Format correct dans un TextBox... qui ne renvoie que des String.
Cette routine assure un premier contrôle de saisie valide. Mais ça donne en aucun cas un format Date.
IsDate renvoie VRAI ou FAUX si le contenu du TextBox est convertible en date mais ça ne dispense pas de faire un vrai contrôle de cohérence et une conversion finale avant de basculer le textbox dans la cellule.
macible = CDate(TextBox1) (sans .Value)
Sinon, dans certain cas on peut bien encore avoir des surprises...
En d'autres termes un String qui à le look d'une date dans un TextBox n'est pas une date formatée ce n'est qu'un String qui ressemble à un String/Date
Ce bout de code est un peu court : il faut encore analyser la structure de ton String pour bétonner la saisie :
Une saisie 12/3 provoquerait immanquablement le message "saisie correcte" alors que ce n'est pas vraiment ce qui était attendu ! Ainsi que le démontre la démo jointe.
De plus l'insertion automatique de la barre "/" peut dérouter l'opérateur...