IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Alimentation d'un UserForm à partir d'une liste de données [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut Alimentation d'un UserForm à partir d'une liste de données
    Bonjour à tous,
    A partir d'un fichier j'extrais une liste de données en qui ont en commun un paramètre.
    Dans ma 4ème colonne il y a des numéros qui peuvent être identiques.
    Je voudrais afficher dans un UserForm, après sélection de l'un de ces numéros, toutes les données correspondantes selon le modèle ci-dessous.

    Nom : Données pour UserForm.jpg
Affichages : 487
Taille : 185,2 Ko

    Par exemple, si je sélectionne le numéro 014 de la liste ci-dessus (à partir d'un autre UserForm que j'ai déjà codé), je voudrais insérer dans chaque TextBox les données associées pour chacune des lignes qui contient le numéro 014.

    J'ai pensé à une boucle mais je ne vois pas comment gérer le passage d'une des lignes de mon UserForm à l'autre, j'ai 5 lignes dans mon UserForm.

    Second souci, J'ai limité le nombre de lignes sur mon UserForm à 5 mais il est possible que la liste que je dois traiter en comporte davantage.
    J'ai pensé à compter le nombre de ligne qu'il me faut afficher et si il est supérieur à 5 je voudrais faire apparaître sur mon UserForm un bouton supplémentaire "Suivant".
    Est-il possible d’écrire ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If NbList >5 then
    UserForm2.CommandButton2.Visible=True
    End If
    Merci pour votre aide et vos conseils

    Eric

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut


    Bonjour,

    oui c'est possible, il suffit de mettre cette propriété par défaut à False

    Pour alimenter les lignes, différentes voies comme par exemple via la méthode Find


    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Points : 178
    Points
    178
    Par défaut
    Bonjour,

    Lorsque j'ai besoin de passer des paramètres d'un UserForm à un autre, j'utilise des cellules d'une feuille que je me réserve à cet effet.

    A+

  4. #4
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour,
    Voici ce que j'ai trouvé et appliqué, mon UserForm est composé de 5 lignes , chacune des lignes possède 5 Textbox ( de 1 à 5, puis de 6 à 11, etc) et 1 ComboBox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      For m = 0 To (NbList2 * 5) Step 5
                    If k < NbList2 Then
                         NOI_TO_UPDATE.Controls("TextBox" & 1 + m).Value = USF_List.Offset(k, 0)
                         NOI_TO_UPDATE.Controls("TextBox" & 2 + m).Value = USF_List.Offset(k, 1)
                         NOI_TO_UPDATE.Controls("TextBox" & 2 + m).Value = Format(NOI_TO_UPDATE.Controls("TextBox" & 2 + m).Value, "dd/mm/yyyy")
                         NOI_TO_UPDATE.Controls("TextBox" & 3 + m).Value = USF_List.Offset(k, 2)
                         NOI_TO_UPDATE.Controls("TextBox" & 4 + m).Value = USF_List.Offset(k, 5)
                         NOI_TO_UPDATE.Controls("TextBox" & 5 + m).Value = USF_List.Offset(k, 6)
                         NOI_TO_UPDATE.Controls("ComboBox" & 1 + k).List = Data.Range("B5:B7").Value
                         k = k + 1
                    End If
                Next m
    J'ai testé et cela fonctionne si j'ai entre 1 et 5 données de base à traiter.
    Ce que je souhaite faire maintenant c'est lorsque j'ai 6 données ou plus, un bouton supplémentaire apparaît ( plus de souci pour cela) pour traiter les données suivantes et afficher les données associées.
    Comme pour le traitement précédent, je vais essayer de gérer cela avec ma zone tampon.
    Je vous tiens au courant
    Eric

  5. #5
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour à tous,
    Voici ce que j'ai écris pour alimenter mon UserForm (Simplifié par rapport à hier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     With Data
            NbList2 = .Cells(.Rows.Count, 7).End(xlUp).Row - 26 ' Compte le nombre de données à traiter
     End With
     
                For m = 0 To 20 Step 5
                    NOI_TO_UPDATE.Controls("TextBox" & 1 + m).Value = USF_List.Offset(k, 0)
                    NOI_TO_UPDATE.Controls("TextBox" & 2 + m).Value = USF_List.Offset(k, 1)
                    NOI_TO_UPDATE.Controls("TextBox" & 2 + m).Value = Format(NOI_TO_UPDATE.Controls("TextBox" & 2 + m).Value, "dd/mm/yyyy")
                    NOI_TO_UPDATE.Controls("TextBox" & 3 + m).Value = USF_List.Offset(k, 2)
                    NOI_TO_UPDATE.Controls("TextBox" & 4 + m).Value = USF_List.Offset(k, 5)
                    NOI_TO_UPDATE.Controls("TextBox" & 5 + m).Value = USF_List.Offset(k, 6)
                    NOI_TO_UPDATE.Controls("ComboBox" & 1 + k).List = Data.Range("B5:B7").Value
                    k = k + 1
                Next m
     
      If NbList2 > 5 Then
        NOI_TO_UPDATE.CommandButton2.Visible = True 'Si j'ai plus de 5 donnees à traiter j'affiche un bouton que j'ai nommé "Suivant" sur mon Userform
      End If
    Puis pour la Gestion des données supplémentaires (Si j'ai plus de 5 lignes à traiter)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    Private Sub CommandButton2_Click()
    Dim Data As Worksheet
    Dim USF_List As Range
    Dim Cty_Rate As Range
    Dim NbList As Integer
    Dim NbList2 As Integer
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim m As Integer
    Dim n As Integer
    Dim SRE As Variant
    Set Data = ThisWorkbook.Sheets("Data")
    Set USF_List = Data.Range("G27")
    Set Cty_Rate = Data.Range("G5")
    j = 0
    k = 0
     
    If (TextBox1.Value <> "" And ComboBox1.Value = "") Or (TextBox6.Value <> "" And ComboBox2.Value = "") Or (TextBox11.Value <> "" And ComboBox3.Value = "") Or (TextBox16.Value <> "" And ComboBox4.Value = "") Or (TextBox21.Value <> "" And ComboBox5.Value = "") Then
        TB1 = MsgBox("Inspector Type not Selected", vbOKOnly, "WARNING")
        If TB1 = vbOK Then
             Exit Sub
        End If
     End If
     
    Me.Hide
     
      Data.Range("M6") = Data.Range("M6") + 1 'Ici je me sert d'un compteur pour connaitre le nombre d'affichage a réaliser
     
                    'Je vais afficher mon Userform pour les données de 1 à 5, puis 1 fois supplémentaire pour les données de 6 à 10, puis 1 fois supplémentaire pour les données de 11 à 15
                    'et enfin une dernière fois pour la donnée 16 (1 affichage initial puis 3 affichages supplémentaires)
     
           Select Case Data.Range("M6")
           Case Is = 1
           k = 5
           Case Is = 2
           k = 10
           Case Is = 3
           k = 15
           Case Is = 4
           k = 20
           Case Is = 5
           k = 25
           End Select
     
                For m = 0 To 20 Step 5 'Mise à jour des données issues des premières entrées dans les TextBox après Appui sur le Bouton
     
                         USF_List.Offset(k - 5, 0) = NOI_TO_UPDATE.Controls("TextBox" & 1 + m).Value
                         USF_List.Offset(k - 5, 1) = NOI_TO_UPDATE.Controls("TextBox" & 2 + m).Value
                         USF_List.Offset(k - 5, 1) = Format(USF_List.Offset(k - 5, 1), "mm/dd/yyyy")
                         USF_List.Offset(k - 5, 2) = NOI_TO_UPDATE.Controls("TextBox" & 3 + m).Value
                         USF_List.Offset(k - 5, 5) = NOI_TO_UPDATE.Controls("TextBox" & 4 + m).Value
                         USF_List.Offset(k - 5, 6) = NOI_TO_UPDATE.Controls("TextBox" & 5 + m).Value
                         USF_List.Offset(k - 5, 4) = NOI_TO_UPDATE.Controls("ComboBox" & 1 + j).Value
                         k = k + 1
                         j = j + 1
     
                Next m
     
      For m = 1 To 25
      NOI_TO_UPDATE.Controls("TextBox" & m).Value = "" 'Effacement des valeurs dans les TextBox
      Next m
     
      Select Case Data.Range("M6")
           Case Is = 1
           k = 5
           Case Is = 2
           k = 10
           Case Is = 3
           k = 15
           Case Is = 4
           k = 20
           Case Is = 5
           k = 25
           End Select
       j = 0
                For m = 0 To 20 Step 5 'Entrée des valeurs suivantes dans les TextBox si Nbre de données >5 ou >10 etc..
                         NOI_TO_UPDATE.Controls("TextBox" & 1 + m).Value = USF_List.Offset(k, 0)
                         NOI_TO_UPDATE.Controls("TextBox" & 2 + m).Value = USF_List.Offset(k, 1)
                         NOI_TO_UPDATE.Controls("TextBox" & 2 + m).Value = Format(NOI_TO_UPDATE.Controls("TextBox" & 2 + m).Value, "dd/mm/yyyy")
                         NOI_TO_UPDATE.Controls("TextBox" & 3 + m).Value = USF_List.Offset(k, 2)
                         NOI_TO_UPDATE.Controls("TextBox" & 4 + m).Value = USF_List.Offset(k, 5)
                         NOI_TO_UPDATE.Controls("TextBox" & 5 + m).Value = USF_List.Offset(k, 6)
                         NOI_TO_UPDATE.Controls("ComboBox" & 1 + j).Value = ""
                         k = k + 1
                         j = j + 1
                Next m
     
                With Data
                      NbList2 = .Cells(.Rows.Count, 7).End(xlUp).Row - 26 ' Compte le nombre de NOI de la feuille Data
                End With
     
                If Data.Range("M6") = Int(NbList2 / 5) Then
                    CommandButton2.Visible = False 'Si mon compteur est égal à l'entier de la division de mes données par 5 (Si j'ai 16 donnees à traiter mon compteur sera egal à 3) je masque le bouton que j'ai appelé "Suivant"
                End If
     
     
    NOI_TO_UPDATE.Show
     
    End Sub
    Eric

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Problème Formulaire à partir d'une liste de données
    Par M_2193 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/07/2013, 20h36
  2. [XL-2007] Alimentation de la ComboBox d'un UserForm à partir d'une plage de donnée
    Par Loukassit0 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/02/2012, 18h22
  3. [XL-2007] Liste unique à partir d'une liste de données
    Par Just-Soft dans le forum Excel
    Réponses: 2
    Dernier message: 15/07/2010, 14h34
  4. [XL-2003] imprimer des feuilles excel générées à partir d'une liste de données
    Par aminix9 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/02/2010, 14h48
  5. Réponses: 16
    Dernier message: 05/07/2007, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo