Copier une plage de données, selon un critère se trouvant dans une colonne

Bonjour à tous,

Je suis tout nouveau, et je débute vraiment dans VBA.

J'ai une question que je n'ai pas trouvé dans les Forums, donc je me permet de la poster.

Voilà, je voudrais sélectionner une plage de données, selon un critère qui se trouve sur une autre colonne, les copier, et les coller sur une autre feuille.

En fait, mon problème, c'est que sous mon tableau excel, j'ai plein d'autres données, et quand j'utilise la fonction SpecialCells(xlVisible), la plage prend forcément tout ce qui a en dessous du tableau même filtré, car pour le tableau, j'utilise un modèle Excel.

Donc dans mon schéma, je commence par faire un filtre, sur le statut (livré non facturé/Production). Je garde les lignes bleus, "Livré non facturé".

La je voudrais, en lançant ma macro, que seul la plage (H3;J8) (le problème c'est que ça peut changer tout le temps en fonction du nombre d'articles que je veux transférer) soit copiée, et collée dans une autre feuille excel.

En fait je veux automatiser ma facturation.

J'ai réussi, à ouvrir la feuille excel de la facture modèle, choisir le nom du client, mais je n'ai pas réussi l'opération de copier coller les valeurs que je souhaite.

Je vous remercie pour toute aide que vous pourriez m'apporter, car je sèche depuis un moment :)

Bonne soirée

Nabilmecano

Bonjour

Si on se réfère bien au databodyrange du tableau structuré cela ne prend ni les titres ni la ligne de totaux

Sinon utiliser Resize et Offset pour déduire une ligne du Range du tableau structuré ou ajouter les titres au databodyrange

Bonjour,

Ok, je vais regarder ça à nouveau, pour l'instant j'ai juste supprimé le sous total des quantités sur le tableau de base. Mais il faut que j'approfondisse le sujet.

Encore merci beaucoup, un grand pas en avant.

Bonne journée

Bonjour,

Finalement, je ne sais pas si c'est mon tableau structuré qui ne va pas (j'ai tout vérifié et tout refait selon la procédure), mais lors de la copie, il me prend des lignes excel qui sont en dessous du tableau structuré.

voici mon code

Sub Facturer()

Dim Fichier As Workbook
Dim chemin_fichier As String
'ouvrir le fichier en fonction du chemin d'accés
Set Fichier = Application.Workbooks.Open("C:\Users\Nabil.Guiza\Documents\MECANOSYSTEMS\FC MS 00-23 MODELE.xlsx")

Windows("2023 DOSSIER AFFAIRE SYSTEMS.xlsm").Activate
Range("H1").Select
Selection.Copy
Windows("FC MS 00-23 MODELE.xlsx").Activate
Range("D3:F3").Select
ActiveSheet.Paste
Windows("2023 DOSSIER AFFAIRE SYSTEMS.xlsm").Activate

'Dans la feuille Feuil4
Sheets("Commande en cours 2023").Activate

' Ne pas afficher les lignes dont la colonne N si n'est pas "LIVREE NON FACTUREE"

ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=14, Criteria1:= _
"LIVREE NON FACTUREE"

'Selectionner toutes les cellules pleines

Dim Maplage As Range
Set Maplage = Range("H4:J" & Range("H65536").End(xlUp).Row).SpecialCells(xlVisible)

' Copier la plage définie
Maplage.Copy

'Activer la feuille Pilote
Windows("FC MS 00-23 MODELE.xlsx").Activate
Range("D14").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' Sortir du mode "Copie"
Application.CutCopyMode = False

Columns("D").ColumnWidth = 40

'Selectionner la première ligne vide
Range("F9").Select

End Sub

Ca bug au niveau Set Maplage = Range("H4:J" & Range("H65536").End(xlUp).Row).SpecialCells(xlVisible)

Il prend bien H4:J mais il descend trop sur J au-delà du tableau structuré. Et je ne sais pas faire pour l'arrêter sur la plage donnée, sachant que celle-ci est mouvante en fonction du filtre.

Merci pour toute informations que vous pourriez me donner.

Bonjour

Set Maplage = Range("H4:J" & Range("H65536").End(xlUp).Row).SpecialCells(xlVisible)

n'a rien à voir avec un tableau structuré

Tableau1 devrait avoir un nom autre que le nom automatique...

Inutile de faire des va et vient d'un classeur à l'autre pour des copy paste

   Range("Tableau1").ListObject.DataBodyRange.Copy
   Workbooks("FC MS 00-23 MODELE.xlsx").Worksheets("NomFeuille").Range("D14").PasteSpecial Paste:=xlPasteValues

suffit

Adapter Nomfeuille en précisant la feuille cible

Bonjour,

Merci pour l'info.

Le problème, c'est qu'il me prends toutes les valeurs des colonnes du tableau, alors que je veux qu'il me prenne que les valeurs se trouvant dans les colonnes H à J.

est ce que avec cette fonction Range("Tableau1").ListObject.DataBodyRange.Copy on peut spécifier les colonnes H à J?

Merci beaucoup

RE

Dans un tableau structuré on ne raisonne par en lettres de colonnes Excel mais titres des colonnes ou en position dans le tableau (ce qui permet de se référer au tableau et plus aux feuiles ni cellules d'Excel).

Si le tableau est de A à N

    Dim Plage As Range
    Set Plage = Range("Tableau1").ListObject.DataBodyRange
    '3 colonnes à partir de la 8ème
    Plage.Offset(, 7).Resize(, 3).SpecialCells(xlVisible).Copy
    Workbooks("FC MS 00-23 MODELE.xlsx").Worksheets("NomFeuille").Range("D14").PasteSpecial Paste:=xlPasteValues

Re,

C'est juste parfait :) et je comprends mieux les travaux sur les tableaux.

Merci Infiniment.

J'ai pu créer automatiquement une facture complète avec incrémentation du numéro automatiquement, tout en remplissant ma base de suivi de facture détaillée.

Maintenant je suis en train d'automatiser le choix du client, (trié automatiquement la colonne client) selon le critère (le nom du client) que j'ai inséré dans un menu déroulant. Mais ça n'a pas l'air de marcher, car je donne la valeur de la cellule où est ma liste, j'imagine que ce n'est pas aussi simple!

Bon je me casse encore un peu la tête avant de solliciter à nouveau le groupe.

Merci encore infiniment pour ton aide.

Cordialement

Nabilmecano

Rechercher des sujets similaires à "copier plage donnees critere trouvant colonne"