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 :

[VBA-E] - Loop sur userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Par défaut [VBA-E] - Loop sur userform
    Bonjour,

    J ai un userform le voici :

    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
    Public Sub CommandButton1_Click()
     
        'Clear the column A to paste the actual components
        Worksheets("Inlet").Cells(u + 5, 1).Select
        Selection.ClearContents
     
        'Create the list in the table when components have been selected in the listbox
        For i = 1 To ListBox1.ListCount - 1
            If ListBox1.Selected(i) = True Then
            u = u + 1
            Worksheets("Inlet").Cells(u + 5, 1) = ListBox1.List(i)
            End If
     
        Next
     
    Unload Me
     
    End Sub
    Qui marche bien ...

    Seulement je voudrai qu il soit repeter (fonction Loop et il y a plusieurs structures si je ne me trompe pas) MAIS il faudrait que :
    les cellules de destination changent (espacement de 36 cellules entre les colonnes de resultats) j'ai essayer de faire un truc du genre Cells (u+5, i*36),
    que le nombre de boucle soit defini par l'utilisateur (j ai essayer une InputBox pour definir le nombre de Loop mais au mauvais endroit a mon avis)
    et pour tout ca le top serait qu'il n'y est que le bouton OK sur mon userform (voir deux boutons mais je vois pas comment gerer les deux boutons :s) autrement dit je suis perdu !

    La je vous donne tout d'un coup mais j'ai essayer de l'ameliorer point par point et je rame...

    En fait l'idee la plus simple pourrait peut etre etre appeler le userform depuis une Sub et de faire la boucle sur cette Sub mais j'y arrive pas, donc n hesiter pas a proposer meme une demarche completement differente ! C'est le resultat qui compte ! J'suis sur que vous avez de bon conseils jle sens ! ;-)

    Merci d'avance

    (Je vous rassure je progresse en VBA... )

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Une question : Si je comprends bien, tu veux décaler de 36 colonnes chaque index de ta listbox ?
    Tu as combien d'élément dans ta liste ? Parce que tu attendras vite 256...
    Admettons.
    Auquel cas, pourquoi ne pas prendre le pb sous un autre angle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plage = ListBox1.ListCount -1 * 36 ' -1 à vérifier ici
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For NoCol = 1 to Plage step 36
         i = i + 1
         If ListBox1.Selected(i) Then ' = True est inutile
              u = u + 1
              Worksheets("Inlet").Cells(u + 5, NoCol) = ListBox1.List(i)
         End If
    Next
    Juste une idée

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Par défaut
    Euh no... jme suis mal exprimer desole, je reformule (en mieux...) :
    En fait
    j'ai une listbox avec 468 elements, l'utilisateur fait une premiere selection (de plusieurs elements autant qu'il veut) qui va dans la colonne 1, une deuxieme selection dans la colonne 36, [...] , une n selection dans la colonne n x 36
    Et c'est l utilisateur qui devra determiner le nombre de repetition "n"

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Alors limite déjà n < 8
    Sinon ? Je n'ai visiblement rien compris du but de la manoeuvre. Mais la nuit fut courte

    Edit
    Et si tu fais
    Non ? Bon ! Je retourne me coucher

  5. #5
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Par défaut
    On va mettre ca sur le dos du decalage horaire...
    (Moi j ai pas d excuse je change pas d heure... lol)

    Limiter a 8 parfait ca ne pose pas de probleme, mais le plage = n * 36 ne me fera pas relancer ma listbox n fois ?

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pfft ! Vouais, j'avais shunté ce "détail"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For NoCol = 1 to Plage step 36
         i = i + 1
         If ListBox1.Selected(i) Then ' = True est inutile
              For Lindex = 1 to ListBox1.ListCount - 1
                   u = u + 1
                   Worksheets("Inlet").Cells(u + 5, NoCol) = ListBox1.List(Lindex)
              Next
              u = 0 ' ou 1 ou une valeur initiale...
         End If
    Next
    J'ai un peu oublié ce que tu voulais... mais là, tu mets toute ta liste dans la même colonne sur des lignes différentes.
    Sans garantie (je prends mes précautions... )

  7. #7
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Par défaut
    Encore moi ,

    Alors d'abord merci parce que ca avance mais j ai quand meme encore une question.
    Avec ton code ca va etre la meme liste, copier plusieurs fois dans different endroits ? Mais ski serait top c'est que l utilisateur est re-acces a la listbox 3 4 5 ou 6 fois et creer une toute nouvelle liste (sinon jsuis entierement d'accord avec ton code qui repartit les listes dans une meme colonne mais sur des lignes differentes)

    pfiou c pas corect de te solliciter comme ca apres une nuit difficile apparament...

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Donc, ta boucle sur les colonnes est à faire "ailleurs".
    Comment sont déterminées les plages de tes listes ? (selon une sélection de l'utilisateur, ça j'ai compris) mais de quelle manière ? Le code serait le bienvenu

  9. #9
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Par défaut
    Je vais meme te mettre le fichier Excel

    En gros l'idee c'est :

    Tous les composants et leur proprietes sont regrouper sur la page Data
    A partir de ces noms : une listbox (grace a rowsource)
    L'utilisateur choisi une serie de composant elle apparait sur la feuille Inlet.
    Et grace a la fonction vlookup les donnees de chaque composant sont retrouver et un tableau complet est creer.

    Ca c'est ce qui se passe avec ce qui est fait, maintenant le but c'est de pouvoir repeter l'operation a un autre endroit dans la page Inlet afin d'avoir plusieurs tableaux avec des donnees differentes et avec le mem userform juste repeter d ou mon idee de Loop (et enfin pouvoir recroisees les donnees plus tard et avoir plein d'autres questions sur VBA...)

    Merci d'avance
    Fichiers attachés Fichiers attachés

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Donc, le décalage de 36 colonnes est arbitraire et n'est justifié que si tu as 36 items dans ton listbox.
    Donc, ce qui te manque c'est, en admettant qu'un tableau soit renseigné, et en cas de nouveau choix, c'est le décalage à partir de la dernière colonne renseignée du dernier tableau créé.
    Comme je vais m'absenter, dis déjà si c'est ça pendant que je regarde.

  11. #11
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Par défaut
    le decalage de 36 colonnes correspond aux 30 proprietes de chaque composant de la liste plus une marge pr autre calculs

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    On garde la partie du code qui nous intéresse et on fait une macro qui sera lancée chaque fois que le "user" sélectionnera... ce qu'il doit sélectionner...
    On note le N° de la première colonne libre, on ajoute 1 pour séparer tes tableaux si tu veux et on fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Sélection_Click() 'l'utilisateur sélectionne...
         PremièreColonneDuTableauSuivant = Range("A1").SpecialCells(xlCellTypeLastCell).Column + 2
         i = i + 1
         If ListBox1.Selected(i) Then ' = True est inutile
              For Lindex = 1 to ListBox1.ListCount - 1
                   u = u + 1
                   Worksheets("Inlet").Cells(u + 5, PremièreColonneDuTableauSuivant ) = ListBox1.List(Lindex)
              Next
              u = 0 ' ou 1 ou une valeur initiale...
         End If
    end sub
    C'était pas bien compliqué... si c'est ce qu'il te faut...

  13. #13
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Par défaut
    J'essaye de suite et jte dit si ca marche, merci
    Et c'est sur qu il me faut du simple pour le moment... lol

    D'ailleurs tu sais ou il a y de bon tutoriaux ? (autres que ceux ici, excel-vba.com et anthony-vba) Pas faciel d apprendre a l'arrach :s

    Encore merci

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

Discussions similaires

  1. [XL-2010] VBA afficher une image (variable) sur Userform avec hyperlien
    Par kevina82 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/06/2015, 20h55
  2. [XL-2007] Animer un drapeau sur Userform (VBA)
    Par signorepel dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 04/07/2013, 11h41
  3. VBA Excel Loop sur Range de Cells - Copie Ficher
    Par bebert00 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/09/2010, 18h11
  4. [VBA-E] Question sur image dans userform ?
    Par damsmut dans le forum Excel
    Réponses: 3
    Dernier message: 04/04/2007, 05h32
  5. [VBA E] boucle sur textbox d'une userform
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 03/07/2006, 20h37

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