VBA - C/C tableau filtré sans entête

Bonjour,

Petite question concernant les macros. Je dois faire un copie de données (liste de cellules dans une colonne) qui est filtrée dans un tableau pour les réinsérer dans un autre.

J'aimerais savoir s'il était possible de faire la sélection (en CTRL+SHIFT+DOWN) à partir de la deuxième cellule de cette colonne et non pas à partir de la première qui contient l'entête de colonne ?

Merci pour votre temps !

abeg

Bonjour,

Le plus simple pour tes données filtrées est d'utiliser

taplage.Offset(1, 0).SpecialCells(xlCellTypeVisible)

En espèrant que cela t'aide ...

Bonjour à tous

Si tu travailles sur un tableau ListObject, utilise DatabodyRange : cela ne sélectionnera que les données, hors titres et ligne de totaux.

S'il y a un filtre seules les cellules visibles seront copiés sans besoin de le préciser...

Exemple

ActiveSheet.ListObjects(1).DataBodyRange.Copy Destination:=RangeAPréciser

Le VBA spécifiques aux traitements de tableaux existe, pourquoi utiliser des méthodes plages de données...

Bonjour à tous,

Chris a raison ... il existe plusieurs configurations possibles ...

Du coup, comme d'habitude .... le chemin qui s'impose : joindre un fichier test ...

Bonjour à tous,

Merci pour vos réponses rapides. Alors, je ne suis pas un expert en VBA. Je sais enregistrer des choses simples et les retravailler quand j'ai une bonne source d'informations.

J'ai inclus un fichier test :

Il y a 2 feuilles bases avec 2 colonnes :

1. Numéro de réf : référence d'un produit

2. Disponibilité : Oui/Non

Je veux pouvoir retrouver sur la première feuille intitulée "feuille de travail" la liste des références non disponibles (CAD avec la mention "Non" dans disponibilité").

47essai-2.xlsx (14.23 Ko)

abeg

    
Sheets("Base 1").Select
ActiveSheet.ListObjects("Tableau2").Range.AutoFilter Field:=2, Criteria1:= _
"Non"
ActiveSheet.SelectListObjects("Tableau2").Columns("A:A").DataBodyRange.SpecialCells(xlCellTypeVisible).Copy
Sheets("Base 2").Select

J'ai indiqué ça mais il y a un problème dans la sélection de la colonne je pense...

Merci à tous,

abeg

Re

For Each WS In ActiveWorkbook.Worksheets
If Left(WS.Name, 5) = "Base " Then
    With Worksheets("Feuille de travail")
        x = .Range("A1").CurrentRegion.Rows.Count
        Set Madestination = .Range("A1").Offset(x, 0)
    End With
    With WS.ListObjects(1)
        .Range.AutoFilter Field:=2, Criteria1:="Non"
        .ListColumns(1).DataBodyRange.Copy Destination:=Madestination
    End With
End If
Next

Il pourrait être nécessaire de vérifier que les filtres sont actifs...

Alors je comprends tout à fait le code, il fonctionne très bien sur la feuille d'essai. Mais bien évidemment dans le vrai fichier, les noms des feuilles sont différents, ce n'est pas toujours la même colonne qui contient les données "Oui"/"Non" qui d'ailleurs ne sont pas toujours avec la même dénomination.

Désolé si le problème est plus compliqué mais je veux procéder feuille par feuille afin d'éviter les erreurs (pas logique je le conçois) mais c'est plus simple pour moi.

J'ai donc essayé d'indiquer :

   
    With Worksheets("Feuille de travail 1")
    x = .Range("A1").CurrentRegion.Rows.Count
    Set Madestination = .Range("A1").Offset(x, 0)
    End With
    Sheets("Base 1").Select
    ActiveSheet.ListObjects(1).ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Copy Destination:=Madestination

Cela fonctionne mais dans mon vrai tableau j'ai pré inscrit des formules Index/equiv de croisement de données afin de ne pas avoir à le refaire et bien sûr, même si ma colonne A dans ma "feuille de travail 1" est vide, il envoi les cellules directement dans la A301, sachant qu'il y a une formule en B300

On y arrive, c'est gentil à vous de m'aider !

abeg

Bonjour

C'est vraiment lassant de répéter qu'il faut fournir des exemples REPRESENTATIFS.

Là tout le monde perd son temps, nous à chercher une solution sur un exemple, toi à l'appliquer sur ton cas réel qui n'a rien à voir !

Si le tableau de ton onglet Feuille de travail 1 était également sous forme de tableau, il serait totalement inutile de remplir 300 lignes de formules !

Le tableau est limité au départ à la ligne de titres et une ligne de données, vide ou juste formulée.

Ensuite tout ajout de ligne dans le tableau propagerait la formule (de mêle que les formats dont la MFC, validations le cas échéant... Puisque tu as 2010 autant utiliser les possibilités qui nous sont données depuis la version 2007.

Par ailleurs si tu as des noms d'onglets non normalisées de même que les colonnes servant de critères de filtre, et de même que les valeurs de filtres, ce n'est pas vers la démultiplication du code qu'il faut s'orienter mais vers une liste de paramètres, soit en début de code (peu évolutif) soit dans une feuille Excel plus souple), liste qui servira à prendre les bons paramètres dans l'uunique boucle de code.

Hello 78chris,

Je fais de mon mieux, VBA ne faisant pas partie de mes compétences, ce n'est pas toujours facile.

J'ai réintégré ce que vous m'avez conseillé et modifié mon fichier pour qu'il soit représentatif (j'ai changé les noms de mes onglets dans mon fichier original).

39essai-2.xlsx (14.23 Ko)

Merci pour les conseils !

abeg

Alors petite update, la personne que j'aide pour réaliser ce tableau n'a qu'Excel 2007 et donc d'après ce que j'ai compris ne pourra pas utiliser les tableaux "automatiques".

abeg

Bonjour,

A tester avec Excel 2007.

Cdlt.

79abeg.xlsm (32.53 Ko)

Bonjour à tous

Les tableaux existent depuis la version 2003, encore appelés listes de données mais offrant moins de possibilités : il sont basculé sur la version 2007 dont aucun problème...

Bonjour,

On a dû mal se comprendre, je croyais par conséquent que les tableaux n'étaient pas disponibles sur 2007.

Si le tableau de ton onglet Feuille de travail 1 était également sous forme de tableau, il serait totalement inutile de remplir 300 lignes de formules !

Le tableau est limité au départ à la ligne de titres et une ligne de données, vide ou juste formulée.

Ensuite tout ajout de ligne dans le tableau propagerait la formule (de mêle que les formats dont la MFC, validations le cas échéant... Puisque tu as 2010 autant utiliser les possibilités qui nous sont données depuis la version 2007.

abeg

Bonjour

"Depuis 2007" = "à partir de 2007" pas "après 2007" pour moi...

Hello,

J'essaye de me débrouiller et en regardant à droite à gauche et grâce à vos explication j'ai trouvé ça (que je comprends) :

Sheets("Base 1").Select

Range("A1").Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy

Sheets("Feuille de travail").Select

Range("A1").End(xlDown)(2, 1).Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Seul soucis c'est que ça bloque au niveau du collage des valeurs...

abeg

Bonjour,

As-tu regardé ma proposition ?

Cdlt.

Bonjour Jean-Eric,

Oui tout à fait ça marche super bien mais je ne l'utiliserai malheureusement pas car je ne la comprends pas et je veux être capable de modifier si jamais le fichier/bases changent ...

Mais sinon c'était la meilleure solution !

abeg

RE,

Bonne continuation.

Rechercher des sujets similaires à "vba tableau filtre entete"