VBA - Copier Coller lignes avec plusieurs critères
Bonjour à la communauté !!
J'ai besoin d'aide parce que je n'ai jamais fait de VBA mais ça m'intéresse fortement du fait des capacités de l'outil ! Je ne connaissais pas jusqu'à y'a 2 mois...
J'aurais besoin d'aide parce que je sais que VBA en est capable.
Je m'explique. Chaque semaine, je reçois un fichier avec des données (cf PJ.)
Je dois regarder la colonne J et découper le fichier selon des codes communes (exemple 60004, 600018, 60046 etc. Bien évidemment, j'adapterai mon code une fois que j'aurais un début de code parce que là
Par exemple, dans le tableau que je reçois, je souhaite récupérer toutes les lignes (ça commence colonne B jusqu'à colonne BA)
qui ont le cd commune "60004" (colonne J) et les coller dans un nouvel onglet.
Comme c'est un travail récurrent, ça me CHANGERAIT et FACILITERAIT tellement la vie !
Encore merci à toutes et à tous pour vos aides !
J'espère avoir été suffisemment clair...
Kéké
Salut,
Je te propose une solution un peu simpliste mais qui fonctionne bien.
On pourrait créer un fichier dans lequel tu copierais toutes les semaines la feuille des données à traiter et qui ferait le travail.
Pour l'instant, tu devrais copier chaque semaine les données à traiter (à la place de traiter une feuille pour elle même) et les coller dans la feuille ''donnees'' actuelle.
Amicalement.
Bonjour Yvouille !
Merci pour ta rapidité ! Impressionnant
Je suis trop excité de regarder ça et d'essayer de comprendre. Je te fais mon retour ASAP
Encore 1000 mercis !
Impressionnant !!
Vraiment je tombe amoureux de VBA. Impressionnant ce qu'on arrive à faire ! Et l'idée de rafraichir seulement les données, juste en cliquant sur les boutons. Tout simplement Bravo ! C'est peut etre basique pour vous mais pour moi, c'est comme de la magie ! Je suis bouche bée.
Pour aller plus loin, si VBA est capable de créer des onglets, on peut aussi créer de nouveaux fichiers ? Par exemple ici, au lieu d'avoir des créations d'onglets, on pourrait créer de nouveaux fichiers ? C'est faisable ?
Encore 1000 mercis, j'en reste sans voix !
Pour aller plus loin, si VBA est capable de créer des onglets, on peut aussi créer de nouveaux fichiers ? Par exemple ici, au lieu d'avoir des créations d'onglets, on pourrait créer de nouveaux fichiers ? C'est faisable ?
Oui, absolument, mais alors l'approche devrait être un peu différente.
J'avais indiqué que j'avais choisi une solution un peu simpliste dans ce sens que mon code passe en revue toutes les lignes, ajoute une nouvelle feuille si nécessaire et y ajoute les données de la ligne passée en revue ou ajoute simplement une ligne à une feuille déjà créée.
L'autre solution aurait été de filtrer la feuille de données sur chacune des valeurs de la colonne J et de reporter en bloc toutes les lignes d'une même référence.
Afin de créer un fichier pour chaque référence, il vaudrait donc mieux - selon moi - partir sur cette idée de filtrer les données, de créer un nouveau fichier et d'y transférer les données en bloc pour chaque référence. Sinon ça risque d'être assez lourd de créer un fichier à chaque fois que c'est nécessaire et de visiter 1, puis 2, puis xx fichiers afin d'y ajouter les nouvelles données ligne après ligne, comme je les fais pour les feuilles actuelles.
Une autre solution simpliste consisterait - puisque nous avons maintenant x nouvelles feuilles avec des données séparées - de reprendre ces feuilles l'une après l'autre et de les déplacer dans x nouveaux fichiers.
Mais, afin de faire un travail plus propre, je ne voudrais pas me lancer dans la transformation de mon code sans savoir si le besoin est réel ou si c'est juste de la curiosité. On pourrait imaginer avoir un fichier de base qui irait soit ouvrir le fichier contenant les données à traiter, soit qui traiterait un fichier déjà ouvert à l'écran, qui créerait autant de nouveaux fichiers que nécessaires et qui refermerait tous les fichiers nécessaires, y compris lui-même.
Les nouveaux fichiers peuvent être placés assez simplement dans le même dossier de ton arborescence que le fichier de base ou - avec un minime complication - à un autre endroit précis de cette arborescence. L'avantage de placer les dossiers nouveaux dans le même dossier que celui où se trouve la base est que tu peux utiliser cette base sur plusieurs PC différents et ça fonctionne toujours, sinon tu dois avoir la même arborescence sur les diverses machines sur lesquelles serait utilisé le fichier de base.
L'idéal pour démarrer quelque chose de valable serait de recevoir un fichier brut de tes données - avant toute transformation - et avec son titre original. Et puis avoir un peu de patience, car je n'ai pas toujours autant de temps à te consacrer qu'actuellement.
Alors ?
Bonjour Yvouille !
On ne se connaît pas mais j'aurais vraiment aimé faire ce codage ensemble. Comprendre chaque étape, chaque synthaxe ensemble etc. Ca me fascine vraiment.
Alors pour répondre à ta question, oui, c'est vraiment un besoin professionnel. D'ailleurs, nous sommes une équipe de 9, chacun se servira de ce VBA avec ses propres statistiques. Une fois qu'on aura le code, je pense qu'on sera capable de l'adapter (si on ne veut plus le code commune mais le code département etc.) Donc oui c'est vraiment important. C'est de la curiosité quant aux capacités de VBA mais c'est du concret parce que le projet s'encre dans le réel, la vie professionelle.
Concernant les hypothèses, je ne veux pas t'infliger un trop gros travail. Ca me rend mal à l'aise. Parce qu'effectivement la version simpliste nous irait bien mais c'est vrai que l'idée de partir d'un fichier de base qui irait soit ouvrir le fichier contenant les données à traiter, soit qui traiterait un fichier déjà ouvert à l'écran, créerait ensuite de nouveaux fichiers des communes et qui le refermerait tous, y compris lui-même me semble effectivement l'idéal. Après comme tu le dis, c'est une question de temps. Je ne veux vraiment rien t'imposer, libre à toi, selon tes dispos, de developper une solution qui respect temps/travail/dispo. Donc encore une fois, on travail sur un réseau, donc avoir les fichiers au même endroit pour tous serait parfait !
On part d'un fichier d'origine qu'on nous transmet. On l'ouvre via Notepad, puis on copie toutes les données sur excel. De là, on clique sur le menu Données, puis Convertir et découpe via le séparateur point-virgule. Une fois le fichier découpé, mis en forme. On insere une ligne en haut du tableau, puis on fait un comptage sur la cellule A1.
Cette partie de découpage, on peut la réaliser. Ca me semble compliqué à mettre en place pour toi. De ce fait, le fichier d'origine que je t'ai donné, sera le tableau tel que nous le travaillons, après mise en forme. Je renomme donc le fichier d'origine avec son vrai nom, que tu trouveras en PJ. (fichier anonymisé bien évidemment)
Encore une fois 1000 mercis, je ne sais pas comment te revaudre ça !
A ta disposition !
Salut,
J’avais un peu peur de me replonger dans les codes concernant les filtres – raison pour laquelle je t’ai fourni mes réponses frileuses ci-dessus – mais obligé d’y aller vu ton insistance
Tu reçois donc le fichier Base ci-joint que tu dois enregistrer quelque part dans ton arborescence et que tu ouvres à l’écran seul. Lorsque tu lances la macro placée derrière le bouton en place, tu dois choisir le fichier à traiter.
Une fois cela fait, tu patientes un peu et tout devrait se liquider tout seul.
En fait, tu vas de voir patienter probablement beaucoup
Si tu as une machine bien plus rapide que la mienne, ce temps d’attente peut être considérablement réduit, ……. ou prolongé dans le cas contraire. Mais si tu profites de lancer cette macro avant d’aller fumer une cigarette, le temps te paraîtra moins long.
Et si vraiment c’est insupportablement long, je présume que quelqu’un de plus doué trouvera une meilleure solution, par exemple sur ce Forum.
Afin de faire patienter l’utilisateur, mais également afin de pouvoir constater que les choses avancent, on pourrait ajouter un contrôle visuel de l’avancement. Si cela est souhaité, merci de me le faire savoir.
A la fin du travail, tous les fichiers sont refermés. Il faut aller voir le résultat dans ton explorateur de fichiers. J'ai ajouté la date de création dans le titre des fichiers créés, mais toute autre information serait envisageable (Référence quelconque à saisir ou à trouver dans le fichier, heure, minutes et/ou secondes, etc.).
Si tu t’intéresses aux macros, commence par suivre un cours comme celui proposé sur ce site (dans les menus, ‘’Cours VBA’’ et ‘’Cours VBA avancé’’, observe des codes qui existent, pose des questions, etc. Mais je pense qu’il faut y aller progressivement car un code tel que celui que j’ai créé pour toi est déjà du niveau 2 à 3 sur 10.
Amicalement.
EDIT : Tu as été un peu lent à me répondre, alors j'ai déjà ajouté la barre de progression
Bonjour !!
Encore merci pour le retour et le travail fourni ! Je suis impressionné. Vraiment.
Par contre, après avoir ouvert le fichier, je clique sur le bouton "Transfert" et là, une pop up d'information s'ouvre : "Microsoft Form - Impossible de charger le objet car il n'est pas disponible sur cette machine." Je clique sur "OK", VBA s'ouvre avec le message suivant : "Erreur de compilation : Membre de méthode ou de données introuvable." Il semble que ce soit au niveau de l'outil, de la barre de progression car dans le code, .ProgressBar1. est surligné.
Serait-ce dû à un problème de version ? J'ai Excel Office Standard 2010.
En tout cas, si ça marche, franchement j'en attendais pas tant ! Je suis comme un gosse ! Vraiment ça me fascine ce qu'on peut faire !
Encore 1 000 mercis pour le travail effectué jusqu'à aujourd'hui, vraiment respect éternel ! Si en plus la barre de progression fonctionne, alors là .....
Bon, même en supprimant la partie de code avec la barre de progression, j'ai un message d'horreur :
"Erreur d'exécution '1004' : Microsoft Excel ne peut accéder au fichier xxx. Plusieurs raisons sont possibles :"
Lorsque je clique sur Débogage, la ligne suivante est surlignée :
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Date & " - " & .Range("A" & i) & ".xlsx"
Mais de là à comprendre s'il manque une synthaxe ou autre...
Encore merci pour ton aide !
Salut,
C’est embêtant tout ça
Avant de transformer mon fichier pour y introduire la barre de progression, j’avais effectué une copie de mon ancienne version, fichier que je te fourni en annexe, nommé ‘’ Base de transfert - Avant modifs’’. Je te demanderais alors de bien vouloir tester cette ancienne version et de me dire comment elle va.
Avec cette version, le fichier de base ne se referme pas à la fin du boulot, mais ce n’est pas si important.
ATTENTION : Vu que, lors de tes essais, tu crées à chaque fois des fichiers qui portent les mêmes noms, ça peut créer des problèmes. Alors supprime bien tous les fichiers créés par la macro avant de lancer un autre essai. J’aurais pu ajouter, dans le titre des fichiers créés, l’heure, la minute et la seconde auxquelles ils ont été créés - afin de ne pas toujours devoir supprimer ces fichiers nouvellement créés - mais si le problème vient de cette instruction, on ne va pas en rajouter
"Erreur d'exécution '1004' : Microsoft Excel ne peut accéder au fichier xxx. Plusieurs raisons sont possibles :"
Ce message d’erreur pourrait venir à cause d’anciens fichiers non effacés selon mes instructions ci-dessus – mais ça m’étonnerait quand même un peu – ou alors d’une macro que tu aurais interrompue puis reprise en cours de route. Fais donc bien attention, pour tes essais, de repartir à chaque fois à zéro, c’est-à-dire d’avoir effacé tous les anciens fichiers créés par macro et en repartant du lancement de la macro par le bouton ‘’Transfert’’.
et là, une pop up d'information s'ouvre : "Microsoft Form - Impossible de charger le objet car il n'est pas disponible sur cette machine."
Il se peut que ce problème vienne d’une ‘’Référence’’ qui manquerait sur ta machine. La première chose à faire est de contrôler si tu as bien enclenché toutes les ‘’Références’’ que j’ai chez moi et qui permettent probablement l’utilisation des instructions nécessaires à cette barre de progression. Pour ce faire, dans l’explorateur VBA, va sous ‘’Outils/Références’’ et compare avec l’image ci-dessous. S’il te manque une référence, va la chercher en dessous et coche-la.
S'il te manquait une des ''Références'' qu'il y a chez moi, tu peux à nouveau tester la version que je t'avais fournie l'autre jour.
Afin d’avoir un fichier à traiter moins volumineux que celui que tu m’as fourni, j’ai créé le fichier ‘’ VTST52-319 – BIS’’ ci-joint, avec seulement 3 nouveaux fichiers à créer. Sur ma machine, la création de ces 3 fichiers dure moins d’une minute.
Amicalement.
Bonjour,
Une autre proposition à étudier.
l'idéal serait de mettre la procédure dans le classeur de macros personnelles (Personal.xlsb) et de mettre une commande dans la barre d'outils Accès rapide.
Le temps d'exécution est de +/-25 secondes pour créer les 24 fichiers de ton exemple.
A te relire.
Cdlt.
Merci pour vos retours, corrections et améliorations ! Vraiment ça nous touche (moi et toute l'équipe). Je test ça rapidement ! Encore merci !!
Bonjour Yvouille,
Suite à mes congés de 4 semaines et une reprise en octobre plus que chargé, je n'ai pas pu me relancer dans cette macro avant aujourd'hui. Alors encore un grand merci pour tes précédentes pistes et encore navré pour la réponse tardive...
Alors, tout d'abord, j'ai bien été vérifier dans les menus de mon Microsoft VBA pour les options Références. Toutes ont bien acceptées mais je suis sur une version antérieur (cf image ci jointe Screenshot_1)
Alors, lorsque je lance le VBA "Base de transfert - Avant modifs", j'ai encore le même probleme. (cf Screenshot_2).
Pour que ce soit le plus clair possible, voici les 2 fichiers après execution du VBA. Un classeur s'ouvre mais s'arrete après la sélection d'une commune.
Vraiment, dommage qu'on ne puisse pas tester ensemble, en temps réel.. Je suis certain qu'on est à 2 doigts !
Encore 1 000 mercis !
Salut,
Evite de trop attendre entre deux interventions, car on doit à nouveau se replonger complètement dans le sujet.
La première chose que je constate est que tu ne prends pas position par rapport à la solution de Jean-Eric. Son travail – que je n'ai pas testé – semble bien plus performant que le mien. En quoi ne te convient-il pas ? Est-ce bien raisonnable de continuer avec ma solution plutôt qu'avec la sienne ?
Je constate également que tu as les versions 14.0 pour les ''Références'' ''Microsoft Excel 00.0 Objet Library'' et ''Microsoft Office 00.0 Objet'' alors que j'ai la version 16.0. Est-ce une partie du problème ? Mais ça m'étonnerait quand même un peu.
Vu le message d'erreur ''Microsoft Excel ne peut pas accéder au fichier ……..'', j'aurais tendance à dire que le problème vient du fichier à ouvrir et non pas du code du fichier ''Base de transfert''. As-tu fait des essais avec le fichier ''VTST52-319 – BIS'' que je t´ai fournis le 30 août ?
Et lorsque la macro bloque à cause de ce message, peux-tu me dire si ça reste bloqué sur la ligne de code ''Application.Dialogs(xlDialogOpen).Show'' ?
Un travail en commun à l'aide du programme ''TeamViewer'' serait envisageable, mais c'est une solution que je réserve en tout dernier recours.
A te relire.