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 :

Filtre avancé copie de "doublon"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Par défaut Filtre avancé copie de "doublon"
    Bonjour,

    J'utilise un filtre avancé sous VBA me permettant de recopier un tableau en fonction des tâches attribuées à une personne.

    En entrée je rentre le nom d'une personne X, et en sortie j'obtiens le tableau avec toutes les tâches de la personne X.

    Mon tableau où se trouve toutes les données est composé d'un planning "réel" et de "référence".

    Ce tableau est construit de la façon suivante :

    -------------Personne----------Planning réel : S1---S2---S3----------- Planning de Référence : S1---S2---S3 (sur la même ligne).
    Tâche 1-------- x
    Tâche 2 --------y
    Tâche 3 --------x

    Mon problème est le suivant :


    Lorsque je recopie mon tableau avec le filtre : Personne X, les valeurs de mon planning de référence ne sont pas copiées car les colonnes "S1 S2 S3" sont déjà présentes dans le planning réel. Mon filtre me copie donc deux fois le planning réel, une fois dans la zone "planning réel" et une autre fois dans "planning de référence"

    Pouvez-vous m'aider pour trouver comment faire pour résoudre ce soucis?

    Je vous remercie d'avance.

    Voici le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        If Not Application.Intersect(Target, Worksheets("Liste").Range("a2")) Is Nothing Then ' J'entre ici le nom de la personne qui m'interesse
            If Target.Count > 1 Then Exit Sub
     
            Worksheets("Suivi").Range("a6:be150").AdvancedFilter Action:=xlFilterCopy, _  ' La plage du tableau où se trouve les personnes et données
            CriteriaRange:=Worksheets("Liste").Range("a1:a2"), CopyToRange:=Worksheets("Liste").Range("a6:be150"), Unique:=False ' L'en-tête de mon tableau et la personne puis copie de l'intégralité du tableau correspondant à la personne X
     
            End If
     
    End Sub

  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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si j'ai bien compris, les zones (Critères et exportation) sont sur la même feuille nommée Liste et la zone Data est la plage A6:BE150 de la feuille nommée Suivi.

    Cette ligne de code ci-dessous est curieuse car lorsque l'on utilise Intersect on vérifie une plage de cellules et pas une cellule et le nom de la feuille n'est pas obligatoire dans ce cas ci puisque la procédure fait partie de la feuille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Application.Intersect(Target, Worksheets("Liste").Range("a2")) Is Nothing Then
    Une autre partie du code n'est pas correcte, celle qui fait référence à la zone d'exportation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CopyToRange:=Worksheets("Liste").Range("a6:be150")
    En effet, il faut faire référence à une cellule vide si on veut tout copier ou faire référence à des cellules de la même ligne si on ne souhaite copier que certaines colonnes.
    Il n'y a pas de message d'erreur mais c'est préférable de fonctionner ainsi.

    A part cela, je ne vois pas vraiment quel est le problème et je ne comprends pas ton explication.
    Lorsque je recopie mon tableau avec le filtre : Personne X, les valeurs de mon planning de référence ne sont pas copiées car les colonnes "S1 S2 S3" sont déjà présentes dans le planning réel. Mon filtre me copie donc deux fois le planning réel, une fois dans la zone "planning réel" et une autre fois dans "planning de référence"
    Le filtre élaboré ne peut pas copier deux fois. Il peut juste écraser les données de la zone d'exportation précédentes.
    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 du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Par défaut
    Bonjour Philippe,

    Tu as bien compris comment est structuré mon document. Merci pour la première correction, je ne savais pas que "Worksheets" n'était pas nécessaire dans ce cas là.

    Pour le deuxième commentaire, j'indiquerai une ligne entiere dans ce cas du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CopyToRange:=Worksheets("Liste").Range("a6:be6")
    au lieu de be150 si j'ai bien compris.

    Le problème est le suivant :

    Dans ma feuille de données "Suivi" :
    "Planning Réel" possède la colonne S1 S2 S3 avec des données A B C
    "Planning de Référence" possède aussi des colonnes nommées : S1 S2 S3 avec des données D E F (différentes du planning réel)

    Et lorsque j'applique mon filtre pour exporter les données dans "Liste", il copie les données A B C dans le "Planning de Référence" au lieu de D E F

    Je me retrouve donc avec un tableau où le Planning Réel - S1 S2 S3 = A B C et Planning de Référence - S1 S2 S3 = A B C d'où la copie en "double"

    Vous trouverez ci-joint un exemple de feuille de données et le résultat du filtre où on voit bien l'incohérence.

    Feuille de données Nom : Suivi.JPG
Affichages : 359
Taille : 44,6 Ko

    Après utilisation du filtre Nom : Copie.JPG
Affichages : 397
Taille : 36,4 Ko

  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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans ma feuille de données "Suivi" :
    "Planning Réel" possède la colonne S1 S2 S3 avec des données A B C
    "Planning de Référence" possède aussi des colonnes nommées : S1 S2 S3 avec des données D E F (différentes du planning réel)
    Et lorsque j'applique mon filtre pour exporter les données dans "Liste", il copie les données A B C dans le "Planning de Référence" au lieu de D E F
    Oui, c'est plus clair et cela confirme ce que j'ai dit, le filtre en exportant écrase les données qui s'y trouvaient précédemment.
    Il n'y a pas de solution sauf si tu n'exportes que les colonnes qui se trouvent à gauche des colonnes S1, S2 et [B]S3 mais je ne suis pas convaincu que c'est cela que tu cherches.
    Le but du filtre avancé avec exportation c'est bien de copier les données sources vers une plage cible. On peut exporter l'ensemble des colonnes ou une partie de celles-ci.

    A lire éventuellement 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

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Par défaut
    Merci pour le lien, je vais mener mon enquête à ce sujet.

    La deuxième image correspond bien à l'exportation des données sources de la feuille "Suivi" vers la feuille "Liste" et le problème et qu'il omet de copier les données de la partie "Planning de Référence"

    Je viens de remarquer que si je remplace les valeurs des cellulles contenant "S10 S11 S12" du planning de référence source ("Feuille Suivi", par "R10 R11 R12" là, la copie s'effectue sur la totalité du tableau (mais cette solution ne me convient pas)

    -> On a l'image 1 avec seulement les lignes concernant X

    J'ai l'impression que le filtre omet de copier la partie "planning de référence" car les valeurs correspondant aux semaines,S10 S11 S12, sont les mêmes que celle que le planning réel. Et J'aimerai trouver la parade aha !

    Merci

  6. #6
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai l'impression que le filtre omet de copier la partie "planning de référence" car les valeurs correspondant aux semaines,S10 S11 S12, sont les mêmes que celle que le planning réel. Et J'aimerai trouver la parade aha !
    Il n'oublie rien du tout.
    L'exportation du filtre avancé fait exactement ce que l'on ferait à la main.
    1) Filtrer les données suivant condition
    2) Copier les données visibles
    3) Coller les données à partir d'une cellule de destination.
    Bien entendu en plus pn peut décider quelles colonnes il doit copier.

    La lecture du tutoriel en suivant pas à pas les exemples dissipera bien des malentendus sur la question.
    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

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