Creer une Boucle dans une macro Excel pour copiage de fichier

Bonjour

J'ai un fichier de base compilant pour chaque onglet des données afférent à des dossiers différents.

En gros j'ai 5 onglets avec dans chacun 200 lignes réservées pour le dossier1, puis en dessous 200 lignes pour le dossier 2, etc jusqu'au dossier 34 et pareil pour chaque onglet.

J'ai construit une macro qui enregistre dans X fichiers différents les données correspondantes à chaque dossier.

Pour le dossier 1 Elle copie les lignes de chaque onglet et enregistre ca dans un fichier. puis passe au dossier suivant.

telle qu'elle est là elle fonctionne (COL I - Listing Macro). je la construis d'apres qq formules et une liste qui indique quelle plage de ligne est réservé pour chaque dossier, chaque onglet (LISTE).

Du coup ma macro initiale fait d'abord appel un modele initial servant de receptacle à ces données, mais là évidement cela ne marchera pas sans lui. Vous pourrez peut etre zapper cette étape.

Mon souci en fait est ailleurs. Elle est trop longue, j'ai32 dossiers différent et pour chacun beaucoup de commandes qui se répetent. Si je passe à 50 voire 100 dossier j'ai un gros probleme et elle se met en erreur. (même en selectionnant les oui/non)

Comment pourrais-je créer une boucle sachant que je me réfère aux données d'une matrice contenue dans "LISTE" ?

Merci beaucoup

Didier

18cadtva.xlsx (752.61 Ko)

Bonjour Didi75 le forum

Ta macro faites avec l'enregistreur de macro, de 1100 lignes !!!!!!

je n'ai pas le courage de la refaire propre, mais une certitude tu pourrais déjà la réduire considérablement, car tous tes select sont pratiquement tous inutile du moins sur le début de la macro 200 lignes que j'ai regardé

Par contre tu parles d'utiliser ta macro dans une boucle, mais si j'ai compris c'est juste pour que le cadrage soit différent???

a+

Papou

Bonjour Didier, paritec,

une macro de 1100 lignes, rien qu'ça ?

moi non plus, j'aime pas trop les macros roman-fleuve !

dhany

Re Bonjour Didi75 le forum

juste pour exemple, mais dans ton code il faut que les deux classeurs soient déjà ouvert, pas nécessairement bon vu ce que tu veux traiter, il vaudrait mieux les ouvrir, uniquement lorsque tu en as besoin.

a+

Papou

le code ci-dessous

Workbook("Calcul Cadrages TVA DidierD 06 v3.xlsm").Sheets("HA intraco  par taux").Rows("4:124").Copy
    Workbook("Modele cadrage DD.xlsx").Sheets("HA intraco  par taux").Range("A4").PasteSpecial Paste:=xlPasteValues

fait exactement la même chose que celui ci-dessous en plus rapide

Windows("Calcul Cadrages TVA DidierD 06 v3.xlsm").Activate
    Sheets("HA intraco  par taux").Select
    Rows("4:124").Select
    Selection.Copy
    Windows("Modele cadrage DD.xlsx").Activate
    Sheets("HA intraco  par taux").Select
    Range("A4").PasteSpecial Paste:=xlPasteValues

Hello Paritec

Ah ca y est je m'y remets enfin sur ces de cadrages TVA..

Donc pour mettre plusieurs commandes sur une même ligne suffisais juste de les séparer par des points .

Ca va faire moins roman mon histoire et sans doutes que l'histoire de créer une boucle ne sera plus nécessaire après ça.

J'essaye d'avancer et te tiens au courant.

Merci à toi

Petite question subsidiare,

du à une certaine doléance dont je me serais bien passé je dois incorporer certaines lignes, exemple copier des colonnes et les remplacer par des valeurs. Comment mettre ca en moins de lignes possibles

Columns("AH:AO").Select

Application.CutCopyMode = False

Selection.Copy

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

:=False, Transpose:=False

Et puis remplacer dans une zone certains libellés ( [Calcul Cadrages TVA DidierD 06 v3.xlsm] ) par rien

Le mot à mot donne ca :

Rows("1:280").Select

Selection.Replace What:="[Calcul Cadrages TVA DidierD 06 v3.xlsm]", _

Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:= _

False, SearchFormat:=False, ReplaceFormat:=False

Mais y aurait'il moyen là aussi de réduire les lignes ?

Merci

Bonjour

J'ai eu ma réponse sur un autre forum

J'ai bien un code qui marche pour Remplace :

Range("A1:G40").Replace What:="toto", Replacement:="titi", LookAt:=xlPart

Par contre pour copie colle je il me faudrait le même code que ca :

Range("p3:p31").Copy Destination:=Range("p35")

Mais sans les formules (avec copie valeurs)

Pouvez vous m'aider SVP ?

Merci beaucoup

Bonjour Didier,

je te propose ce code VBA :

[P3:P31].Copy: [P35].PasteSpecial xlPasteValues

ou en plus court :

[P3:P31].Copy: [P35].PasteSpecial -4163

dhany

Merci Dhany

Je vais pouvoir écourter tout ça

merci pour ton retour ! bonne continuation !

dhany

Bonjour Dhany

En fait j'y arrive pas quand il s'agit de classeurs différents. Le code à Paritec ne marche pas, pb avec "Workbook".

En fait j'ai créé un nouveau ticket "Copier coller selection dans nouveaux classeur", pour isoler mes petits problèmes

peux etre peux tu m'aider..

Merci à toi

Bonjour Didier,

j'ai regardé le post de ton autre sujet « Copier coller selection dans nouveaux classeur » ; en fait, j'préfère éviter les sujets avec plus d'un classeur (sauf exceptions) ; j'espère qu'un autre intervenant pourra t'aider ; bonne chance !


je mets ici le lien sur ton autre sujet, pour ceux qui seraient intéressés :

https://forum.excel-pratique.com/viewtopic.php?p=706822#p706822

dhany

Ca repond pas beaucoup pour l'instant..

Je vais essayer de contourner le pb et virant toutes les lignes qui m'interessent pas

J'ai un code comme ca

Rows("115:139").Select

Selection.Delete Shift:=xlUp

Peux tu arriver toi a me le mettre sur une seule ligne, ou utiliser les crochets comme tu m'as montré ?

comme ceci : Rows("115:139").Delete

les crochets sont pour un Range, du genre [D5] ou [D5:G10], pas pour une ligne

comme tu supprimes des lignes entières, Shift:=xlUp est inutile !

enfin, c'est inutile de faire une sélection des lignes à supprimer

dhany

bonjour Didi75 le forum

Le code à Paritec ne marche pas,

si tu sors le code de son contexte cela ne marche plus c'est tout à fait normal.

a+

Papou

Rechercher des sujets similaires à "creer boucle macro copiage fichier"