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 :

Utiliser la procedure ComboBox_Change() comme Public


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur en démantèlement nucléaire
    Inscrit en
    Septembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur en démantèlement nucléaire

    Informations forums :
    Inscription : Septembre 2016
    Messages : 4
    Par défaut Utiliser la procedure ComboBox_Change() comme Public
    Bonjour,

    Je suis en train de m’arracher les cheveux (ceux qu'ils me restent) sur un problème relativement simple je pense...

    Environnement :
    Dans une Userform que j'ai créée, une ComboBox permet la selection de différent items ranger dans une feuille Excel et affiche ces éléments dans une listbox multicolonne sur la même userform.

    Objectif :
    Afin d'éviter de reboucler une nouvelle fois dans la feuille excel, je souhaite sauvegarder les numéros de lignes de la feuille excel correspondant à l'affichage de la ListBox dans un tableau Public (Réutilisé a un autre endroit de la userform)

    Mon Problème :
    Je ne peux pas déclarer la procédure comboBox_Change() comme public et donc récupérer mes valeurs du tableau
    J'ai essayer de bidouiller plusieurs solutions qui ont échouées et je suis à cours d'idée...
    Qq1 peut il m'aider svp

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    dans un module standard!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test(Msg As Object)
    MsgBox Msg
    End Sub
    dans ton UserForm!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub comboBox_Change()
     test Me.ComboBox
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur en démantèlement nucléaire
    Inscrit en
    Septembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur en démantèlement nucléaire

    Informations forums :
    Inscription : Septembre 2016
    Messages : 4
    Par défaut
    Bonjour,

    Je n'ai pas bien compris ta réponse...

    Voici mon code pour aider à la compréhension

    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
    Public Sub Nom_TRAV_ComboBox_Change()
    Dim k%, derl%, cnomTRAV%, cnomTUY%, Ccouloir%, Catelier%, l%, i%
     
        derl = NombreDeLignes("Inventaire_TUY_TRAV")
        cnomTRAV = ChercheColonne("Inventaire_TUY_TRAV", "Nom TRAV")
        cnomTUY = ChercheColonne("Inventaire_TUY_TRAV", "Nom TUY")
        Ccouloir = ChercheColonne("Inventaire_TUY_TRAV", "Capsage TUY Couloir")
        Catelier = ChercheColonne("Inventaire_TUY_TRAV", "Capsage TUY Atelier")
        l = 0
        With Rempl_Inv_TUY_TRAV
            .TUY_TRAV_ListBox.Clear
                For k = 2 To derl
                    If Worksheets("Inventaire_TUY_TRAV").Cells(k, cnomTRAV) = .Nom_TRAV_ComboBox Then
     
                        'Je créé un tableau dynamique dans lequel je range mes numéros de lignes
                        ReDim Tabligne(i)
                        Tabligne(i) = k
                        i = i + 1
     
                        With .TUY_TRAV_ListBox
                            .ColumnCount = 3
                            .AddItem
                            .List(l, 0) = Worksheets("Inventaire_TUY_TRAV").Cells(k, Ccouloir).Value
                            .List(l, 1) = Worksheets("Inventaire_TUY_TRAV").Cells(k, cnomTUY).Value
                            .List(l, 2) = Worksheets("Inventaire_TUY_TRAV").Cells(k, Catelier).Value
                            l = l + 1
                        End With
                    End If
                Next
        End With
     
    Public Sub Enregistrer_TRAV_CommandButton_Click()
    Dim kmax%, k%, derl%, Cdat%, cnomTRAV%, czi%, cnomTUY%, Ccouloir%, Catelier%, i%, j%
     
        kmax = Rempl_Inv_TUY_TRAV.TUY_TRAV_ListBox.ListCount
        derl = NombreDeLignes("Inventaire_TUY_TRAV") + 1
        Cdat = ChercheColonne("Inventaire_TUY_TRAV", "Date Inventaire")
        cnomTRAV = ChercheColonne("Inventaire_TUY_TRAV", "Nom TRAV")
        czi = ChercheColonne("Inventaire_TUY_TRAV", "ZI")
        cnomTUY = ChercheColonne("Inventaire_TUY_TRAV", "Nom TUY")
        Ccouloir = ChercheColonne("Inventaire_TUY_TRAV", "Capsage TUY Couloir")
        Catelier = ChercheColonne("Inventaire_TUY_TRAV", "Capsage TUY Atelier")
     
        With Worksheets("Inventaire_TUY_TRAV")
            'lorsque je rappel le tableau il se trouve vide
            For i = 0 To UBound(Tabligne)
                j = Tabligne(i)
                .Cells(j, 1).EntireRow.Delete
            Next i
     
            If kmax <> 0 Then
                For k = 0 To kmax - 1
                    .Cells(derl + k, czi) = Rempl_Inv_TUY_TRAV.ZI_TUY_TRAV_ComboBox
                    .Cells(derl + k, cnomTRAV) = Rempl_Inv_TUY_TRAV.Nom_TRAV_ComboBox
                    .Cells(derl + k, Ccouloir) = Rempl_Inv_TUY_TRAV.TUY_TRAV_ListBox.List(k, 0)
                    .Cells(derl + k, cnomTUY) = Rempl_Inv_TUY_TRAV.TUY_TRAV_ListBox.List(k, 1)
                    .Cells(derl + k, Catelier) = Rempl_Inv_TUY_TRAV.TUY_TRAV_ListBox.List(k, 2)
                    .Cells(derl + k, Cdat) = Now
                Next
            End If
        End With
     
        Unload Rempl_Inv_TUY_TRAV
    End Sub
    MErci d'avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    les propriété et méthode des contrôle sont parfois définie comme privé comme l’événement change!

    c'est le développeur du contrôle même qui l'a défini comme ça et tu ne pourras pas changer ça!

    en revanche tu peux Quand l’événement se produit appeler ta propre méthode en lui passant en paramètres des élément du UserForm et ainsi le retravailler aussi sursemant que si l’événement avait été défini comme publique!

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur en démantèlement nucléaire
    Inscrit en
    Septembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur en démantèlement nucléaire

    Informations forums :
    Inscription : Septembre 2016
    Messages : 4
    Par défaut
    ok je comprend la logique

    J'avais déjà essayé une solution dans ce genre la en créant une Public Sub appelée lors de l’événement : ComboBox_change() mais ca n'avait pas fonctionné.

    C'est peut être par ce que l'autre Procédure dans laquelle j'utilise ma public variable tableau est aussi privée...?

    Je suis débutant en vba qu'est ce qu'une méthode et comment la créé t on?

  6. #6
    Expert éminent
    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
    Par défaut



    Bonjour !



  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur en démantèlement nucléaire
    Inscrit en
    Septembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur en démantèlement nucléaire

    Informations forums :
    Inscription : Septembre 2016
    Messages : 4
    Par défaut
    Citation Envoyé par Marc-L Voir le message



    Bonjour !


    OK je suis nouveau désolé

    Code premiere partie création de la variable public

    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
     
    Public Sub Nom_TRAV_ComboBox_Change()
    Dim k%, derl%, cnomTRAV%, cnomTUY%, Ccouloir%, Catelier%, l%, i%
     
        derl = NombreDeLignes("Inventaire_TUY_TRAV")
        cnomTRAV = ChercheColonne("Inventaire_TUY_TRAV", "Nom TRAV")
        cnomTUY = ChercheColonne("Inventaire_TUY_TRAV", "Nom TUY")
        Ccouloir = ChercheColonne("Inventaire_TUY_TRAV", "Capsage TUY Couloir")
        Catelier = ChercheColonne("Inventaire_TUY_TRAV", "Capsage TUY Atelier")
        l = 0
        With Rempl_Inv_TUY_TRAV
            .TUY_TRAV_ListBox.Clear
                For k = 2 To derl
                    If Worksheets("Inventaire_TUY_TRAV").Cells(k, cnomTRAV) = .Nom_TRAV_ComboBox Then
     
                        'Je créé un tableau dynamique dans lequel je range mes numéros de lignes
                        ReDim Tabligne(i)
                        Tabligne(i) = k
                        i = i + 1
     
                        With .TUY_TRAV_ListBox
                            .ColumnCount = 3
                            .AddItem
                            .List(l, 0) = Worksheets("Inventaire_TUY_TRAV").Cells(k, Ccouloir).Value
                            .List(l, 1) = Worksheets("Inventaire_TUY_TRAV").Cells(k, cnomTUY).Value
                            .List(l, 2) = Worksheets("Inventaire_TUY_TRAV").Cells(k, Catelier).Value
                            l = l + 1
                        End With
                    End If
                Next
        End With
    End Sub
    Code deuxieme partie utilisation del a variable public

    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
     
    Public Sub Enregistrer_TRAV_CommandButton_Click()
    Dim kmax%, k%, derl%, Cdat%, cnomTRAV%, czi%, cnomTUY%, Ccouloir%, Catelier%, i%, j%
     
        kmax = Rempl_Inv_TUY_TRAV.TUY_TRAV_ListBox.ListCount
        derl = NombreDeLignes("Inventaire_TUY_TRAV") + 1
        Cdat = ChercheColonne("Inventaire_TUY_TRAV", "Date Inventaire")
        cnomTRAV = ChercheColonne("Inventaire_TUY_TRAV", "Nom TRAV")
        czi = ChercheColonne("Inventaire_TUY_TRAV", "ZI")
        cnomTUY = ChercheColonne("Inventaire_TUY_TRAV", "Nom TUY")
        Ccouloir = ChercheColonne("Inventaire_TUY_TRAV", "Capsage TUY Couloir")
        Catelier = ChercheColonne("Inventaire_TUY_TRAV", "Capsage TUY Atelier")
     
        With Worksheets("Inventaire_TUY_TRAV")
            'lorsque je rappel le tableau il se trouve vide
            For i = 0 To UBound(Tabligne)
                j = Tabligne(i)
                .Cells(j, 1).EntireRow.Delete
            Next i
     
            If kmax <> 0 Then
                For k = 0 To kmax - 1
                    .Cells(derl + k, czi) = Rempl_Inv_TUY_TRAV.ZI_TUY_TRAV_ComboBox
                    .Cells(derl + k, cnomTRAV) = Rempl_Inv_TUY_TRAV.Nom_TRAV_ComboBox
                    .Cells(derl + k, Ccouloir) = Rempl_Inv_TUY_TRAV.TUY_TRAV_ListBox.List(k, 0)
                    .Cells(derl + k, cnomTUY) = Rempl_Inv_TUY_TRAV.TUY_TRAV_ListBox.List(k, 1)
                    .Cells(derl + k, Catelier) = Rempl_Inv_TUY_TRAV.TUY_TRAV_ListBox.List(k, 2)
                    .Cells(derl + k, Cdat) = Now
                Next
            End If
        End With
     
        Unload Rempl_Inv_TUY_TRAV
    End Sub

  8. #8
    Invité
    Invité(e)
    Par défaut
    tue peux définir des viable public dans ton UseForm! mais tu ne peux pas y avoir accès comme ça il faut décliner arborescence de ta variable {UserForm.VartavleTableau}.

    en revanche comme pour l’exemple de la sub test plus haut, tu peux déclarer tes variable publique dans un module standard, de ce fait yu y accède de n’importe où y compris de on UserForm.

Discussions similaires

  1. Utiliser une clef USB comme de la ram de mémoire vive
    Par Lorponos dans le forum Composants
    Réponses: 28
    Dernier message: 18/08/2006, 19h32
  2. [VB.NET][Automation Word]utiliser un document word comme un report
    Par kinganasius dans le forum Windows Forms
    Réponses: 10
    Dernier message: 01/06/2006, 12h38
  3. Réponses: 2
    Dernier message: 14/05/2006, 20h36
  4. [VB.NET][Excel] utiliser des fonction Excel comme xlToRight
    Par Alexj51 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/03/2006, 13h10
  5. [Nero] Utiliser un CD-RW comme une clef USB
    Par Furius dans le forum Périphériques
    Réponses: 6
    Dernier message: 24/10/2005, 18h22

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