Créer une boucle ou une répetition en descendant dans le fichier d'origine

Bonjour

Je suis nouveau dans la création et enregistrement de macro et je cherche a me former. J'ai lu les cours VBA sur les boucles mais plusieurs choses m'échappent.

J'ai enregistré une macro pour qu'elle soit capable de créer des lignes a partir d'un fichier de départ en feuille 1.

Elle ouvre un feuille 2 et alimente avec la ligne 1 de la feuille 1 une construction de 5 lignes .

Mon problème est que je n'arrive pas créer une boucle ou une répétition de cette macro a toutes les lignes de la feuille 1.

Merci d'avance

15testv2.xlsm (23.93 Ko)

Bonjour,

Je suis nouveau dans la création et enregistrement de macro et je cherche a me former.

Bonne idée, mais l'enregistrement de macro est un moyen de ne pas se former.

Tu obtiens un code à rallonge, bourré d'inutilités, imbuvable à la lecture, qui ne fait qu'additionner des manipulations, y compris les fausses, à l'opposé de la conception d'un programme réfléchi à partir d'un objectif.

A preuve, tu insères des formules dans une feuille ajoutée faisant appel à Feuil1, que tu supprimes à la fin, ce qui supprimera du même coup les références de tes formules.

Et pour réaliser une opération en boucle, il faut la penser au départ : boucler sur chaque ligne de la feuille source explicitement, et dans la procédure à exécuter faire référence explicitement à cette ligne, ce qui n'est pas le cas dans ton code enregistré ! Et si une ligne source = 5 lignes cibles tu incrémentes en conséquence ta cible à chaque tour.

Cordialement.

Bonjour

À la suite du message de Ferrand , c'est vrai qu'un enregistrement de macro accumule énormément de ligne. Suite a ce message j'ai pris mon temps sur la construction de la macro.

Après l'avoir fortement allégé, je suis en berne pour créer la boucle. j'ai lu et relu la formation VBA sur ce site mais j'ai beau essayé plusieur FOR rien ne fonctionne .

Je modifie tous les RANGE en CELL mais la boucle ne se lance pas ??

Je dois partir de mon fichier d'origine pour créer des lignes de réception avec une codification particulière et j'aimerais que la macro le fasse jusqu'à la fin de mon tableau

Si quelqu'un a une idée pour m'aiguiller sur ma réflexion

16testv2.xlsm (26.43 Ko)

Bonjour kimka29,

je te retourne ton fichier modifié :

18testv2.xlsm (24.49 Ko)

j'ai seulement optimisé ton code VBA ; je n'ai pas fait la boucle.

fais Ctrl e ; vérifie bien toutes les données ; si tu vois des anomalies, dis-moi lesquelles.


tu avais utilisé NOW() qui met la date et l'heure ; j'ai supposé qu'en fait, tu voulais seulement la date.

si j'me suis trompé là-dessus, dis-moi et j'ferai la modif pour que tu aies la date et l'heure.


Alt F11 pour voir le code VBA, puis revenir sur Excel

à te lire pour avoir ton avis.

dhany

bonjour à tous

quand on utilise Excel correctement* on n'a pas besoin de VBA

1 - à quoi sert ton fichier ?

2 - comment est organisé ton système de fichiers s'il y en a plusieurs ?

* on peut en discuter à l'infini

à te relire

Merci Dhany, je n ai pas encore pris le temps de regarder ta version mais je le ferais ce week-end.

Pour répondre à Jmd, je vais avoir quotidiennement un fichier de plusieurs sans vraiment savoir à l avance combien (ça peut aller de 85 à 150)

Le but de la macro est de créer un fichier avec une codification particulière et de l injecter en format csv dans un serveur. Dans la macro il y a une partie de création dans certaines cellules et une partie de prise de données dans le fichier source.

En clair, je reçois un fichier qui change chaque jour et je créer un nouveau fichier d autant de ligne que contient le fichier source

Merci Dhany pour l allègement de la macro, je ne savais pas qu on pouvait l alléger à ce point 😂

Par contre pour créer la boucle sur la macro, j utilise un For mais dans le cours Vba il faut appeler les Cells hors sur la macro il n y en a pas ?

Bonjour kimka,

si tu m'donnes plus d'infos sur c'que tu veux faire au juste, j'essayerai de t'aider à faire la boucle.

dhany

En fait la macro pour l instant crée la première ligne de données par rapport au info de la première ligne de la feuille 1 et j aimerais qu’elle crée autant de ligne de données que comporte la feuille 1

La première ligne de données prend des infos sur la ligne 2 de la feuille 1

La seconde ligne de données prend des infos sur la ligne 3 de la feuille 1 et ainsi de suite jusqu a la fin en respectant sur chaque ligne la codification particulière de la macro

j'viens d'ouvrir à nouveau ton fichier ; alors sur la 2ème feuille crée : peux-tu m'confirmer ceci : la macro écrit bien toutes les bonnes données, dans le bon format (date ou autre), sur la ligne 1, colonnes A à EM ; as-tu besoin d'un changement ou c'est ok comme ça ?

ensuite : que doit faire la boucle ? copier des données de la feuille 1 sur la feuille 2 ? si oui : quelles sont les données à copier ? celles de toutes les lignes de la feuille 1, mais quelles colonnes ? quel doivent être les cellules de destination sur la feuille 2 ?

mais peut-être que tu veux une boucle pour faire une toute autre chose ? à te lire pour la suite.

dhany

@kimka29

on s'est croisés, et j'viens d'lire ton post précédent ; j'ai compris l'idée générale, mais voici par exemple c'qui ne va pas :

[A1] = "ECEA" : ça met en cellule A1 le texte "ECEA", mais cette donnée "ECEA" n'existe pas sur la 1ère feuille ! ni en ligne 2, ni même sur une autre ligne ! alors comment veux-tu qu'on puisse reprendre des données de la 1ère feuille pour les mettre sur la 2ème ?

tu dois écrire quelque chose de ce genre :

je voudrais copier des données de la 1ère feuille sur la 2ème feuille pour toutes les lignes de données (donc pour les lignes 2 à 10) ; cela pour telle et telle colonne source, à telle et telle colonne de destination ; voici 3 exemples déjà ok pour la ligne 2 :

en A2 : le « Load number » 1000486393 doit être copié en colonnes AH, AR, CU, EM

en C2 : le « Transport number » X11617654 doit être copié en colonne D, Q, W

en Y2 : le « LEG Delivery ID » 301065001 doit être copié en colonne AA

mais tu dois donner la correspondance de colonnes pour toutes les autres données à copier ; et surtout, indiquer sur quoi on doit se baser pour mettre "ECEA" en A1 ! idem pour tout autre cas semblable ! 2400 de B1 et U de C1 : tu les sort d'où ? c'est p't'être juste des conventions, mais nous, on les connaît pas !

cela dit, j'te dispense de préciser pour chaque donnée qu'c'est d'la 1ère feuille sur la 2ème : ça c'est clair, c'est ok !

dhany

Merci pour ta réponse

En te lisant je comprends mieux la complexité de la mise en forme. Les données ECEA , U, 2400 et tous autres non pris dans la feuille 1 sont en effet une codification particulière qui sera compris par un logiciel de transport pour créer des réceptions et des expéditions au jour le jour .

Sur une boucle on peut pas lui dire de prendre la valeur de la ligne du dessus au fur et à mesure de la macro

Genre A2=A1et A3=A2et ainsi de suite

Merci Pour ton aide et ta patience

Bonjour kimka,

version du fichier avec boucle :

17testv3.xlsm (27.56 Ko)

Ctrl e ➯ travail effectué !


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour Dhany

Merci beaucoup pour cette macro, je trouve ta réflexion très intéressante pour sa construction, je suis fan

En déposant sur mon serveur pour la création de colis, il s'avère en fait, que les lignes de commandes (ECEA, LCEA, LOP, DOP ...) sont a mettre à la ligne. J'ai donc modifier ta macro mais j'ai un souci sur chaque fin de ligne (je dois la mettre en .csv) et sur chaque ligne j'ai des points virgule et je ne trouve le paramètre pour les enlever (Voir PJ)

Si tu as une idée d'où vient le bug pour supprimer les ; de fin de lignes qui correspondent aux cases "xcel

Merci d'avance

lcea
4testv4.xlsm (29.75 Ko)

Bonsoir kimka,

dans le code VBA, tu as fais des modifs comme par exemple : s = sh.Cells(lg1, 77)

mais la colonne 77 est la colonne BY qui est vide ! alors quelle utilité ?

tes séries de virgules semblent être à cause de ces données vides ! vérifie bien tes n° de colonnes !

comme ta nouvelle demande est avec un fichier csv, je laisse la suite à un autre intervenant.

bonne chance !

dhany

Rechercher des sujets similaires à "creer boucle repetition descendant fichier origine"