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 :

code VBA dans un classeur excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 16
    Points
    16
    Par défaut code VBA dans un classeur excel
    Bonjour,

    dans le classeur excel joint il y a une zone de texte comprenant les conditions particulières au bon fonctionnement d'un bouton de commande qui, lorsqu'il est activé doit permettre la réactualisation d'une feuille excel.

    Mes compétences du langage VBA étant limitées, je fais appel aux experts de ce forum.

    Comme j'essaie de comprendre par l'exemple les diverses parties du code VBA, merci de bien vouloir assortir le code d'explications succinctes lesquelles me serviront ultérieurement.
    Bien qu'utilisant la version 2010 d'excel, le fichier joint est au format xls (97-2003).


    Je compte sur vous...

    cordialement


    totogabi

    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    A mettre dans un module standard. Pour le critère de filtrage, comme tu n'es pas trop précis, j'ai mis un InputBox afin de permettre une sélection du critère dans une cellule. A adapter :
    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
     
    Sub Filtrer()
     
        Dim Fe As Worksheet
        Dim Plage As Range
        Dim Cel As Range
        Dim Colonne As Integer
        Dim Critere As String
        Dim I As Integer
        Dim J As Integer
        Dim K As Integer
     
        'demande le critère par sélection d'une cellule
        On Error Resume Next 'évite l'erreur du bouton Annuler
        Set Cel = Application.InputBox("Sélectionnez une cellule pour le filtrage !", "Choix.", , , , , , 8)
     
        'si pas de sélection, fin
        If Cel Is Nothing Then Exit Sub
     
        'si plus d'une cellule, fin
        If Cel.Cells.Count > 1 Then Exit Sub
     
        'défini le critère de filtrage et le numéro de la colonne sur laquelle apliquer le filtre
        Critere = Cel.Value
        Colonne = Cel.Column
     
        'affecte la feuille "Saisie" à la variable
        Set Fe = Worksheets("Saisie")
     
        'défini la plage pour le filtrage
        With Fe
     
            Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 7).End(xlUp))
     
        End With
     
        'gèle la mise à jour de l'écran
        Application.ScreenUpdating = False
     
     
        With Worksheets("Formulaire")
     
            'vide les cellules de leurs contenu
            .Range("C11:W22").ClearContents
     
            'défusionne la plage
            .Range("J6:Q6").UnMerge
     
            'vide le contenu
            .Range("J6").ClearContents
     
            'refusionne
            .Range("J6:Q6").Merge '<-- il faut autant que possible éviter les fusions si ce n'est pas absolument nécessaire !!!
     
        End With
     
        'pour commencer à la bonne ligne
        J = 10
     
        'applique le filtre
        Plage.AutoFilter Colonne, Critere
     
        'parcour la plage filtrée à la recherche des lignes visibles
        For I = 2 To Plage.Rows.Count
     
            If Plage.Rows(I).EntireRow.Hidden = False Then
     
                'incrémente pour inscrire
                J = J + 1
     
                'évite de copier pour ne pas embarquer le formatage
                With Worksheets("Formulaire")
     
                    'si la date n'a pas encore été entrée
                    If .Range("J6") = "" Then .Range("J6") = Fe.Range("C" & I)
     
                    .Range("C" & J) = Fe.Range("E" & I)
                    .Range("D" & J) = Fe.Range("F" & I)
                    .Range("E" & J) = Fe.Range("G" & I)
     
                    .Range("G" & J) = Fe.Range("I" & I)
                    .Range("H" & J) = Fe.Range("J" & I)
                    .Range("I" & J) = Fe.Range("K" & I)
                    .Range("J" & J) = Fe.Range("L" & I)
                    .Range("K" & J) = Fe.Range("M" & I)
     
                    .Range("M" & J) = Fe.Range("O" & I)
                    .Range("N" & J) = Fe.Range("P" & I)
                    .Range("O" & J) = Fe.Range("Q" & I)
                    .Range("P" & J) = Fe.Range("R" & I)
                    .Range("Q" & J) = Fe.Range("S" & I)
     
                    .Range("S" & J) = Fe.Range("U" & I)
                    .Range("T" & J) = Fe.Range("V" & I)
                    .Range("U" & J) = Fe.Range("W" & I)
                    .Range("V" & J) = Fe.Range("X" & I)
                    .Range("W" & J) = Fe.Range("Y" & I)
     
                End With
            End If
     
        Next I
     
        'supprime le filtrage
        Plage.AutoFilter
     
        'rafraîchi l'écran
        Application.ScreenUpdating = True
     
    End Sub
    Hervé.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 16
    Points
    16
    Par défaut code VBA dans un classeur excel
    Merci à toi Theze,

    les commentaires assortis au code VBA me permettent de comprendre un peu plus l'exécution du programme.

    cordialement


    totogabi



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

Discussions similaires

  1. Protéger le code vba de plusieurs classeurs Excel par mot de passe
    Par Thierry_67 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/03/2015, 00h43
  2. [Toutes versions] Protéger le code vba de plusieurs classeurs Excel par mot de passe
    Par BAPOULA dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/10/2014, 14h16
  3. Protéger le code vba de plusieurs classeurs Excel par mot de passe
    Par BAPOULA dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/10/2014, 11h34
  4. Insérer un seul code vba dans plusieurs classeurs férmés
    Par jakoubi dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/02/2013, 23h35
  5. Exporter un tableau VBA dans le classeur Excel
    Par dexterchief dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2011, 18h23

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