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 :

Boucles et userforms controls.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut Boucles et userforms controls.
    Bonjour,

    Je ne suis sure ni de l'endroit ou il faut poster cette question ni de l'efficacité de mon intitulé, je suis donc ouvert a toute remarque concernant ces deux questions.

    Concernant mon problème.

    Je débute en VBA et j'essaie de créer des formulaire pour faciliter des tâches administrative.
    Pour cela j'ai créer un Userform dans lequel il y a des textbox et combobox dont je désire copier les valeurs dans des cellules d'un tableau.
    Cependant je ne sais pas combien à l'avance de text ou combobox il y aura dans mon userform car j'ai ajouté un bouton sur le userform pour en ajouter dynamiquement.

    Mon but est de construire un code le plus simple possible pour copier chaque valeur de chaque box de mon userform dans les bonnes colonnes de mon tableau.
    sachant que le userform comporte une ligne de controls regroupant ces infos :
    Produit quantité unité prix
    combobox1 txtbox1 cbbox2 txtbox2

    A chaque fois que je clique sur le bouton d'ajout de control une ligne semblable a celle ci se rajoute sur le userform.

    Je sais comment copier les valeur de la premiere ligne mais aucun idée pour copier celle des autres lignes

    Voici le code


    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
    Private Sub CommandButton1_Click()
    'éditer la fiche
    ' info date , vendeur et PDV
    Sheets("saisie masque").Range("B3").Value = UserForm1.ComboBox3.Value
    Sheets("saisie masque").Range("D3").Value = UserForm1.ComboBox4.Value
    Sheets("saisie masque").Range("F3").Value = UserForm1.TextBox3.Value
    Sheets("saisie masque").Range("F4").Value = UserForm1.TextBox4.Value
    
    'copier la premiere ligne de produits
    Sheets("saisie masque").Range("B7").Value = UserForm1.ComboBox1.Value
    Sheets("saisie masque").Range("C7").Value = UserForm1.TextBox1.Value + UserForm1.ComboBox2.Value
    Sheets("saisie masque").Range("D7").Value = UserForm1.TextBox2.Value
    'copier les autres lignes ... !
    Dim i As Integer
    Dim x As Integer
    Dim y As Integer
     y = (2 * x) + 2
     x = 1 + (UserForm1.Height - 338.25) / 30
    If x > 1 Then
     For i = 5 To y
     
       
       
       
     Next i
    End If
    End Sub

    Alors les lignes en rouges représentent le code pour copier les valeurs de la premiere lignes de control

    et en vert mes pistes pour recopier les autres ligne
    (seulement des pistes)

    voila une impr ecran de mon userform ( le bouton + ajoute une ligne d'infos sur le produit)
    Nom : userform.png
Affichages : 567
Taille : 212,9 Ko

  2. #2
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à tous
    Bonjour Bobbcolin

    Si j'ai bien compris :
    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
    Private Sub CommandButton1_Click()
    Dim Ctrl As Control
    
    Dim i as integer
    Dim nb_ctrl as integer
    
    'éditer la fiche
    ' info date , vendeur et PDV
    
    ' ATTENTION MODIIER LES "REPERES" DES COMBOBOX ET TEXTBOX => les "3" en "1" et les "4" en "2"
    Sheets("saisie masque").Range("B3").Value = ComboBox1.Value
    Sheets("saisie masque").Range("D3").Value = ComboBox2.Value
    Sheets("saisie masque").Range("F3").Value = TextBox1.Value
    Sheets("saisie masque").Range("F4").Value = TextBox2.Value
    
    'copier la premiere ligne de produits
    	'Sheets("saisie masque").Range("B7").Value = UserForm1.ComboBox1.Value
    	'Sheets("saisie masque").Range("C7").Value = UserForm1.TextBox1.Value + UserForm1.ComboBox2.Value
    	'Sheets("saisie masque").Range("D7").Value = UserForm1.TextBox2.Value
    'copier les autres lignes ... !
    
    ' boucle pour compter le nombre de combobox
    For Each Ctrl In Controls
        If  TypeName(Ctrl) = "ComboBox" Then nb_ctrl=nb_ctrl+1
    Next Ctrl
    ' boucle pour copier
    if nb_ctrl > 2 then
    	 For i = 3 To nb_ctrl
    		Sheets("saisie masque").Range("B" & 4+i).Value = controls("ComboBox" & i)
    		Sheets("saisie masque").Range("C" & 4+i).Value = controls("Textbox" & i) * controls("ComboBox" & i+1)
    		Sheets("saisie masque").Range("D" & 4+i).Value = controls("Textbox" & i+1)
    	 Next i
    end if
    
    End Sub
    Attention :
    - il faut modifier les "repères" des 2 premiers controls : combobox et textbox
    - en "C7" tu additionnes, il me semble que tu devrais multiplier ?

    Une dernière petite précision, je n'ai pas pu tester

    Eric

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut
    merci je vais essayer ça tout de suite !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut
    Cela ne marche pas ! Mais ta réponse ma beaucoup rapproché de la solution je le sent !!

    résultat en image :

    Nom : Userform test.png
Affichages : 637
Taille : 70,6 Ko

    comme on peut le voir je rentre trois produit ds mon formulaire et cela copie deux fois trop de ligne ds mon tableau !!

    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
    Private Sub CommandButton1_Click()
    Dim Ctrl As Control
    
    Dim i As Integer
    Dim nb_ctrl As Integer
    
    'éditer la fiche
    ' info date , vendeur et PDV
    
    ' ATTENTION MODIIER LES "REPERES" DES COMBOBOX ET TEXTBOX => les "3" en "1" et les "4" en "2"
    Sheets("saisie masque").Range("B3").Value = ComboBox1.Value
    Sheets("saisie masque").Range("D3").Value = ComboBox2.Value
    Sheets("saisie masque").Range("F3").Value = TextBox1.Value
    Sheets("saisie masque").Range("F4").Value = TextBox2.Value
    
    'copier la premiere ligne de produits
        Sheets("saisie masque").Range("B7").Value = UserForm1.ComboBox3.Value
        Sheets("saisie masque").Range("C7").Value = UserForm1.TextBox3.Value + UserForm1.ComboBox4.Value
        Sheets("saisie masque").Range("D7").Value = UserForm1.TextBox4.Value
    'copier les autres lignes ... !
    
    ' boucle pour compter le nombre de combobox
    For Each Ctrl In Controls
        If TypeName(Ctrl) = "ComboBox" Then nb_ctrl = nb_ctrl + 1
    Next Ctrl
    ' boucle pour copier
    If nb_ctrl > 2 Then
         For i = 4 To nb_ctrl
            Sheets("saisie masque").Range("B" & 4 + i).Value = Controls("ComboBox" & i).Value
            Sheets("saisie masque").Range("C" & 4 + i).Value = Controls("Textbox" & i).Value + Controls("ComboBox" & i + 1).Value
            Sheets("saisie masque").Range("D" & 4 + i).Value = Controls("Textbox" & i + 1).Value
         Next i
    End If
    
    End Sub
    En jaune la zone qui pose probleme (objet spécifié introuvable)

  5. #5
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à tous
    Bonjour Bobbcolin

    Essaie avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("saisie masque").Range("C" & 4 + i).Value = Controls("Textbox" & i).Value & Controls("ComboBox" & i + 1).Value
    Tu n'additionnes pas des quantités avec des "kg", mais tu concatènes.

    Eric

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut
    Bonjour,
    voila ce que j'ai fais pour que cela marche :
    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
    Private Sub CommandButton1_Click()
     
     
     
    Dim Ctrl As Control
     
    Dim i As Integer
    Dim j As Integer
    Dim nb_ctrl As Integer
    'effacer les fiches precedentes
    Range("recap").ClearContents
     
    'éditer la fiche
    ' info date , vendeur et PDV
     
    ' ATTENTION MODIIER LES "REPERES" DES COMBOBOX ET TEXTBOX => les "3" en "1" et les "4" en "2"
    Sheets("saisie masque").Range("B3").Value = ComboBox1.Value
    Sheets("saisie masque").Range("D3").Value = ComboBox2.Value
    Sheets("saisie masque").Range("F3").Value = TextBox1.Value
    Sheets("saisie masque").Range("F4").Value = TextBox2.Value
     
    'copier la premiere ligne de produits
        'Sheets("saisie masque").Range("B7").Value = UserForm1.ComboBox3.Value
        'Sheets("saisie masque").Range("C7").Value = UserForm1.TextBox3.Value + UserForm1.ComboBox4.Value
       ' Sheets("saisie masque").Range("D7").Value = UserForm1.TextBox4.Value
    'copier les autres lignes ... !
     
    ' boucle pour compter le nombre de combobox
    For Each Ctrl In Controls
        If TypeName(Ctrl) = "ComboBox" Then nb_ctrl = nb_ctrl + 1
        If TypeName(Ctrl) = "Textbox" Then nb_ctrl = nb_ctrl + 1
     
    Next Ctrl
    ' boucle pour copier
    If nb_ctrl > 2 Then
         For i = 3 To nb_ctrl Step 2
     
            Sheets("saisie masque").Range("B" & 4 + i).Value = Controls("ComboBox" & i).Value
            Sheets("saisie masque").Range("C" & 4 + i).Value = Controls("Textbox" & i).Value & Controls("ComboBox" & i + 1).Value
            Sheets("saisie masque").Range("D" & 4 + i).Value = Controls("Textbox" & i + 1).Value
         Next i
     
    End If


    j'ai mis une step sur i pour eviter qu'il ne copie deux fois les memes box mais ducoup cela remplie seuleument une ligne sur deux dans mon tableaux !

Discussions similaires

  1. [VBA EXCEL] - Boucles et UserForm
    Par ancel17 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/10/2008, 18h35
  2. [Boucle] Ordre des Controls dans un ForEach
    Par Djekill dans le forum Windows Forms
    Réponses: 8
    Dernier message: 07/12/2007, 10h38
  3. Probleme boucle For Each controls
    Par Tusbar dans le forum Windows Forms
    Réponses: 21
    Dernier message: 13/09/2007, 23h56
  4. Réponses: 1
    Dernier message: 21/02/2007, 18h17
  5. [C#] Boucle sur les controles
    Par stailer dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/05/2006, 08h48

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