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] Adaptation avec des listbox


Sujet :

Macros et VBA Excel

  1. #21
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bon et ce contrôle combobox1 il existe bien sur l'userform associé à ton code..?

  2. #22
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Par défaut Adaptation avec des listbox ou comobobox
    oui il existe bien ainsi que les 19 autres.

  3. #23
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par sebi78
    ..,
    effacer une ligne et detruire, par contre j'ai un probleme lorsque je quitte userforme.

    ...
    pourquoi un "init" lorsque tu quitte le contôle ..? elle est appelée comment cette procédure..?

  4. #24
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Par défaut Adaptation avec des listbox ou combobox
    voici le code du bouton quitter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub QUITTER_Click()
    ScrollBar1.Min = 1
    ScrollBar1.Value = 1 'Ecrit les dernières modifs avant de quitter
    End
    End Sub
    puis cela renvoie au code suivant :

    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
    Private Sub ScrollBar1_Change() ''Ecrit les données dans la feuille de calculs
    Dim NoCol As Integer, NomControle As String
        If Not Initialisation Then
            If Not verifligne() Then 'Ligne vide, accès à la suivante inhibé
                If NoLigne < ScrollBar1.Value Then
                    ScrollBar1.Value = NoLigne
                    Exit Sub
                End If
            End If
            'Ecriture dans la feuille de calculs des données affichées
            For NoCol = 1 To NbreColonnes
                NomControle = "combobox" & NoCol
                fl.Cells(NoLigne, NoCol).Value = Me.Controls(NomControle).Value
            Next
        End If
        NoLigne = ScrollBar1.Value
        Call ScrollBarMax 'Nouvelle valeur de ScrollBar.max
        Call Init 'Init des champs
        Initialisation = False
    End Sub
    C'est dans cette fonction que l'on renvoie à la fonction init

  5. #25
    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
    Hello me revoilou.
    Comme je connais le code que tu souhaites utiliser, dis-nous plutôt ce que tu veux faire dans Init
    Init était écrit pour renseigner autant de textbox qu'il y avait de colonnes
    Ton code corrigé ainsi,
    Sub Init() 'Renseigne les combobox pour la ligne NoLigne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim NoCol As Integer, NomControle As String
        For NoCol = 1 To NbreColonnes
            NomControle = "Combobox" & NoCol
            Me.Controls(NomControle).value = fl.Cells(NoLigne, NoCol).Value
            Me.NuméroLigne = " Ligne " & NoLigne 'Affichage du N° de ligne
        Next
    End Sub
    ... met le contenue de fl.Cells(NoLigne, NoCol).Value dans l'entête.
    Si tu veux remplir tes combos, tu as deux façons de t'y prendre, soit avec RowSource de la seconde ligne à la dernière d'une même colonne, soit avec additem si les données ne se suivent pas dans une colonne.
    Tu dis

    bbil, sebi s'inspire de ça en remplaçant les textbox par des combos (!)

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Par défaut Adaptation avec des listbox
    Si je comprend mieux ta fonction init.

    Dans mon cas, je n'en aurais pas besoin ?

    Mon nombre de colonne sera toujours egale à 19 .

    colonne A est remplit par combobox1
    colonne B est remplit par combobox2
    colonne C est remplit par combobox3
    colonne D est remplit par combobox4
    colonne E est remplit par combobox5
    colonne F est remplit par combobox6
    colonne G est remplit par combobox7
    colonne H est remplit par combobox8
    colonne I est remplit par combobox9
    colonne J est remplit par combobox10
    colonne K est remplit par combobox11
    colonne L est remplit par combobox12
    colonne M est remplit par combobox13
    colonne N est remplit par combobox14
    colonne O est remplit par combobox15
    colonne P est remplit par combobox16
    colonne Q est remplit par combobox17
    colonne R est remplit par combobox18
    colonne S est remplit par combobox19

    J'ai utilisé additem pour remplir chaque combobox 1 à 12 et 17 à 19 les donnes sont differentes.

    Seul les combobox 13,14,15 ET 16 les donnes sont identique ( date du type 01/01/2007 ... 31/12/2007 )

    J'ai pas trop compris pourquoi le bouton quitter pointe sur scollbar ?
    Je cherche à sortir de l'userform.

  7. #27
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Par défaut Adaptation avec des listbox ou combobox
    Voici ou j'en suit. J'adapterais cela apres pour remplir une 20 de page.

    http://cjoint.com/?eptFMYuHVb

    Il y a forcement le moyen d'optimiser le code mais j'en suis pas la. Je cherche à le faire fonctionner.

    J'ai essayer avec ton code modifier tjs la meme erreurs 380.
    Je n'ai pas encore dechiffrer toute la finesse de ton code.

    dur dur

    Je sais le resultat que je veux optenir mais comment l'expliquer avec des bouts de code ?????.

    Je veux reproduire une insertion de ligne avec des donnees imposees.
    Supprimer une ligne, l'effacer, copier une ligne existante et la modifier.

    Et sortir de l'usrform. voila ce que je veux faire.


    J'y suis preque mais cela plante en sortant. IL y a peut-etre des ligne de codes en trop, inutile...

  8. #28
    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
    Bouton quitter : Rien à voir avec ce que tu veux faire. "End" suffit.
    Dans mon code, si une modif a été saisie dans un ou plusieurs textbox, seul un changement de ligne enregistre les données modifiées ou saisie. Donc, avant de quitter, je place le scrollbar sur la ligne 1 (qui n'est jamais affichée dans les textbox). Juste une astuce pour que la validation de la dernière ligne saisie ne soit pas oubliée.
    Dans ton cas... ce n'est pas le cas

  9. #29
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Par défaut Adaptation avec des listbox ou combobox
    Peux-tu regarder si tu trouves des failles à mon code. Et me donner des conseils pour optimiser mon code. Merci.

    Je sais c'est pas la bonne facon de proceder mais avec un exemple c'est plus facile pour moi .

    http://cjoint.com/?epuFXZzScX

    J'ai supprimer les deux lignes dont tu me parler et cela à resolu mon probleme erreur 380. Par contre j'ai quand meme garder init sinon cela me fait pas ce que j'aurait voulu dans la fonction supprimer ligne et pour inserer mes donnes sur une ligne avec le scrollbar.

    Je pense que j'y suis arrive avec un peu de mal et sans trop avoir compris ton code de depart.

  10. #30
    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
    Je regarderai ça demain.
    Citation Envoyé par Tu
    Je pense que j'y suis arrive avec un peu de mal et sans trop avoir compris ton code de depart
    Chapeau car mon code de départ n'avait rien à voir avec ce que tu veux faire et, pour le moment, j'avoue ne pas que je n'ai toujours pas compris Avec ton code, peut-être.
    Ceci dit, passant systématiquement par des userforms pour la réalisation de formulaires de saisie, j'interdis toujours à l'utilisateur l'accès aux feuilles de calculs et n'y place des contrôles que dans certains cas bien spécifiques.
    Enfin, une fois que j'aurai compris, je te dirai.
    A+

  11. #31
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Par défaut Adaptation avec des listbox ou combobox
    Bonjour,

    As-tu dechiffrer mon code ? Et vu comment marchait mon essai.
    Je vais essayer de l'utiliser pour remplir mes 20 feuilles.

    Puis essayer de resoudre mon probleme de selection de cellule :
    Mon tableau commence ligne 3 ( 1 et 2 etant vide pour y place des boutons )
    Ligne 3 et 4 ( titre )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.UsedRange.Rows("5:" & ActiveSheet.UsedRange.Rows.Count).Select
    Je suis oblige de tricher de temps en temps en mettant :
    3 ald 5

    Car il me decale ma selection. Et je me retrouve avec des lignes vides ou il me manque une ligne remplit.

    Je pense que cela provient du deuxieme tableau sur une meme feuille.

    Je pense resoudre cela avec cette essai.


  12. #32
    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
    Voilà. J'ai venu, j'ai vu, j'ai compru...
    J'ai ajouté un bouton validation dans l'urform. Avec la scrollbar, ça devient tout de suite + compliqué (mais c'est faisable )
    Le code du bouton Valider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub ValiderLaLigne_Click()
    Dim i As Integer, NoLigne As Long
        NoLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
        For i = 1 To 19
            If UserForm1.Controls("Combobox" & i).ListIndex <> -1 Then
                Cells(NoLigne, i) = UserForm1.Controls("Combobox" & i).List(UserForm1.Controls("Combobox" & i).ListIndex)
            End If
        Next
     
    End Sub
    Ce bouton enregistre les données de tous les combos dont l'un des éléments a été sélectionné.
    Il fait ça dans la seule feuille que comporte le fichier.
    Tu dis

    PS - A l'avenir, peux-tu zipper ton fichier et le mettre sur le forum ?
    Le fichier s'ouvre via internet. Pour le modifier, j'ai été obligé de copier l'userform, puis la feuille que je ne voyais pas Excel, puis puis puis...
    Merci pour nous

  13. #33
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Par défaut Adaptation avec des listbox
    Slt,

    Merci pour ta reponse

    J'ai bien rajouter le bouton validation.
    Part contre, j'ai pas bien compris si tu avais gardé le scrollbar.
    Alors j'ai tester deux choses :
    1°) sans scrollbar . Il me remplit la ligne 3 ald de commencer en 2 .
    Et le bouton effacer et supprimer du coup ne sont plus utilisable car je choissit la ligne à effacer ou supprimer par le scrollbar.
    2°) avec scrollbar et en supprimant la partie copie sur la ligne selectionner ( je crois si j'ai bien sélectionner la bonne partie du code )
    Et la c'est la panique, Lorsque je lance l'usr si je pointe sur ligne 7 et je me positionne sur ligne 2 avec le scrollbar. Je valide mes selections pour remplir ligne 2 et la suprise est la suivant il me copie en ligne 7.

    Je ne comprends pas trop ce que tu as améliorer ...
    Peux tu me renvoyer ton fichier test.

    Merci

  14. #34
    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
    Non, tout ce que tu observes est normal. Mais c'est là que ça devient plus compliqué (beaucoup plus à expliquer qu'à faire...)
    Le N° de ligne : Mon code donne la dernière ligne renseignée + 1. Je parle de cette ligne
    NoLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
    Malheureusement, si tu supprimes une ligne, il persiste à donner le même N° de dernière ligne tant que le fichier n'est pas enregistré.
    L'avantage : Si tu as des ligne vides ou des cellules vides dans ta plage de données, il persiste à donner toute la plage.
    Si, dans une colonne, tu es certain que toutes les cellules seront remplies, tu peux utiliser un autre code. Par exemple, si les cellules de la colonne A sont renseignées jusque sur la dernière ligne de ta plage de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        DerniereLigne = Range("A65535").End(xlUp).Row
    Si ce n'est pas le cas, tu vas devoir faire une boucle sur les 19 colonnes de ta plage pour trouver la dernière ligne renseignée. Un truc comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub ChercherDerniereLigne
    Dim NoDerniereLigne as long
    Dim i as integer, AvecColonne as variant
    Dim NoCol as integer
    NoDerniereLigne = 1
    For NoCol = 1 to 19
         AvecColonne = Cells(65536, NoCol).Address
         if NoDerniereLigne < Range(AvecColonne).End(xlUp).Row then _
             NoDerniereLigne = Range(AvecColonne).End(xlUp).Row
         endif
    Next
    End sub
    La valeur max de scrollbar = NoDerniereLigne +2
    Cette syntaxe t'évite d'avoir à enregistrer le fichier à chaque suppression de ligne.

    Le scrollbar, justement... : Pour afficher la ligne courante, tu ne peux le faire que dans la ligne d'entête de tes combos
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBoxn.value = Cells(NoLigne,NoColonne)
    Jamais fait, donc à tester.
    Pour remplir toutes ces entêtes, une boucle voisine du dernier code que je t'ai mis pour la validation.
    Pas d'index pour le relire mais simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaDonnée = ComboBoxn.value
    L'effacement dépendra du résultat de ce que donnent les tests ci-dessus.
    Sans filet, ça devrait donner un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Lecture()
    Dim i As Integer, NoLigne As Long
    NoLigne = Me.ScrollBar.value
        For i = 1 To 19
                Me.Controls("Combobox" & i).Value = Cells(NoLigne, i).value 
        Next
    End sub
    Tu essaies de débrouiller tout ça et tu dis.
    A+

  15. #35
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Par défaut [VBA-E] Adaptation avec des listbox et combobox
    Bonjour,

    Merci pour tes explications.
    Je testerais tout cela quand j'aurais un peu plus de temps en fin de semaine ou ce week-end.

    Si à partir de ce que tu m'as expliqué cela n'aboutit pas.

    Il y a peut-etre une autre approche.
    Suppression du scrollbar et demande à l'utilisateur le numéro de ligne à effacer, detruire ou modifier avec selection de celle-ci.
    Il remplit ou modifit avec les valeurs du combo et valide. Je mets une routine pour supprimer les lignes vides . Et le tour est joué.

Discussions similaires

  1. [VBA-E]Simplifier avec des instances
    Par tonton fred dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/05/2007, 11h48
  2. [VBA-E]Problème avec des ToggleButton
    Par dilkas dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/03/2007, 12h15
  3. Réponses: 6
    Dernier message: 20/02/2007, 18h00
  4. [VBA-E] Problème avec des dates !
    Par yaya54 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/03/2006, 14h12

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