VBA Copier / coller valeur sur conditions de 2 dates

Mo2

XLDnaute Nouveau
Bonjour,

Sous xl 2010 :
il doit probalement y avoir un bout de réponse à mon petit soucis sur le forum, mais je cherche depuis plusieurs jours et sans sucès. Donc si vous avez souvenir d'un sujet qui répond à ma question je suis preneur.
Auquel cas mon soucis est assez simple mais je maitrise davantage les formules que le VBA.

J'ai 2 tableaux (tableaux nommés) sur 2 feuilles différentes dans un même classeur.
Mes 2 tableaux commencent à la ligne 10 et ont des plages nommées et délimitées, tel que le permet un tableau.
1 feuille MyETAT avec 1 tableau appelé Data
1 feuille MyExtract avec 1 tableau appelé Extract
Dans la feuille MyEtat j'ai également mes 2 conditions de dates en D3 et D4 qui correspondent au début et fin de plage à vérifier.

Je souhaite selectionner dans mon tableau MyExtract toutes les données dans la colonne Ref qui ont une date dans le champs date entre la date de début et date de fin puis copier / coller la valeur uniquement dans la feuille MyExtract sur le tableau Extract dans le champs Ref.

J'ai essayé de faire ma macro en prenant plusieurs petit bouts de macro du forum mais j'obtiens une erreur 1004 "erreur définie par l'application ou par l'objet.
J'ai du oublié quelque chose ou VBA n'aime pas les tableaux...
Je met le fichier exemple en pj.




avec 1 tableau appelé Extract
le copier les données du champs REF se trouvant
 

Pièces jointes

  • Test vba 01.xlsm
    18.4 KB · Affichages: 39
  • Test vba 01.xlsm
    18.4 KB · Affichages: 40

pierrejean

XLDnaute Barbatruc
Re : VBA Copier / coller valeur sur conditions de 2 dates

Bonjour Mo2

Et bienvenue sur XLD

Vois si cela te convient
La mise a jour de Data se fait a l'ouverture de la feuille ou au changement d'une des 2 dates
 

Pièces jointes

  • Test vba 01.xlsm
    23.8 KB · Affichages: 65
  • Test vba 01.xlsm
    23.8 KB · Affichages: 56

Mo2

XLDnaute Nouveau
Re : VBA Copier / coller valeur sur conditions de 2 dates

Bonjour PierreJean

Merci pour cette réponse qui répond en partie, tu viens de m'enlever une sacré épine du pied.
Je vais voir comment je peux adapter ta macro à mon besoin.

En effet, ta macro réagit à l'ouverture de la feuille, au changement d'une des 2 dates ou de feuille.
Elle prend également tout les champs du tableau qui se trouve dans Myextract pour les copier coller dans le tableau de la feuille MyEtat.

Pour mon besoin, je souhaite que la macro soit déclenchée manuellement, je vais donc créer un bouton pour appeler une macro sans déclenchement.
Et je ne souhaite que les données du champs MyExtract/REF (2ème colonne) à coller en valeur dans MyEtat/ref qui se trouve être la première colonne.

En tout cas, t'es super !!
 

Mo2

XLDnaute Nouveau
Re : VBA Copier / coller valeur sur conditions de 2 dates

pierrejean tu es ... efficace!
Exactement ce que je souhaitais faire.
La seconde colonne du tableau extract dans la première du tableau data pour les valeurs contenues entre les 2 dates.
Du coup, le code est même plus léger de 2 lignes!
Je vais eplucher ta nouvell mouture pour mon auto formation VBA et encore merci.
Sujet clos
 

Philippe Tulliez

XLDnaute Nouveau
Re : VBA Copier / coller valeur sur conditions de 2 dates

Bonjour,
Exemple avec la méthode AdvancedFilter (Filtre avancé d'excel)

Explication
La méthode AdvancedFilter de l'objet Range dans le cas d'une exportation trois zones
  1. La zone des données (la plage de données source)
  2. La zone des critères (Les critères servant à l'exportation)
  3. La zone d'exportation (la cellule où les cellules où doit avoir lieu l'exportation). Ces cellules contiennent les étiquettes de colonnes à exporter et doivent donc être d'orthographe identique à celles de la zone data. Si la cellule est vide, toutes les colonnes sont à exporter.

les différentes zones utilisées dans le classeur exemple
  1. La zone data : se trouve dans la feuille nommée [db] et commence en cellule A1. Pour rendre cette zone dynamique, on utilisera la propriété CurrentRegion (équivalent de Ctrl+* ou Ctrl+A)
  2. La zone des critères est dans la feuille nommée [Accueil] dans une plage nommée znCriteria (de portabilité feuille) et pour l'exemple, nous utiliserons un critère calculé (ou nommé) dont la formule utilisée est
    Code:
    =ET(db!A2>=$F$2;db!A2<=$F$3)
    Où la cellule F2 contient la date de début et la cellule F3 la date de fin.
  3. La zone d'exportation est dans la même feuille (plage nommée znTarget également de portabilité feuille)

Code de la procédure
La procédure est placée dans la procédure événementielle du bouton nommé cmdRun qui se trouve sur la feuille [Accueil]
Code:
Private Sub cmdRun_Click()
 shtData.Range("A1").CurrentRegion.AdvancedFilter _
         Action:=xlFilterCopy, _
         CriteriaRange:=Range("znCriteria"), _
         CopyToRange:=Range("znTarget")
End Sub

L'illustration
Export with Criteria date.jpg

Le classeur exemple
Regarde la pièce jointe 151221 - xlD ExportByAdvancedFilter - Entre deux dates.xlsm
 
Dernière édition:

Mo2

XLDnaute Nouveau
Re : VBA Copier / coller valeur sur conditions de 2 dates

Bonsoir Philippe

Merci pour ce complément.
Effectivement, j'avais cette possibilité mais le soucis c'est que quand tu utilise des tableaux (non des plages sur la feuille), tu ne peux utilser que les filtres classiques.
Si je voulais utiliser le filtrage élaboré, je suis obligé de convertir en plage et perdre mes tableaux et toute la structure qui en découle.
Mais la solution est trés pratique pour des état sur plages de cellules
 

Philippe Tulliez

XLDnaute Nouveau
Re : VBA Copier / coller valeur sur conditions de 2 dates

Bonjour,
Effectivement, j'avais cette possibilité mais le soucis c'est que quand tu utilise des tableaux (non des plages sur la feuille), tu ne peux utilser que les filtres classiques.
Je suppose que tu évoques les tableaux que l'on insère par [Insertion]/Tableau
Si c'est le cas, les filtres élaborés d'excel fonctionnent parfaitement avec cet objet.
 
Dernière édition:

Mo2

XLDnaute Nouveau
Re : VBA Copier / coller valeur sur conditions de 2 dates

Bonsoir Philippe,

Oui je faisais allusion au tableaux que l'on insère par [Insertion]/Tableau ou qu'on peut appliquer sur une plage de données par Accueil -> Mettre sous forme de tableau.

J'ai créé une nouvelle feuille avec :
plage de critère identique aux titres de mon tableau
Zone d'exportation quelques lignes plus bas de la même feuille

Mais quand je valide, le curseur reviens sur mon tableau initial et j'obiens le message :
Vous pouvez seulement copier des données filtrées vers la feuille active.

Je vais essayer avec un tableau plus petit pour voir.
 

Philippe Tulliez

XLDnaute Nouveau
Re : VBA Copier / coller valeur sur conditions de 2 dates

Bonjour,
Mais quand je valide, le curseur reviens sur mon tableau initial et j'obiens le message :
Vous pouvez seulement copier des données filtrées vers la feuille active.
Je ne peux te dire qu'une seule chose, on peut parfaitement utiliser les filtres avancés avec un tableau.

Petit exemple en VBA
Code:
 Dim lst As ListObject, rng As Range
 Set lst = shtDb.ListObjects("tblEmploye")  ' ou ' Set lst = shtDb.ListObjects(1) '
 Set rng = lst.Range
 rng.AdvancedFilter xlFilterCopy, Range("znCriteria"), Range("znExport")
shtDb est le CodeName de la feuille
ou
Code:
Sub Export()
 Dim lst As ListObject
 Set lst = shtDb.ListObjects(1) '
 lst.Range.AdvancedFilter xlFilterCopy, Range("znCriteria"), Range("znExport")
End Sub
ou encore
Code:
Sub Export()
 Dim lst As ListObject
 Set lst = ThisWorkbook.Worksheets("db").ListObjects(1) '
 lst.Range.AdvancedFilter xlFilterCopy, Range("znCriteria"), Range("znExport")
End Sub
 

Mo2

XLDnaute Nouveau
Re : VBA Copier / coller valeur sur conditions de 2 dates

J'ai pris ton fichier exemple qui a un filtre sur cellule, j'ai transformé la bd en tableau et le filtre élaboré fonctionne bien.
A la différence que naturellement il ne met plus les filtres classiques dans le tableau puisque le filtre élaboré prend le pas.
Mais quand je veux par exemple intervenir sur la configuration du filtre élaboré, la partie " copier dans" est grisée.
Ta solution me plait bien mais elle appelle 3 axes différents d'excel : fonction, VBA et outils de données excel.
Je vais essayer de faire un filtre élaboré sur une plage puis ensuite la convertir en tableau et voir si cela fonctionne
 

Philippe Tulliez

XLDnaute Nouveau
Re : VBA Copier / coller valeur sur conditions de 2 dates

Bonjour,
J'ai pris ton fichier exemple qui a un filtre sur cellule, j'ai transformé la bd en tableau et le filtre élaboré fonctionne bien.
A la différence que naturellement il ne met plus les filtres classiques dans le tableau puisque le filtre élaboré prend le pas.
Mais quand je veux par exemple intervenir sur la configuration du filtre élaboré, la partie " copier dans" est grisée.
Ta solution me plait bien mais elle appelle 3 axes différents d'excel : fonction, VBA et outils de données excel.
Je vais essayer de faire un filtre élaboré sur une plage puis ensuite la convertir en tableau et voir si cela fonctionne
Toutes les réponses que je donne sont testées et lorsque j'écris que le filtre élaboré fonctionne avec les tableaux, je l'ai vérifié manuellement et en VBA.
J'ai transformé la plage de données de mon fichier exemple en tableau et le programme VBA sans aucune modification continue à fonctionner et j'ai utiliser ensuite l'outil Filtre avancé manuellement sans aucun problème.

Pour le test manuel sur le classeur exemple (j'ai renommé au préalable le tableau tblData)
  1. Sélectionner une cellule vide de la feuille nommée [Accueil] (par exemple K11)
  2. Cliquer sur le bouton Filtre avancé
  3. Remplir les champs de la boîte de dialogue
    Plage : Sélectionner le tableau de la feuille nommée [db] et tu dois obtenir tblData[#Tout])
    Zone de critères : Clic sur F3 et sélectionner znCriteria et on obtient Accueil!znCriteria
    Copier dans : F3 et sélection de znTarget pour obtenir Accueil!znTarget
  4. Confirmer
J'ajoute que l'utilisation des plages nommées znCriteria et znTarget n'est pas obligatoire
 

Discussions similaires

Réponses
6
Affichages
362

Statistiques des forums

Discussions
311 720
Messages
2 081 910
Membres
101 837
dernier inscrit
Ugo