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 :

Copier le résulta d'un filtre vers un tableau


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut Copier le résulta d'un filtre vers un tableau
    Bonjour,

    Lorsque j'exécute mon code, toutes les lignes sont copiées dans une variable array "Offres", or je ne veux copier que les lignes résultant du filtre.
    La cellule qui contient la valeur de mon filtre est sur la feuille "Menu" en "B2"
    Les lignes à filtrer sont sur sur la feuille "Offres"

    Peut être avez-vous une solution ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sheets("Offres").Select
      ActiveSheet.Range("A1").Select
      Selection.AutoFilter
        ActiveSheet.Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:= _
            Sheets("Menu").Range("B2")
      With Sheets("Offres").AutoFilter.Range
        ReDim Offres(.Rows.Count, .Columns.Count)
        Offres = .Value
      End With
      Selection.AutoFilter

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Intéresse-toi à SpecialCells(xlCellTypeVisible)

  3. #3
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut
    je n'ai pas de réponse mais je me permet de faire des petites modifications
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    dim xlsheet as worksheet
    set xlsheet = thisworkbook.worksheets("Offres")
    with xlsheet
          .Range("A1").AutoFilter
          .Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:= _
            thisworkbook.worksheet("Menu").Range("B2")
          .worksheet("Offres").AutoFilter.Range
          ReDim Offres(.Rows.Count, .Columns.Count)
          Offres = .Value
     End With
    Pour un peu moins de select avec un specialcell sur le type , tu peux donc selectionner le type de contenu , tu l'utilise avec un range , tu as tt ce qu'il faut sur le site officiel , mais je crois que tu ne peux l'utiliser que sur le type ....

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    dim xlsheet as worksheet
    set xlsheet = thisworkbook.worksheets("Offres")
    with xlsheet
          .Range("A1").AutoFilter
          .Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:= _
            thisworkbook.worksheet("Menu").Range("B2")
          .worksheet("Offres").AutoFilter.Range.SpecialCells(xlCellTypeVisible)
          ReDim Offres(.Rows.Count, .Columns.Count)
          Offres = .Value
     End With
    Serait-ce cela la solution ?

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,
    la plage étant discontinue, tu risques d'avoir des problèmes pour transférer sans boucle tes données dans ton tableau ?
    ça m'interpelle ce point, tu peux nous confirmer ce qu'il en est ?

    si ça coince, je te conseille d'exporter ton résultat dans une feuille, et d'ensuite récupérer les valeurs

    exemple
    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
    Sub Filtre()
    Dim Critere As String ' adapter selon le type de données si besoin
    Dim Sh As Worksheet
    Dim Offres()
     
    Critere = ThisWorkbook.Worksheet("Menu").Range("B2").Value
    Set Sh = ThisWorkbook.Worksheets("Offres")
    Sheets("Feuil4").Cells.Delete ' la feuille de stockage tampon
     
    With Sh
        .AutoFilterMode = False
     
        With .Range("A1")
            .AutoFilter 1, Critere  ',xlFilterValues
        End With
     
        .Range(.Cells(1, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).SpecialCells(xlCellTypeVisible).Copy Sheets("Feuil4").Range("A1")
    End With
     
    Offres = Sheets("Feuil4").UsedRange.Value
    Set Sh = Nothing
    End Sub

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    J'ai une erreur :
    "membre de méthode ou de donnée introuvable"

    J'ai essayé en remplaçant Worksheet par Worksheets, mais j’obtiens la même erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With xlsheet
          .Range("A1").AutoFilter
          .Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:= _
            ThisWorkbook.Worksheets("Menu").Range("B2")
          .Worksheets("Offres").AutoFilter.Range.SpecialCells (xlCellTypeVisible)
          ReDim Offres(.Rows.Count, .Columns.Count)
          Offres = .Value
      End With

  7. #7
    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,

    que veux-tu faire exactement ? (contradiction entre le titre de la discussion et le code initial)
    Quel est le but, la destination ?



    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo



  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    Bonjour Marc,

    Je veux stocker les lignes filtrées de la feuille du classeur Excel "Offres" dans un tableau VBA "Offres" pour pouvoir les manipuler par la suite.

    1 - La valeur du filtre est située sur la feuille "Menu" du classeur Excel,
    2 - Les lignes à filtrer sont situées sur feuille "Offre" du classeur Excel,
    3 - Les lignes résultantes du filtres sont à récupérer dans un tableau VBA "Offres".

    Il me semblait que j'avais été clair, oups, dsl.

  9. #9
    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

    Deux possibilités :

    • la plus facile est d'utiliser un filtre avancé copiant temporairement dans une zone libre d'une feuille le résultat filtré;

    • définir une variable tableau de la taille du nombre de lignes qui seront filtrées via la fonction de feuille de calculs NB.SI

    puis appliquer le filtre et parcourir les Areas de la plage filtrée visible via SpecialCells

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    Tamtam64, dsl je n'arrive pas à exécuter ton code sans ".select"...

    Donc ce qui suit fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sheets("Offres").Select
      ActiveSheet.Range("A1").Select
      Selection.AutoFilter
        ActiveSheet.Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:= _
            Sheets("Menu").Range("B2")
      With Sheets("Offres").AutoFilter.Range.SpecialCells(xlCellTypeVisible)
        ReDim Offres(.Rows.Count, .Columns.Count)
        Offres = .Value
      End With
      Selection.AutoFilter
    Mais uniquement sur les enregistrements contigus, Joe.Levrai : tes doutes étaient fondés ;-)

    Ceci fonctionne, merci Joe.Levrai ;-)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      Set xlsheet = ThisWorkbook.Worksheets("Offres")
      Sheets("Temp").Cells.Delete
      With xlsheet
        .AutoFilterMode = False
        With .Range("A1")
            .AutoFilter 1, Critere
        End With
        .Range(.Cells(1, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).SpecialCells(xlCellTypeVisible).Copy Sheets("Temp").Range("A1")
      End With
      Offres = Sheets("Temp").UsedRange.Value
      Set xlsheet = Nothing

  11. #11
    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





    Les lignes n° 3 à 9 peuvent être remplacées par une seule ligne de code via un filtre avancé …


  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    Merci Marc,

    Comment ?

  13. #13
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par BrunoB2 Voir le message
    Merci Marc,

    Comment ?
    Cliques sur le lien qu'il te donne au #9.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Set xlsheet = ThisWorkbook.Worksheets("Offres")
      Sheets("Temp").Cells.Delete
      Range("A1").CurrentRegion.AdvancedFilter _
             Action:=xlFilterCopy, _
             CriteriaRange:=Critere, _
             CopyToRange:=Sheets("Temp").Range("A1"), _
             Unique:=False

  15. #15
    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




    Ta variable Critere doit représenter la plage verticale de deux cellules (exemple Range("Menu!B1:B2"))

    contenant soit le titre de la colonne et le critère soit un critère calculé (cf l'excellentissime tutoriel) …

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    Ok, merci beaucoup, je teste et je vous tient informés ;-)

Discussions similaires

  1. [XL-2007] Copier des lignes d'une plage vers un tableau
    Par Excel_man dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 31/03/2013, 04h40
  2. copier le contenu d'un text vers un tableau
    Par brahim999 dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/06/2006, 18h40
  3. Réponses: 12
    Dernier message: 22/02/2006, 16h28
  4. Réponses: 1
    Dernier message: 21/01/2006, 15h45
  5. Copier un enregistrement d'une table vers une autre
    Par le lynx dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/01/2006, 10h56

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