Une boucle pour selection et enregistrement de données

Rebonjour

Vu le nombre de réponse à ma demande d’hier « créer une Boucle dans une macro Excel pour copiage de fichier » , je pense que j'ai pas été tres clair.

J’ai un gros fichier compilant des données concernant des sociétés différentes les unes au dessus des autres, et ce pour plusieurs onglets avec pas mal de formules

On me demande pour chaque société de sélectionner les bonnes données et de les enregistrer en dur dans des fichiers séparés, tout en gardant les mêmes onglets.

Cependant vu le nombre de société (+100) et d’onglets (5), une macro classique est trop grande pour tout faire d’un coup. Rien que pour une société ca me fait qqchose dans ce gout là :

*** j’ouvre un fichier modele***

Workbooks.Open Filename:="K:\Modele.xlsx"

*** Je copie des données dans Fichierbase onglet CAT et les colle dans CAT-Modele

Windows("Fichierbase.xlsm").Activate

Sheets("CAT").Select

Rows("4:184").Select

Selection.Copy

Windows("Modele.xlsx").Activate

Sheets("CAT").Select

Range("A4").PasteSpecial Paste:=xlPasteValues

Windows("Fichierbase.xlsm").Activate

*** Je copie des données dans HAI-Fichierbase et les colle dans HAI-Modele

Sheets("HAI").Select

Rows("4:124").Select

Selection.Copy

Windows("Modele.xlsx").Activate

Sheets("HAI").Select

Range("A4").PasteSpecial Paste:=xlPasteValues

Windows("Fichierbase.xlsm").Activate

*** Je copie des données dans COMP-Fichierbase et les colle dans COMP-Modele

Sheets("COMP").Select

Rows("10:194").Select

Selection.Copy

Windows("Modele.xlsx").Activate

Sheets("COMP").Select

Range("A10").PasteSpecial Paste:=xlPasteValues

Windows("Fichierbase.xlsm").Activate

*** idem pour CA3

Sheets("CA3").Select

Rows("2:52").Select

Selection.Copy

Windows("Modele.xlsx").Activate

Sheets("CA3").Select

Range("A2").PasteSpecial Paste:=xlPasteValues

Windows("Fichierbase.xlsm").Activate

*** et idem pour OPTIM sauf que la je fait calculer la feuille

Sheets("OPTIM").Select

Range("A1").Select

ActiveCell.FormulaR1C1 = "427"

ActiveSheet.Calculate

Range("A1:N48").Select

Application.CutCopyMode = False

Selection.Copy

Windows("Modele.xlsx").Activate

Sheets("OPTIM").Select

Range("A1").PasteSpecial Paste:=xlPasteValues

Je compte donc me servir d’un tableau pour créer des variables CODESOC, CODEONGLET, LIGNEDEB, LIGNEFIN pour faire une boucle et faire ce travail à la chaine.

Suivant le tableau LISTE en PJ, CODESOC irait de 427 à W01, CODEONGLET irait de CAT à CA3, LIGNE DEB de 4 à 2201 et LIGNEFIN de 52 à 2385, (tout dépend de l’onglet ou du code société).

Je pense qu’il faudrait des valeurs a cette matrice LISTE et faire des boucles mais je ne sais pas faire.

Merci beaucoup pour votre aide

8liste.xlsx (12.93 Ko)

Bonjour,

Je me souviens avoir contemplé ton fichier hier, qui m'a paru imbuvable et pas organisé selon les spécifications que tu détaillais... Là je ne sais si tu abordes ton sujet différemment, j'ai en tout cas l'impression d'un autre sujet !

S'il s'agit de générer des classeurs par fournisseur (listés en col. A de ta base de donnée), il faut l'exprimer ainsi pour qu'on comprenne clairement ce dont il s'agit, et indiquer les modalités à respecter ainsi que toutes les caractéritiques des résultats à obtenir. De même, ton classeur modèle doit refléter aussi exactement que possible les données sur lesquelles tu dois opérer (nombre de colonnes, types de données, particularités des données...). On ne peut tenir compte que de ce qu'on voit !

Il y a diverses méthodes utilisables (et la question a été traitée maintes fois sur le Forum). Mais tu peux flanquer ton code à la poubelle, un code efficace ne comporte ni Select ou Activate et autre Selection, ne procède autant que possible pas par copier-coller, utilisera des tableaux et boucles avec lesquels VBA sera rapide...

Sous réserve de précisions sur ta base de données de départ, la méthode que je préconiserais :

  • recenser les fournisseurs (au moyen d'un dico, en listant pour chacun les lignes à prélever,
  • boucle sur les fournisseurs recensés, dans laquelle pour chacun :
  • on prélève les lignes le concernant à exporter (tableau)
  • on génère un nouveau classeur (à une feuille)
  • on y affecte les données (globalement)
  • mise en forme (si prévue ?)
  • on enregistre et ferme le classeur avant de passer au fournisseur suivant.

Cordialement.

Bonjour MFerrand

D'abord Grand merci pour ta réponse,

J'avoue qu'en macro je suis plutôt novice (j'y connais rien en boucles) et qu'en plus de ça j'ai un peu de mal a décrire mon pb. Mais malgré çà je sens que ca avance

Bref oui il s'agit bien de créer des classeurs pour chaque société (je bosse dans un groupe). (En vrai il s'agit de cadrages de TVA mais peu importe).

La base de donnée :

Elle est assez lourde car contient beaucoup de liens (vers un autre export de compta) et de formules, (j'ai sucré pas mal de colonnes pour que ca passe en taille dans mon premier fichier d'avant hier). Grâce aux liens il remonte tout le Chiffre d'Affaire et le ventile suivant les tx de TVA. Tous les mois l'export est refait et les données changent. D’où la nécessité de stocker en dur tous les mois. il y a une exigence supplémentaire : on me demande de 1 fichier par société.

La base de données est découpée par pack de 200 lignes, ceci dans chaque onglet et toujours dans le même ordre de société. Ya juste un petit décalage de données pour la première société à cause des titres. Et puis il y a un onglet spécial OPTIM ou je rentre en A1 le code société pour calculer la feuille, pas d'empilage la dedans.

Tout n'est pas rempli dans cette base, beaucoup de lignes vides c'est pour ca que mes copiés-collé ne prenaient pas tout,

Le fichier modèle :

oui c'est bien l'image du fichier de base mais que pour 200 lignes, (couleurs bordures et nb de colonnes idem dans chaque onglet...), il est donc prêt à accueillir des valeurs. Je me doutais que mon code était un peu barbare et peu efficace, j'aimerais bien le bazarder; le pb c'est qu'il fonctionne et que je ne sais pas m'y prendre autrement pour l'instant.

Ta méthode me parait alléchante, un dico, une boucle mais par contre je n'ai pas le choix on doit retrouver les mêmes onglets dans la sauvegarde, doit pas y avoir qu'une seule feuille..

J'ai l'impression déjà dans ta nouvelle méthode que ce serait plus simple si j’insérais dans la base les titres toutes les 200 Lignes non ?

C'est super si le sujet a déjà été traité de nombreuses fois mais dans ce cas où que je peux trouver réponses simples qui pourraient m'aider ? J'ai cherché dans le sujet boucle mais je n'ai rien trouvé. Je vais déjà chercher le mot dico pour voir comment ca se crée

Merci à toi

Bonjour,

Je croyais cette histoire de 200 lignes abandonnée dans la redéfinition de ton sujet. Et que le sujet était devenu : partir d'une feuille pour en générer 5 dans des classeurs distincts.

Si on revient à 5 feuilles au départ, dont la présentation n'est pas homogène, plus les 200 lignes qui se présentent diversement et sont de ce fait un handicap... Là je pense qu'il faut d'abord assainir la situation de départ pour pouvoir traiter dans de bonnes conditions.

Cordialement.

Rechercher des sujets similaires à "boucle selection enregistrement donnees"