Macro copie sous condition

anismegrine

XLDnaute Junior
Bonjour à toutes et à tous

je suis encore novice dans tout ce qui est macro et vba surtout lorsqu'il s'agit de variable, je viens vers vous pour m'aider à résoudre ce souscis et je vous remerci d'avance.:)

voila j'ai un fichier excel qui contient deux feuilles dans la première DATA j'ai placé une macro simple qui m'ouvre un autre fichier excel EXTRACT pour copier les données colonnes B2:B10000 les coller dans DATA puis copier les données de E2:E10000 les Coller aussi puis copie ....

sachant que dans la colonne B du classeur extract je trouve les date, je veux avoir une macro qui cible les cellules à copier en fonction du mois par exemple je vais calculer les stats du mois de janvier, comment je peux rédiger une macro qui n'exporte que les données du mois de janvier
 

Gorfael

XLDnaute Barbatruc
Re : Macro copie sous condition

Salut anismegrine et le forum
Un code de macro est "personnel". Chacun a sa propre méthodologie.
Ce que tu demandes dois réagir avec un code inconnu. Donc, la première étape pour une demande de ce type est de fournir ton code. Ensuite on le complétera en te proposant des solution.
La plus simple que je vois, suivant la description donnée, est de mettre un filtre et de copier les filtrés.
Personnalisé >31/12/2010 ET <1/2/2011
A+
 

anismegrine

XLDnaute Junior
Re : Macro copie sous condition

merci Gorafel pour ta réponse

je pense que mettre un filtre avant de copier et la solution la plus adapté à mon problème

ci dessous le code que j'ai utilisé pour l'imporation de ces données "je ne peux pas vous envoyer le fichier vue les restrictions installé sur le navigateur"

comme vous allez le remrquer le code que j'ai rédiger est trop simple mais long

Sub importationHLR()

Workbooks.Open "Q:\espace recrutement\1. BASE DE DONNEES\3 - HLR\HLR COMMUN\HLR COMMUN 2011\HLR COMMUN 1er semestre 2011.xlsx", ReadOnly:=True

Application.DisplayAlerts = True

Workbooks("HLR COMMUN 1er semestre 2011.xlsx").Activate

Worksheets("HLR COMMUN").Activate

Worksheets("HLR COMMUN").Range("B8:B10000").Select

Selection.Copy

Workbooks("outil sourcing 2011macro.xlsm").Activate

Worksheets("extract HLR").Activate

Worksheets("extract HLR").Range("a2").Select

Selection.PasteSpecial Paste:=xlPasteValues

Workbooks("HLR COMMUN 1er semestre 2011.xlsx").Activate

Worksheets("HLR COMMUN").Activate

Worksheets("HLR COMMUN").Range("E8:E10000").Select

Selection.Copy

Workbooks("outil sourcing 2011macro.xlsm").Activate

Worksheets("extract HLR").Activate

Worksheets("extract HLR").Range("B2").Select

Selection.PasteSpecial Paste:=xlPasteValues



Workbooks("HLR COMMUN 1er semestre 2011.xlsx").Activate

Worksheets("HLR COMMUN").Activate

Worksheets("HLR COMMUN").Range("T8:T10000").Select

Selection.Copy

Workbooks("outil sourcing 2011macro.xlsm").Activate

Worksheets("extract HLR").Activate

Worksheets("extract HLR").Range("D2").Select

Selection.PasteSpecial Paste:=xlPasteValues



Workbooks("HLR COMMUN 1er semestre 2011.xlsx").Activate

Worksheets("HLR COMMUN").Activate

Worksheets("HLR COMMUN").Range("S8:S10000").Select

Selection.Copy

Workbooks("outil sourcing 2011macro.xlsm").Activate

Worksheets("extract HLR").Activate

Worksheets("extract HLR").Range("F2").Select

Selection.PasteSpecial Paste:=xlPasteValues


Workbooks("HLR COMMUN 1er semestre 2011.xlsx").Activate

Worksheets("HLR COMMUN").Activate

Worksheets("HLR COMMUN").Range("M8:M10000").Select

Selection.Copy

Workbooks("outil sourcing 2011macro.xlsm").Activate

Worksheets("extract HLR").Activate

Worksheets("extract HLR").Range("H2").Select

Selection.PasteSpecial Paste:=xlPasteValues

Workbooks("HLR COMMUN 1er semestre 2011.xlsx").Activate

Application.CutCopyMode = False

Workbooks("HLR COMMUN 1er semestre 2011.xlsx").Close SaveChanges:=False

Application.DisplayAlerts = False

Workbooks("outil sourcing 2011macro.xlsm").Activate

Worksheets("TDB").Activate

End Sub
 

Gorfael

XLDnaute Barbatruc
Re : Macro copie sous condition

Salut anismegrine et le forum
Code:
Sub importationHLR()
Dim C_Dép As Workbook, C_Dest As Workbook

Workbooks.Open "Q:\espace recrutement\1. BASE DE DONNEES\3 - HLR\HLR COMMUN\HLR COMMUN 2011\HLR COMMUN 1er semestre 2011.xlsx", ReadOnly:=True
Application.DisplayAlerts = True

Set C_Dép = Workbooks("HLR COMMUN 1er semestre 2011.xlsx")
Set C_Dest = Workbooks("outil sourcing 2011macro.xlsm")

C_Dép.Sheets("HLR COMMUN").Range("B8:B10000").Copy
C_Dest.Sheets("extract HLR").Range("A2").PasteSpecial Paste:=xlPasteValues

C_Dép.Worksheets("HLR COMMUN").Range("E8:E10000").Copy
C_Dest.Worksheets("extract HLR").Range("B2").PasteSpecial Paste:=xlPasteValues

C_Dép.Worksheets("HLR COMMUN").Range("T8:T10000").Copy
C_Dest.Worksheets("extract HLR").Range("D2").PasteSpecial Paste:=xlPasteValues

C_Dép.Worksheets("HLR COMMUN").Range("S8:S10000").Copy
C_Dest.Worksheets("extract HLR").Range("F2").PasteSpecial Paste:=xlPasteValues

C_Dép.Worksheets("HLR COMMUN").Range("M8:M10000").Copy
C_Dest.Worksheets("extract HLR").Range("H2").PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False
Workbooks("HLR COMMUN 1er semestre 2011.xlsx").Close SaveChanges:=False
'Application.DisplayAlerts = False
Workbooks("outil sourcing 2011macro.xlsm").Activate
Worksheets("TDB").Activate

End Sub
C'est ton code, mais légèrement remanié. Je ne l'ai pas testé ne disposant que d'une version Excel 2003
Quelques remarques sur ce code :
- Qu'il soit simplisme ou pas, un code qui existe est toujours mieux que pas de code, non ?
-Tu mets DisplayAlerte à true en début de code et à false en sortie. Ce qui laisse à entendre qu'il est toujours à false. Une erreur signalée est beaucoup plus simple qu'une qui nous passe sous le nez ! Le fait d'ôter les messages d'erreur... pas Glop, pas Glop. Si tu as une erreur, il vaut toujours mieux la traiter, plutôt que de ne pas comprendre pourquoi la macro ne fait pas tout ce pourquoi elle est codée.

- En reprenant ton code initial, même si tu passes par les select/selection (ce qui est une énormité), il ne sert à rien d'activer, pour le remettre en préfixe : quand tu actives une feuille, un classeur, il devient la référence par défaut
Code:
Workbooks("HLR COMMUN  1er semestre 2011.xlsx").Activate
Worksheets("HLR COMMUN").Activate
Worksheets("HLR COMMUN").Range("B8:B10000").Select
Selection.Copy
Sans rien changer, peut s'écrire
Code:
Workbooks("HLR COMMUN  1er semestre 2011.xlsx").Activate
 Worksheets("HLR COMMUN").Activate
 Range("B8:B10000").Select
 Selection.Copy
Ou, nettement mieux
Code:
Workbooks("HLR COMMUN  1er semestre 2011.xlsx").Sheets("HLR COMMUN").Range("B8:B10000").Copy
Pas de grande différence, mais plus rapide.

Tu travailles sur une plage arbitraire (B8:B10000). Ce serait étonnant que tu ais juste 10000 lignes de données (9993, mais c'est pas la question).
Il est toujours profitable de calibrer les plages, au plus juste. D'après tes postes, il faudrait fixer la dernière ligne utile de B :
Code:
Dim X as long
x=Cells(rows.count,"B").end(xlup).row
les plages deviendraient
Code:
Range("B8:B" & X)
Range("E8:E" & X)
Range("T8:T" & X)
etc...

Pour faire le filtre, comme tu es sur une version supérieure, il va falloir que tu mettes l'enregistreur de macro en route (Outils>>Macro>>Nouvelle macro sur V.2003) que tu fasses le filtre et que tu mettes le code sur un poste, si tu n'y arrives pas tout seul : je ne connais pas assez les différences par rapport à la mienne, par le tenter, avec une certitude de ne pas utiliser un code obsolète.

Pour les fichiers d'essai : ce ne peut pas être un fichier de travail. Un fichier (ou 2) avec 1 feuille de 10 lignes ne dépasse pas les limites du forum. Ce qui est important, c'est que tes 10 lignes contiennent des valeurs représentatives du problème : si on arrive à copier 2 lignes, avec la macro. on pourra en copier 60000.
A+
 

Discussions similaires

Réponses
12
Affichages
289

Statistiques des forums

Discussions
312 505
Messages
2 089 101
Membres
104 031
dernier inscrit
RimeF