Programmation d'une macro compliquée

Bonjour à tous,

J'essaierai d'être le plus clair possible dans ma requête (ce qui n'est pas gagné). Je travaille sous EXCEL.

Je m'explique,

Je dois créer une macro qui me permette de :

- Mettre à jour une base de donnée gigantesque (fichier EXCEL1) une fois par mois à partir d'une autre base de données gigantesque (fichier EXCEL2).

===> Mon problème : EXCEL1 ne doit récupérer qu'une partie des données de EXCEL2.

===> Ma question : Est-il possible de créer une macro qui peut mettre a jour EXCEL1 (qui ne représente qu'une partie des données de EXCEL2 ?

C'est tordu, je sais ^^

Je vous remercie d'avance pour vos aides et reste à disposition si vous avez besoin de précisions.

Cordialement,

Etienne

[Pour des raisons de confidentialité des données que je manipule, je ne peux joindre aucun fichier excel]

niay a écrit :

[Pour des raisons de confidentialité des données que je manipule, je ne peux joindre aucun fichier excel]

Bonjour,

[Pour des raisons d'incompréhension totale, notamment concernant la structure de tes fichiers, nous ne pouvons t'aider plus avant....]

C'est pas dur, de faire 2 fichiers bidons, mais avec la structure EXACTE des fichiers, et des données bidons.....

M'enfin....

Tant pis

Au temps pour moi, l'option "fichier bidon" m'avait échappée :] , en voici un :

https://www.excel-pratique.com/~files/doc2/TESTMACRO.xls

Merci pour ton aide

Crdlt,

Etienne

Re-,

à première vue, pas l'air trop compliqué...

Cependant, quelques précisions....

Je suppose que les données que tu rapatries, sont celles du mois précédent (ou du mois en cours, si on est le 31...)

Comment peut-on le déterminer?

Est-il possible qu'il y ait plusieurs mises à jour par mois?

Est-ce que les deux fichiers sont dans le même répertoire?

Est-ce que les onglets concernés portent des noms d'onglets spécifiques?

Qu'appelles tu base de donnée gigantesque? (combien de lignes, approximativement?)

Et question subsidiaire :

Pourquoi n'aimes-tu pas les sports d'hiver?

A te relire

Re-,

et question supplémentaire..

Est-ce que ta base est créée au 01 janvier, où elle est à suivre, sur plusieurs années?

Bonjour niay,

Je reformule histoire que tu voie si je t'ai bien compris.

tu souhaite rajouter dans excel2 les données se trouvant dans excel1

dans l'exemple du fichier cela rajoutera deux lignes dans excel2 uniquement avec des données uniquement dans les colonnes : Groupe Mois RA CA réalisé NBjT Type Country Produit Prix moyen

si c'est bien de cela qu'il s'agit et que ton fichier excel1 ne contient systématiquement que des nouvelles données que tu souhaite importer, tu simplement lancer l'enregistrement d'une macro dans excel1et manipuler les colonnes (couper, coller, insertion) de manière à avoir la même config que dans excel2.

Ceci fait stop l'enregistrement, on utilisera ce code dans une petite macro qui à partir de excel2 ouvert :

  • ouvrira ecxel 1
  • exécutera ta macro afin de mettre excel1 en forme
  • sélectionnera l'ensemble des lignes
  • les collera à la suite de tes données

voici une possibilité, essaie l'enregistrement de la macro et tiens nous au courant

a+

edit :

il serait préférables d'éclaircir les questions de cousinhub au préalable

RE,

1- Les données que je rapporte sont celles du mois en cours (EXCEL2 est manuellement mis à jour).

2- En effet, la maj est faite de manière continue. A terme, il semble préférable d'actualiser les données en temps réel.

3- Non, ils ne sont pas dans le même répertoire.

4- L'onglet de EXCEL1 se nomme : "Base de données 2009" ; tandis que l'onglet de EXCEL2 se nommne : "MASTER".

5- Gigantesque = 13000 lignes sur 29 colonnes.

6*- J'adore les sports d'hiver, il s'agit juste d'un tuto pour macro que j'ai effectué juste avant :O .

J'ai également une question subsidiaire :

Que gagnez-vous à aider en permanence des gens paumés à part de la satisfaction personnelle? :]

Sinon, Merci pour ton aide (même si c'est un moyen de nourrir son égo que d'aider les autres ^^ )

Re-,

zut,

Sinon, Merci pour ton aide (même si c'est un moyen de nourrir son égo que d'aider les autres ^^ )

Je suis très susceptible....

Bonne chance

pophop a écrit :

Bonjour niay,

Je reformule histoire que tu voie si je t'ai bien compris.

tu souhaite rajouter dans excel2 les données se trouvant dans excel1

Bonjour pophop,

Merci pour ton aide, je ne pourrais essayer ta proposition que demain, en attendant bonne soirée à toi et cousinhub, je vous tiens au courant.

Cordlt,

Etienne

Re cousinhub,

Mon intention n'était en aucun cas de t'offusquer :[

Je suis fan de cynisme et c'est difficile de le faire ressortir en postant.

Je comprends ta réaction et m'excuse.

Merci tout de même pour l'intérêt que tu as pû porter à ma requête.

Je respecte ce que vous faites.

Bonne continuation

niay a écrit :

Que gagnez-vous à aider en permanence des gens paumés à part de la satisfaction personnelle? :]

Sinon, Merci pour ton aide (même si c'est un moyen de nourrir son égo que d'aider les autres ^^ )

C'est un peu là même chose que faire des casses têtes, ça occupe...

En plus le fait de plancher à plusieurs sur un même problème permet de confronter différentes approches et solutions et d'améliorer tes connaissances.

D'ici que tout ça te parle, je te souhaite bon courage avec cette ENORME base...

Bonjour pophop,

J'ai effectué la première macro que tu m as conseillé (à savoir la mise en forme de EXCEL2 - supression des colonnes inutiles), voila ce que ça donne :

Sub Miseenforme()

Columns("A:A").Select

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Columns("C:C").Select

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Columns("E:E").Select

Selection.Delete Shift:=xlToLeft

Columns("G:G").Select

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

Columns("I:I").Select

Selection.Delete Shift:=xlToLeft

Columns("J:J").Select

Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft

End Sub

SI j'ai bien compris, la suite consistera à intégrer cette macro dans une macro plus complète.

Il semble que tu m'aies indiqué la bonne voie, je vais essayer quelques trucs et je te tiens au courant.

Cordlt,

Etienne

RE,

Quelques précisions qui permettront peut etre de faciliter l'opération :

  • EXCEL2 représente la base de données la plus complète ( je dois extraire les données nécessaires et les exporter vers EXCEL1).
  • Chaque mois, EXCEL2 est mis à jour.
  • Je dois juste exporter une partie de la Mise à jour de EXCEL2 (uniquement les variables concernées) à chaque début de mois.

Ce n'est surement pas très compliqué mais je cherche et me perds dans la multitude de forums dédiés aux commandes macros sans trouver ce qui m'intéresse.

Merci d'avance pour vos lumières.

Cordlt,

Etienne.

Si quelqu'un a une idée, mes oreilles sont grandes ouvertes, je dois boucler le fichier rapidement.

Merci pour vos aides,

Etienne

Bonjour Niay

ta macro fonctionne mais elle ne met pas les colonnes dans le bon ordre.

Une fois ta première macro exécutée, enregistre une seconde dans laquelle tu va classer tes colonnes dans le même ordre que excel1.

Ensuite il te suffit de coller ce code généré à la suite de ta macro "Miseenforme" avant l'instruction "end sub" (attention à ne pas copier les instructions "sub blabla" et "end sub")

Une fois que c'est fait et que ça fonctionne.

tu enregistre une nouvelle macro où tu fera les opérations suivantes :

- selection des lignes à copier (de la ligne 2 à la ligne X)

pour X estime le nombre maximal de données à copier chaque mois et prends une bonne marge, attention à ce que ta marge + tes donnés n'excède pas les 65536 lignes dispos dans excel.

  • copie des lignes
  • selection du classeur destination
  • selection de la cellule "a1"
  • Ctrrl + flèche bas (de manière à te trouver sur la dernière ligne où tu a des données
(cette ligne de code sera à modifier avec la fonction "offset" afin de te positionner sur la premièr ligne vierge)
  • coller
  • arrêt de la macro

Afin que tout s'execute d'une traite, tu recommence l'opération de copier/coller du code ou tu rajoute une ligne à la fin de "Miseenforme" :

Call LeNomDeCetteMacro

je jetterai un oeil à tes avancées jeudi

bon courage

Bonjour pophop,

Je touche au but mais il y a un hic,

Tout d'abord, voila mon code (dsl pour les lignes jle mets en petit) :

Sub Miseenforme()

Range("A:A,B:B,E:E,F:F,G:G,H:H").Select

Range("H1").Activate

ActiveWindow.ScrollColumn = 2

ActiveWindow.ScrollColumn = 3

ActiveWindow.ScrollColumn = 4

ActiveWindow.ScrollColumn = 5

ActiveWindow.ScrollColumn = 6

ActiveWindow.ScrollColumn = 7

Range("A:A,B:B,E:E,F:F,G:G,H:H,K:K,N:N,O:O,P:P,Q:Q,R:R").Select

Range("R1").Activate

ActiveWindow.ScrollColumn = 8

ActiveWindow.ScrollColumn = 9

ActiveWindow.ScrollColumn = 10

ActiveWindow.ScrollColumn = 11

ActiveWindow.ScrollColumn = 12

ActiveWindow.ScrollColumn = 13

ActiveWindow.ScrollColumn = 14

Range("A:A,B:B,E:E,F:F,G:G,H:H,K:K,N:N,O:O,P:P,Q:Q,R:R,S:S,T:T,U:U,V:V,W:W,X:X" _

).Select

Range("X1").Activate

ActiveWindow.ScrollColumn = 15

ActiveWindow.ScrollColumn = 16

ActiveWindow.ScrollColumn = 17

ActiveWindow.ScrollColumn = 18

Range( _

"A:A,B:B,E:E,F:F,G:G,H:H,K:K,N:N,O:O,P:P,Q:Q,R:R,S:S,T:T,U:U,V:V,W:W,X:X,AA:AA,AC:AC" _

).Select

Range("AC1").Activate

Selection.Delete Shift:=xlToLeft

ActiveWindow.ScrollColumn = 17

ActiveWindow.ScrollColumn = 16

ActiveWindow.ScrollColumn = 15

ActiveWindow.ScrollColumn = 14

ActiveWindow.ScrollColumn = 13

ActiveWindow.ScrollColumn = 12

ActiveWindow.ScrollColumn = 11

ActiveWindow.ScrollColumn = 10

ActiveWindow.ScrollColumn = 9

ActiveWindow.ScrollColumn = 8

ActiveWindow.ScrollColumn = 7

ActiveWindow.ScrollColumn = 6

ActiveWindow.ScrollColumn = 5

ActiveWindow.ScrollColumn = 4

ActiveWindow.ScrollColumn = 3

ActiveWindow.ScrollColumn = 2

ActiveWindow.ScrollColumn = 1

Range("A1").Select

Columns("A:A").Select

Selection.Insert Shift:=xlToRight

Columns("C:C").Select

Selection.Cut Destination:=Columns("A:A")

Columns("G:G").Select

Selection.Cut Destination:=Columns("C:C")

Columns("D:D").Select

Selection.Cut Destination:=Columns("G:G")

Columns("I:I").Select

Selection.Cut Destination:=Columns("D:D")

Columns("E:E").Select

Selection.Cut Destination:=Columns("I:I")

Columns("H:H").Select

Selection.Cut Destination:=Columns("E:E")

Columns("F:F").Select

Selection.Cut Destination:=Columns("H:H")

Columns("I:I").Select

Selection.Cut Destination:=Columns("F:F")

Columns("G:G").Select

Selection.Cut Destination:=Columns("I:I")

Columns("H:H").Select

Selection.Cut Destination:=Columns("G:G")

Columns("I:I").Select

Selection.Cut Destination:=Columns("H:H")

Columns("J:J").Select

Selection.Cut Destination:=Columns("I:I")

Columns("I:I").Select

Rows("2:2").Select

ActiveWindow.ScrollRow = 2

ActiveWindow.ScrollRow = 3

ActiveWindow.SmallScroll Down:=40705

ActiveWindow.ScrollRow = -24971

ActiveWindow.ScrollRow = -25042

ActiveWindow.ScrollRow = -25113

ActiveWindow.ScrollRow = -25256

ActiveWindow.ScrollRow = -25327

ActiveWindow.ScrollRow = -25398

ActiveWindow.ScrollRow = -25470

ActiveWindow.ScrollRow = -25541

ActiveWindow.ScrollRow = -25612

ActiveWindow.ScrollRow = -25683

ActiveWindow.ScrollRow = -25755

ActiveWindow.ScrollRow = -25897

ActiveWindow.ScrollRow = -25969

ActiveWindow.ScrollRow = -26040

ActiveWindow.ScrollRow = -26111

ActiveWindow.ScrollRow = -26183

ActiveWindow.ScrollRow = -26325

ActiveWindow.ScrollRow = -26396

ActiveWindow.ScrollRow = -26468

ActiveWindow.ScrollRow = -26539

ActiveWindow.ScrollRow = -26682

ActiveWindow.ScrollRow = -26753

ActiveWindow.ScrollRow = -26967

ActiveWindow.ScrollRow = -27038

ActiveWindow.ScrollRow = -27252

ActiveWindow.ScrollRow = -27466

ActiveWindow.ScrollRow = -27608

ActiveWindow.ScrollRow = -27680

ActiveWindow.ScrollRow = -27751

ActiveWindow.ScrollRow = -27822

ActiveWindow.ScrollRow = -27894

ActiveWindow.ScrollRow = -28036

ActiveWindow.ScrollRow = -28107

ActiveWindow.ScrollRow = -28179

ActiveWindow.ScrollRow = -28250

ActiveWindow.ScrollRow = -28393

ActiveWindow.ScrollRow = -28464

ActiveWindow.ScrollRow = -28535

ActiveWindow.ScrollRow = -28678

ActiveWindow.ScrollRow = -28749

ActiveWindow.ScrollRow = -28820

ActiveWindow.ScrollRow = -28892

ActiveWindow.ScrollRow = -29034

ActiveWindow.ScrollRow = -29105

ActiveWindow.ScrollRow = -29177

ActiveWindow.ScrollRow = -29319

ActiveWindow.ScrollRow = -29391

ActiveWindow.ScrollRow = -29462

ActiveWindow.ScrollRow = -29533

ActiveWindow.ScrollRow = -29676

ActiveWindow.ScrollRow = -29747

ActiveWindow.ScrollRow = -29818

ActiveWindow.ScrollRow = -29890

ActiveWindow.ScrollRow = -30032

ActiveWindow.ScrollRow = -30104

ActiveWindow.ScrollRow = -30175

ActiveWindow.ScrollRow = -30317

ActiveWindow.ScrollRow = -30389

ActiveWindow.ScrollRow = -30460

ActiveWindow.ScrollRow = -30531

ActiveWindow.ScrollRow = -30674

ActiveWindow.ScrollRow = -30745

ActiveWindow.ScrollRow = -30816

ActiveWindow.ScrollRow = -30959

ActiveWindow.ScrollRow = -31030

ActiveWindow.ScrollRow = -31102

ActiveWindow.ScrollRow = -31173

ActiveWindow.ScrollRow = -31244

ActiveWindow.ScrollRow = -31315

ActiveWindow.ScrollRow = -31387

ActiveWindow.ScrollRow = -31458

ActiveWindow.ScrollRow = -31529

ActiveWindow.ScrollRow = -31672

ActiveWindow.ScrollRow = -31743

ActiveWindow.ScrollRow = -31814

ActiveWindow.ScrollRow = -31886

ActiveWindow.ScrollRow = -32028

ActiveWindow.ScrollRow = -32100

ActiveWindow.ScrollRow = -32171

ActiveWindow.ScrollRow = -32314

ActiveWindow.ScrollRow = -32385

ActiveWindow.ScrollRow = -32456

ActiveWindow.ScrollRow = -32527

ActiveWindow.ScrollRow = -32670

ActiveWindow.ScrollRow = -32741

ActiveWindow.ScrollRow = 32723

ActiveWindow.ScrollRow = 32581

ActiveWindow.ScrollRow = 32510

ActiveWindow.ScrollRow = 32438

ActiveWindow.ScrollRow = 32367

ActiveWindow.ScrollRow = 32224

ActiveWindow.ScrollRow = 32153

ActiveWindow.ScrollRow = 32082

ActiveWindow.ScrollRow = 32011

ActiveWindow.ScrollRow = 31868

ActiveWindow.ScrollRow = 31797

ActiveWindow.ScrollRow = 31725

ActiveWindow.ScrollRow = 31583

ActiveWindow.ScrollRow = 31511

ActiveWindow.ScrollRow = 31440

ActiveWindow.ScrollRow = 31369

ActiveWindow.ScrollRow = 31226

ActiveWindow.ScrollRow = 31155

ActiveWindow.ScrollRow = 31084

ActiveWindow.ScrollRow = 31012

ActiveWindow.ScrollRow = 30870

ActiveWindow.ScrollRow = 30799

ActiveWindow.ScrollRow = 30727

ActiveWindow.ScrollRow = 30656

ActiveWindow.ScrollRow = 30513

ActiveWindow.ScrollRow = 30442

ActiveWindow.ScrollRow = 30371

ActiveWindow.ScrollRow = 30228

ActiveWindow.ScrollRow = 30157

ActiveWindow.ScrollRow = 30086

ActiveWindow.ScrollRow = 30014

ActiveWindow.ScrollRow = 29872

ActiveWindow.ScrollRow = 29801

ActiveWindow.ScrollRow = 29729

ActiveWindow.ScrollRow = 29587

ActiveWindow.ScrollRow = 29515

ActiveWindow.ScrollRow = 29444

ActiveWindow.ScrollRow = 29373

ActiveWindow.ScrollRow = 29230

ActiveWindow.ScrollRow = 29159

ActiveWindow.ScrollRow = 29088

ActiveWindow.ScrollRow = 29016

ActiveWindow.ScrollRow = 28874

ActiveWindow.ScrollRow = 28802

ActiveWindow.ScrollRow = 28731

ActiveWindow.ScrollRow = 28660

ActiveWindow.ScrollRow = 28517

ActiveWindow.ScrollRow = 28446

ActiveWindow.ScrollRow = 28375

ActiveWindow.ScrollRow = 28303

ActiveWindow.ScrollRow = 28161

ActiveWindow.ScrollRow = 28090

ActiveWindow.ScrollRow = 28018

ActiveWindow.ScrollRow = 27947

ActiveWindow.ScrollRow = 27876

ActiveWindow.ScrollRow = 27804

ActiveWindow.ScrollRow = 27733

ActiveWindow.ScrollRow = 27662

ActiveWindow.ScrollRow = 27591

ActiveWindow.ScrollRow = 27519

ActiveWindow.ScrollRow = 27377

ActiveWindow.ScrollRow = 27305

ActiveWindow.ScrollRow = 27234

ActiveWindow.ScrollRow = 27163

ActiveWindow.ScrollRow = 27020

ActiveWindow.ScrollRow = 26949

ActiveWindow.ScrollRow = 26878

ActiveWindow.ScrollRow = 26806

ActiveWindow.ScrollRow = 26735

ActiveWindow.ScrollRow = 26307

ActiveWindow.ScrollRow = 26093

ActiveWindow.ScrollRow = 25880

ActiveWindow.ScrollRow = 25666

ActiveWindow.ScrollRow = 25452

ActiveWindow.ScrollRow = 25380

ActiveWindow.ScrollRow = 25238

ActiveWindow.ScrollRow = 25167

ActiveWindow.ScrollRow = 25095

ActiveWindow.ScrollRow = 24953

ActiveWindow.ScrollRow = 24881

ActiveWindow.ScrollRow = 24810

ActiveWindow.ScrollRow = 24739

ActiveWindow.ScrollRow = 24596

ActiveWindow.ScrollRow = 24525

ActiveWindow.ScrollRow = 24454

ActiveWindow.ScrollRow = 24382

ActiveWindow.ScrollRow = 24311

ActiveWindow.ScrollRow = 24169

ActiveWindow.ScrollRow = 24097

ActiveWindow.ScrollRow = 24026

ActiveWindow.ScrollRow = 23955

ActiveWindow.ScrollRow = 23812

ActiveWindow.ScrollRow = 23741

ActiveWindow.ScrollRow = 23670

ActiveWindow.ScrollRow = 23598

ActiveWindow.ScrollRow = 23527

ActiveWindow.ScrollRow = 23384

ActiveWindow.ScrollRow = 23313

ActiveWindow.ScrollRow = 23242

ActiveWindow.ScrollRow = 23170

ActiveWindow.ScrollRow = 23099

ActiveWindow.ScrollRow = 23028

ActiveWindow.ScrollRow = 22957

ActiveWindow.ScrollRow = 22885

ActiveWindow.ScrollRow = 22814

ActiveWindow.ScrollRow = 22671

ActiveWindow.ScrollRow = 22600

ActiveWindow.ScrollRow = 22529

ActiveWindow.ScrollRow = 22458

ActiveWindow.ScrollRow = 22386

ActiveWindow.ScrollRow = 22315

ActiveWindow.ScrollRow = 22172

ActiveWindow.ScrollRow = 22101

ActiveWindow.ScrollRow = 22030

ActiveWindow.ScrollRow = 21959

ActiveWindow.ScrollRow = 21816

ActiveWindow.ScrollRow = 21745

ActiveWindow.ScrollRow = 21673

ActiveWindow.ScrollRow = 21531

ActiveWindow.ScrollRow = 21460

ActiveWindow.ScrollRow = 21388

ActiveWindow.ScrollRow = 21317

ActiveWindow.ScrollRow = 21174

ActiveWindow.ScrollRow = 21103

ActiveWindow.ScrollRow = 21032

ActiveWindow.ScrollRow = 20960

ActiveWindow.ScrollRow = 20818

ActiveWindow.ScrollRow = 20747

ActiveWindow.ScrollRow = 20675

ActiveWindow.ScrollRow = 20533

ActiveWindow.ScrollRow = 20461

ActiveWindow.ScrollRow = 20390

ActiveWindow.ScrollRow = 20319

ActiveWindow.ScrollRow = 20176

ActiveWindow.ScrollRow = 20105

ActiveWindow.ScrollRow = 20034

ActiveWindow.ScrollRow = 19891

ActiveWindow.SmallScroll Down:=102

Rows("2:20000").Select

Selection.Copy

Sheets("EXCEL1").Select

Range("A2").Select

ActiveSheet.Paste

End Sub

Voila ,

(une petite précision, dans ma macro je copie toutes les lignes de EXCEL2 et les colles dans EXCEL1 après avoir mis en forme les colonnes)

Maintenant la prochaine étape consiste à ne copier que les lignes qui répondent à des critères bien précis ; en fait la colonne "groupe" rassemble bcp de valeurs différentes et je ne dois récupérer qu'une vingtaine de groupes.

Penses-tu qu'il soit possible d'intégrer dans la macro un code qui permet de sélectionner uniquement les lignes qui répondent à des critères (en fonction du type de groupe)?

J'en demande bcp je sais le titre du topic se justifie petit à petit.

Merci à toi et à tes neurones pophop. ^^

Salut Niay,

maintenant que tu a saisi le principe, ça devrait aller tout seul pour tes sélections sur des groupes.

Tu enregistre une macro dans laquelle tu met en place un filtre automatique et tu filtre tes données selon les critères qui t'intéressent.

tu colle ce code avant cette ligne : Rows("2:20000").Select

de manière à ce que seuls les données que tu souhaite copier soient visibles à l'écran.

(si tu a une multitude critères sur un même champ et que tu n'arrive pas à tous les intégrer dans les critère et & ou des filtres, pas de problème, il suffira de répéter l'opération)

ATTENTION, cela introduit une variante dans l'étape de copier coller, avec des données filtrées il faut prendre garde à ne copier que ces données.

Pour ce faire tu enregistre une nouvelle macro où : tu sélectionne tes données comme précédemment mais avant de faire copier, tu fais : Menu Edition / Atteindre / Cellules / Cellules visibles seulement / OK. (voici la ligne de code intéressante générée : Selection.SpecialCells(xlCellTypeVisible).Select

tu colle ce code entre ces deux lignes :

Rows("2:20000").Select

Selection.Copy

Bonus : Dans ton code tu peux supprimer ou commenter (pour commenter tu let un ' en début de ligne, tu verra que la ligne se colore en vert, cela signifie qu'elle ne sera pas executée, tu peux ainsi commenter ton code afin d'y voir plus clair et de t'y retrouver, ça sert vraiment, tu verra)

toutes lignes de ce type : ActiveWindow.ScrollColumn = XXX

cette commande correspond au défilement vertical que tu effectue avec la molette ou les ascenseurs n'a aucun effet dans l'exécution de la macro à part la ralentir en te faisant défiler les lignes.

Tiens moi au courant de tes avancées.

PS : je pars demain en vacances pendant 15 jours, donc demain soir...

RE à tous,

Quelqu'un aurait une idée pour filtrer un fichier source en fonction de plusieurs critères situés dans la même colonne?

Je ne maitrîse pas le filtre élaboré et je n'arrive pas à effectuer ce que je souhaite, je m'explique :

Dans mon fichier source, il y a une colonne "groupe", je dois filtrer le fichier de manière à laisser apparaître uniquement les lignes correspondant à certains groupes (exemple : coca cola , areva, nestlé).

Il me semble qu'il faut utiliser une zone de critères pour cela; doit-elle se situer sur la feuille-même? Puis-je la placer dans un autre fichier excel?

Merci à tous,

Cordialement,

Etienne

Bonjour niay, forum,

Pourquoi n'adapte-tu pas à ton cas (qui me semble assez similaire) ce que tu as appris sur ce fil ? : https://forum.excel-pratique.com/viewtopic.php?t=12495

Je pense que tu es en mesure de le faire.

Si vraiment problème, reviens.

Oui vba-new, tu as raison, mais je ne suis pas arrivé à un résultat très convaincant, j'ai besoin de précisions, si tu as des réponses je suis prêt à les lire sur ce topic, ou sur l'autre :]

Crdlt,

Etienne

Rechercher des sujets similaires à "programmation macro compliquee"