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] Ma fonction ne se lance pas quand je clique sur mon bouton


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 172
    Points : 72
    Points
    72
    Par défaut [VBA] Ma fonction ne se lance pas quand je clique sur mon bouton
    Bonjour

    Je dois modifier un fichier VBA d'un de mes collègues.
    Qd je clic sur un bouton, il execute un code et une requete, (je sais pas trop comment)

    Voila le code du bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton1_Click()
        SelectionDonnees
    
        Range("C12").Select
        Selection.QueryTable.Refresh BackgroundQuery:=False
    End Sub
    Peut importe ou je mets ma fonction "SelectionDonnees" elle ne s'execute pas
    Comment faire pour qu elle s execute correctement ?

    Cordialement


    ps : je précise que ce n'est pas un bouton auquel je peux associé une macro

  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
    Points : 15 543
    Points
    15 543
    Par défaut
    Une fonction fournit un résultat. Donc déjà, l'appel devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result = SelectionDonnees
    si tu n'as pas de bug, ce n'est pas une fonction...
    Peux-tu nous montrer ça ?
    A+

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 172
    Points : 72
    Points
    72
    Par défaut
    Euh en fait quand je parle de fonction jvoulais parler de procedure.
    Si je mets ton truc ça bug.

    Ma procedure ne renvoi rien, elle effectue juste un traitement de certaines données et les affiche.

    J ai creer un autre bouton, auquel j ai associé la macro (procedure) "SelectionDonnees" et là ça marche nikel.
    Mais mon boss veut que ça le fasse quand j'appuye sur l autre bouton...

    une idee ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Quel est le code dans cette procédure ? Que fait-elle ?

    Starec

  5. #5
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 172
    Points : 72
    Points
    72
    Par défaut
    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    Sub SelectionDonnees()
    
        nomPage = "Appro automatisé"
        LigneSource = 3
        LigneDest = 77
        
        ' Indice de la ligne de la source des données
        i = 0
        ' Indice de la ligne de la destination des données
        j = 0
        
        If (Feuil1.Cells(LigneDest, 4) <> "") Then
            SuppressionLigne
        End If
        
        ' Affiche l'unité de nomenclature dans la zone
        colonne_E = Feuil3.Cells(LigneSource, 5)
        colonne_F = Feuil3.Cells(LigneSource, 6)
        Feuil1.Cells(LigneDest - 3, 4) = colonne_E
        Feuil1.Cells(LigneDest - 3, 5) = colonne_F
        
        ' On parcourt le tableau de la feuille 3 ligne par ligne depuis la 3eme ligne,
        ' tant que la colonne C n'est pas vide
        While (Feuil3.Cells(LigneSource + i, 3) <> "")
            ' Auquel cas on va copier, cellule par cellule, les données qui nous interessent
            ' On copie les données avec un code article égale à celui de la case K7
            If (Feuil3.Cells(LigneSource + i, 3) = Feuil1.Cells(7, 11)) Then 
            
                colonne_H = Feuil3.Cells(LigneSource + i, 8)
                colonne_I = Feuil3.Cells(LigneSource + i, 9)
                colonne_J = Feuil3.Cells(LigneSource + i, 10)
                colonne_K = Feuil3.Cells(LigneSource + i, 11)
                colonne_M = Feuil3.Cells(LigneSource + i, 13)
                colonne_N = Feuil3.Cells(LigneSource + i, 14)
                colonne_O = Feuil3.Cells(LigneSource + i, 15)
                                   
                ' Fusionne les colonnes EFGH et LM des lignes
                With Worksheets(nomPage)
                    .Range(.Cells(LigneDest + j, 5), .Cells(LigneDest + j, 8)).Merge
                    .Range(.Cells(LigneDest + j, 12), .Cells(LigneDest + j, 13)).Merge
                End With
                
                Feuil1.Cells(LigneDest + j, 4) = colonne_H
                
                With Worksheets(nomPage)
                    With .Range(.Cells(LigneDest + j, 5), .Cells(LigneDest + j, 8))
                        .Font.Name = "Arial"
                        .Font.Size = 10
                        .HorizontalAlignment = xlHAlignLeft
                        .VerticalAlignment = xlVAlignTop
                        .Value = colonne_I
                        .WrapText = True
                    End With
                End With
                
                Feuil1.Cells(LigneDest + j, 9) = colonne_J
                Feuil1.Cells(LigneDest + j, 10) = colonne_K
                
                Feuil1.Cells(LigneDest + j, 11) = colonne_M
                Feuil1.Cells(LigneDest + j, 11).HorizontalAlignment = xlHAlignCenter
                
                With Worksheets(nomPage)
                    With .Range(.Cells(LigneDest + j, 12), .Cells(LigneDest + j, 13))
                        .Font.Name = "Arial"
                        .Font.Size = 10
                        .HorizontalAlignment = xlHAlignCenter
                        .VerticalAlignment = xlVAlignTop
                        .Value = colonne_N
                    End With
                End With
                
                Feuil1.Cells(LigneDest + j, 14) = colonne_O
                Feuil1.Cells(LigneDest + j, 14).HorizontalAlignment = xlHAlignCenter
            
                j = j + 1
                
                ' Dessine des lignes horizontales fines dans le tableau
                With Worksheets(nomPage)
                    With .Range(.Cells(LigneDest + j - 1, 4), .Cells(LigneDest + j - 1, 14)).Borders
                        .Item(xlEdgeBottom).Weight = xlThin
                    End With
                End With
                
            End If
            
            i = i + 1
        Wend
        
        ' Dessine le contour et l'interieur du tableau
        With Worksheets(nomPage)
            With .Range(.Cells(LigneDest, 4), .Cells(LigneDest + j - 1, 14)).Borders
                .Item(xlEdgeBottom).Weight = xlMedium
                .Item(xlEdgeLeft).Weight = xlMedium
                .Item(xlEdgeRight).Weight = xlMedium
            End With
        End With
        
        ' Dessine des lignes intérieures verticales fines dans le tableau
        Dim objWorksheet As Worksheet, objRange As Range
        Set objWorksheet = ThisWorkbook.ActiveSheet
        Set objRange = objWorksheet.Range(objWorksheet.Cells(LigneDest, 4), objWorksheet.Cells(LigneDest + j - 1, 14))
        With objRange.Borders
            With .Item(xlInsideVertical)
                .LineStyle = xlContinuous
                .Weight = xlThin
            End With
        End With
        
        Feuil1.Cells(74, 12) = j
    
    End Sub
    En gros cette procedure va chercher des donnees dans une page et les rapatries dans une autre.

  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
    Points : 15 543
    Points
    15 543
    Par défaut
    Où prends-tu "l'autre bouton" ? Dans la "barre d'outils contrôles" ou dans la "barre d'outils formulaires" ? Si c'est dans Formulaire, tu fais un clic droit sur le bouton et tu affectes ta macro.
    Mais si c'est ça, dit à ton prof que c'est dépassé, que cette barre d'outils n'est là que pour une question de compatibilité avec les anciennes applis et que donc, on ne doit pas l'utiliser dans une nouvelle et que donc "y t'fait faire de âneries"
    Bon après-midi

  7. #7
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 172
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Où prends-tu "l'autre bouton" ? Dans la "barre d'outils contrôles" ou dans la "barre d'outils formulaires" ? Si c'est dans Formulaire, tu fais un clic droit sur le bouton et tu affectes ta macro.
    Mais si c'est ça, dit à ton prof que c'est dépassé, que cette barre d'outils n'est là que pour une question de compatibilité avec les anciennes applis et que donc, on ne doit pas l'utiliser dans une nouvelle et que donc "y t'fait faire de âneries"
    Bon après-midi
    Le 1er bouton est effectivement un bouton de "la barre d'outils controles". C est pourquoi je ne peux pas inserer de macro (enfin je pense si j ai bien compris)
    Quand je clique dessus une popup s affiche et je dois saisir un certain code pour recupérer des donnees d un tableau.

    Par contre pour l autre, comme je ne sais pas ou le trouver, je fais des copié/collé entre mes fichiers excel (lol) puis choisi la bonne macro.

    Je suis obligé de me servir du 1er bouton, comment faire pour que le bouton execute ma procedure corectement ?

  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
    Points : 15 543
    Points
    15 543
    Par défaut
    Sans la macro...
    Place-la tout de même dans un module standard

    PS - tu n'indiques rien de ce qu'il se passe, s'il y a une erreur, sur quelle ligne ?
    Sois plus précis

  9. #9
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 172
    Points : 72
    Points
    72
    Par défaut
    Bon en fait on s est debrouillé comme on a pu. On a gardé les 2 boutons.
    Le 1er recupere les donnees d'un tableau, et l autre en fonction des donnees recuperées précédement, recupere des donnees dans un autre tableau.

    Merci bien et a bientot

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/04/2015, 18h22
  2. Réponses: 5
    Dernier message: 09/02/2013, 23h05
  3. [DOM]Appeler une fonction quand on clique sur un bouton radio
    Par beegees dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/12/2011, 18h50
  4. Réponses: 1
    Dernier message: 08/12/2010, 21h47

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