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 :

Coller des cellules filtrées a partir d'une cellule [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 20
    Par défaut Coller des cellules filtrées a partir d'une cellule
    Bonjour à tous,

    Etant débutant dans la programmation VBA j'ai des difficultés pour développer un fichier permettant a partir de la cellule "S4" de la feuille "Inducateur_Qualite" de :
    - Filtrer dans la colonne "G" de la feuille "Table" toute les lignes correspondant à mon critère de recherche (cellule "S4" de la feuille "Inducateur_Qualite")
    - Copier les colonnes filtrées G, E et H de la feuille "Table"
    - Coller les valeurs correspondantes dans la première cellule vide du tableau dans la feuille "Indicateur_Qualite"

    J'ai réalisé de nombreuses recherches pour développer ces fonctions mais sans succès.

    Cous pourrez trouver ci-joint le fichier Excel.

    Merci par avance de l'aide que vous pourrez m'apporter

    Cordialement,
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu veux exporter des données vers une autre feuille suivant des critères, je te conseille l'utilisation des filtres élaborés d'excel.
    A lire Les filtres avancés ou élaborés dans Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 20
    Par défaut
    Bonjour,

    J'ai bien identifié que je pouvais utiliser l'approche des filtres élaborés toutefois j'ai du mal à la mettre en œuvre avec VBA malgré l'utilisation de l'outil enregistrement de macro.
    En effet, j'arrive à faire mon filtre mais j'ai quelques difficultés pour copier dans ma feuille "indicateur qualité"

    Cordialement,

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    D'où le lien que je t'ai référencé et que je te conseille de lire. Il y a un fichier à télécharger avec exemple en VBA
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 20
    Par défaut
    Bonjour,

    Je travail dessus en essayant de comprendre le fonctionnement.

    Cordialement,

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour g.dupin.gemma,

    Il me semble que l'éditeur de macro est très approprié dans ton cas. As-tu essayé ?

    Cordialement,
    Kimy

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Voici un exemple commenté. Je n'ai copié que la colonne G; à toi de compléter.

    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
    Sub Copie()
        Dim Plage As Range, Sh As Worksheet, Ligne As Long
        Set Sh = Sheets("Indicateur_Qualite")
        With Sheets("Table")
            'définition de la plage source
            Set Plage = .Range(.[A3], .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 64)
            .AutoFilterMode = False
            'filtre sur la colonne G
            Plage.AutoFilter 7, Sh.[S4]
            'élimination de la ligne des entêtes
            Set Plage = Plage.Offset(1).Resize(Plage.Rows.Count - 1)
            's'il; y a des lignes filtrées
            If Application.Subtotal(103, Plage) > 0 Then
                ' détermination de la ligne où écrire
                Ligne = Sh.Cells(Rows.Count, 1).End(xlUp).Row + 1
                If Ligne < 5 Then Ligne = 5
                'sélection de la colonne G
                Set Plage = Plage.Resize(, 1).Offset(, 6)
                Plage.Copy
                Sh.Cells(Ligne, 1).PasteSpecial xlPasteValues
                'sélection de la colonne E
            End If
            .AutoFilterMode = False
        End With
    End Sub

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 20
    Par défaut
    Merci beaucoup, je vais poursuivre le développement avec ces données.

    Toutefois quand j'applique le code pour les autres colonnes :

    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
     
     
    Sub Copie()
        Dim Plage As Range, Sh As Worksheet, Ligne As Long
        Set Sh = Sheets("Indicateur_Qualite")
        With Sheets("Table")
            'définition de la plage source
            Set Plage = .Range(.[A3], .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 64)
            .AutoFilterMode = False
            'filtre sur la colonne G
            Plage.AutoFilter 7, Sh.[S4]
            'élimination de la ligne des entêtes
            Set Plage = Plage.Offset(1).Resize(Plage.Rows.Count - 1)
            's'il; y a des lignes filtrées
            If Application.Subtotal(103, Plage) > 0 Then
                ' détermination de la ligne où écrire
                Ligne = Sh.Cells(Rows.Count, 1).End(xlUp).Row + 1
                If Ligne < 5 Then Ligne = 5
                'sélection de la colonne G
                Set Plage = Plage.Resize(, 1).Offset(, 6)
                Plage.Copy
                Sh.Cells(Ligne, 1).PasteSpecial xlPasteValues
                'sélection de la colonne E
                Set Plage = Plage.Resize(, 1).Offset(, 4)
                Plage.Copy
                Sh.Cells(Ligne, 2).PasteSpecial xlPasteValues
                'sélection de la colonne H
                Set Plage = Plage.Resize(, 1).Offset(, 7)
                Plage.Copy
                Sh.Cells(Ligne, 3).PasteSpecial xlPasteValues
                        End If
            .AutoFilterMode = False
        End With
    End Sub
    Mais cela ne me met pas la valeur correspondant, pourriez vous m'indiquer si je retourne bien les valeurs des colonnes correspondantes.

    Merci d'avance,

  9. #9
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    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
    Sub Copie()
        Dim Plage As Range, Sh As Worksheet, Ligne As Long
        Set Sh = Sheets("Indicateur_Qualite")
        With Sheets("Table")
            'définition de la plage source
            Set Plage = .Range(.[A3], .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 64)
            .AutoFilterMode = False
            'filtre sur la colonne G
            Plage.AutoFilter 7, Sh.[S4]
            'élimination de la ligne des entêtes
            Set Plage = Plage.Offset(1).Resize(Plage.Rows.Count - 1)
            's'il n'y a des lignes filtrées
            If Application.Subtotal(103, Plage) > 0 Then
                ' détermination de la ligne où écrire
                Ligne = Sh.Cells(Rows.Count, 1).End(xlUp).Row + 1
                If Ligne < 5 Then Ligne = 5
                'sélection de la colonne G
                Set Plage = Plage.Resize(, 1).Offset(, 6)
                Plage.Copy
                Sh.Cells(Ligne, 1).PasteSpecial xlPasteValues
                'sélection de la colonne E
                Set Plage = Plage.Offset(, -2)
                Plage.Copy
                Sh.Cells(Ligne, 2).PasteSpecial xlPasteValues
                'sélection de la colonne H
                Set Plage = Plage.Offset(, 3)
                Plage.Copy
                Sh.Cells(Ligne, 3).PasteSpecial xlPasteValues
            End If
            .AutoFilterMode = False
        End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Plage.Resize(, 1)
    Réduit la plage à la colonne A.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Plage.Resize(, 1).Offset(, 6)
    décale de 6 par rapport à A (donc G).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Plage.Offset(, -2)
    décale de 2 vers la gauche donc il s'agit de la colonne E.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Plage.Offset(, 3)
    décale de 3 vers la droite donc il s'agit de la colonne H.

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 20
    Par défaut
    Parfait !!! Tout fonctionne je vais voir les étapes suivantes !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/05/2014, 20h58
  2. Coller à partir d'une cellule
    Par cissou21 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/09/2012, 09h10
  3. Réponses: 5
    Dernier message: 30/06/2009, 09h04
  4. Réponses: 3
    Dernier message: 16/10/2007, 16h25
  5. Ouvrir fichier a partir d'une cellule
    Par drikse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/08/2006, 14h56

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