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...

3'011suivi-ess.zip (15.16 Ko)

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 Sub

A 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,

Fabrice69 a écrit :

J'aurai cependant deux petites choses à (encore...) te demander si possible.

Bien sûr mon ami
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 Sub

En atteste le fichier suivant :

2'850copie-de-suivi-ess.zip (14.89 Ko)

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.Value

par :

Sheets("Détail dossiers").Cells(ligne, 1) = TextBox10

Cela 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 Sub

A+

-- 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+

63appel-sortant.xlsm (27.39 Ko)

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...

286testusf.zip (8.69 Ko)
Rechercher des sujets similaires à "afficher donnees tableau userform"