Copier des données de cellules de plusieurs lignes vers un autre tableur
Bonjour à tous,
Pour le contexte, on m'a mis sur un projet de transfert des données des cellules vers un autre tableur sur EXCEL.
J'avais fait une première version avec un formulaire VBA qui alimente directement l'autre tableau mais ils ne veulent pas saisir 2 fois les même données
Je me suis donc penché sur une façon de faire ça automatiquement en allant chercher les données directement sur le tableur concerné mais étant un noob absolue d'EXCEL et surtout du VBA, je me suis retrouvé perdu assez rapidement
Car, il faut que le "programme" :
-Permette à l'usager de cliquer sur un bouton + afficher un message d'erreur lorsque les données ont déjà été copié
-Récupère les données des cellules non vides et dépendant des cellules rajoutés des éléments tels que (l'unité, la détermination, etc...)
-Ajoute (ou pas) des éléments ligne par ligne en fonction de l'état des cellules (vides ou remplies)
-Sache la dernière qu'il a copié pour éviter de recopier les même données
-Répéte ce processus pour le nombre de feuille qu'il y a dans le fichier à copier
Voici un exemple du tableur à copier
et un exemple du tableur où les données seront copiées
Alors voilà, je n'arrive pas à mettre en place une condition qui me permette de récupérer les données en vérifiant que chaque cellule de la ligne (que je voudrais copier) n'est pas déjà été copié et vide en partant de la dernière ligne du tableau que j'aurais copié. Donc, si quelqu'un pourrait m'aider ceci serait incroyable.
En attendant, je continuerai mes recherches de mon côté. Je vous prie de me pardonner par mon explication qui porte à confusion.
PS: Les données qui figurent dans le tableur ne sont pas des vrais données.
Je vous remercie d'avoir pris le temps d'avoir lui mon poste et vous souhaite une excellente journée.
Salut,
Je trouve ta demande peu claire.
J’ai compris que tu avais plusieurs feuilles sur ton fichier ‘’Tableur’’ (dont deux seulement dans ton fichier modèle), mais qu’elles ont toutes la même structure, c’est-à-dire que les trois colonnes A, B et C sont toujours remplies identiquement, de même que les en-têtes dans les lignes 2 et 3, et que seuls la ligne 1 ainsi que les données des plages D4:H55 sont différentes. Est-ce bien le cas ?
Ensuite, tu souhaites copier-coller les données du fichier ‘’Tableur’’ au fichier ‘’Destination’’ feuille par feuille (chaque feuille aurait son bouton et l’utilisateur pourrait choisir de transférer les données de ‘’sa’’ feuille) ou le transfert se fait en une seule fois pour toutes les feuilles ?
Ensuite, comment faire le lien entre les données en place dans ce fichier ‘’Tableur’’ et les données en place dans le fichier ‘’Destination’’ ? Peux-tu fournir un exemple par lequel on pourrait se rendre compte qu’une ligne a déjà été copiée ?
A te relire.
Merci d'avoir pris le temps de lire et de répondre à ma demande.
Je m'excuse de mon poste qui est pas très compréhensible mais pour répondre à tes questions:
-les 3 colonnes seront toujours remplies de la même façon mais les données des plages D4:H55 sont pratiquement les même sauf pour 3 cas max où les les plage de données sont décalés d'une ligne à cause de la "mise en page" mais j'ai simplifié le tableur pour faciliter la compréhension et l'explication (c'est raté) mais si vous voulez je pourrais refaire un fichier qui ressemble un peu plus à celui sur lequel je dois travailler
-le transfert se fait en une fois avec le bouton qui se trouve sur le fichier "destination"
-Je savais que cette partie porterai à confusion et j'en suis encore une fois désolé.
Alors, les données de la colonne C sont les seules qui sont copiés dans les 3 premières colonnes car les dates sont utilisés pour référencer les données des différent lieux. Lorsque la cellule par exemple de la colonne des "Cl Libre" du lundi 1 janvier 2024 alors celle-ci est transférée dans le tableur destination en ayant une ligne de créer pour cette données en particulier avec en tant que début de ligne (dans la colonne "date") la date "1-janv.-24" à la suite de cette cellule le lieu (c-a-d Audilière ou Bigneux DN600, "Audilière" dans ce contexte), pour enchainer la Détermination, "Chlore Libre (Moyenne)" avec le paramètre "CL2" qui suit et seulement à partir de là que la donnée de la colonne "Cl Libre" apparaîtra qui est de 0.36 (feuille "Audilière") et pour terminer l'unité en mg/l.
J'ai fait cette exemple dans ce fichier pour que vous puissiez mieux comprendre (Je sais que c'est toujours pas clair. Je vous prie de m'excuser encore une fois).
Il faut donc que je répète ce processus pour chaque celulle, de chaque ligne, de chaque feuille.
Salut,
Tes explications sont toujours aussi ténébreuses !
Lorsque tu écris : « Alors, les données de la colonne C sont les seules qui sont copiés dans les 3 premières colonnes car les dates sont utilisées pour référencer les données des différent lieux », il faut vraiment se gratter la tête trois fois afin de tenter de comprendre ce qui a voulu être dit.
Dans la phrase : « Lorsque la cellule par exemple de la colonne des "Cl Libre" du lundi 1 janvier 2024 alors celle-ci est transférée dans le tableur destination ….. » il manque un bout. Il aurait fallu écrire : « Lorsque la cellule par exemple de la colonne des "Cl Libre" du lundi 1 janvier 2024 EST CECI OU EST CELA, alors celle-ci est transférée dans le tableur destination …. ».
Enfin, lorsque tu écris : « … les 3 colonnes seront toujours remplies de la même façon mais les données des plages D4:H55 sont pratiquement les même sauf pour 3 cas max où les les plage de données sont décalés d'une ligne à cause de la "mise en page" …. », alors là au moins je ne comprends absolument rien !
Ne donne que les informations qui sont nécessaires et relis-toi calmement avant de poster.
Alors oui, je souhaiterais que tu me fournisses des fichiers correspondant EXACTEMENT à tes fichiers réels et que tu me donnes des explications plus claires.
NB : Il n’y a pas de bouton dans le fichier ‘’Destination’’ !
En faisant référence aux noms des objets Excel, décris-moi exactement ce que tu souhaites. Par exemple :
En cliquant sur le bouton en place sur la seule feuille du fichier ‘’Destination’’, il faut contrôler sur une feuille du fichier ‘’Tableur’’ (ou sur chaque feuille individuellement ??) si les données ont déjà été reportées ou non. Pour cela il faut comparer, sur les dernières lignes en place sur chacun des fichiers :
- la cellule X111 du fichiers ‘’Tableur’’ avec la cellule Z222 du fichier ‘’Destination’’,
- la cellule X333 du fichiers ‘’Tableur’’ avec la cellule Z444 du fichier ‘’Destination’’,
- etc.
Si toutes ces données sont identiques, il n’y a rien à reporter.
Si l’une de ces données est différentes, il faut reporter :
- la cellule A1000 du fichiers ‘’Tableur’’ vers la cellule B2000 du fichier ‘’Destination’’,
- la cellule C3000 du fichiers ‘’Tableur’’ vers la cellule D4000 du fichier ‘’Destination’’,
- etc.
Dans l’attente de tes nouvelles.
Bonjour Yvouille,
Mille excuses pour mes explications incompréhensibles.
Oui, tu as totalement raison. Maintenant, que je me relis. C'est absolument pas clair du tout. J'aurais dû préciser que les 3 premières colonnes (Semaines, Noms et Dates) sont les seules identiques à travers toutes les feuilles et que dans celles-ci seule la colonne "Dates" sert car les données dans celle-ci sont transféré dans le tableau destination.
C'est vrai, que j'aurai du préciser que "lorsque la cellule par exemple de la colonne des "Cl Libre" du lundi 1 janvier 2024 est remplie, alors celle-ci est transférée dans le tableur destination."
Désolé, encore pour la confusion dû à ma mauvaise explication. Pour clarifier:
-Les 3 colonnes sont Semaines, Noms et Dates, respectivement A, B et C sont toujours les mêmes. Et les données des plage D4:H55 sont des données qui ne sont pas identiques entre chaque feuilles. J'ai dû penser que tu parlais du positionnement des cellules à un moment car en effet le positionnement des cellules de certaines feuilles ne sont pas identique.
Certaines feuilles auront la plage des données des cellules (D4:H55) décalées d'une ligne vers le bas ce qui devient une plage de D5:H66 dû à la mise en page de certaines feuilles.
En effet, je n'ai pas mis de bouton dans le fichier car le fichier où se trouve le bouton ainsi que mes tests effectués se trouve dans un autre fichier destination où se trouve de véritables valeurs.
Alors pour "mettre à jour ma demande".
Voici le fichier qui ressemble "exactement" à celui que l'on m'a donné:
Et le fichier destination avec le bouton
En cliquant sur le bouton en place sur la seule feuille du fichier "Destination" :
-Il faut que je transfère les données Des colonnes C, H, I, L, M, N, respectivement "Dates", Moyenne "Cl Libre", Moyenne "Cl Total", "Température °C", "pH" et "Conductivité" de chaque feuille du fichier "tableur_donne_a_copier.xlsx
Pour ça, il faut d'abord contrôler si la dernière ligne de la colonne C ("tableur") ne figure pas sur la dernière ligne de la colonne A ("destination")
- la cellule C34 du fichier ‘’tableur’’ avec la cellule A2 du fichier ‘’Destination’’ par exemple
Si les cellules sont identiques, il n'y a rien à reporter
Si les cellules ne sont pas identiques, il faut donc:
Contrôler si la ligne d'avant est identique (pour savoir si celle-ci à a été copié)
-la cellule C33 du fichier "tableur" avec la cellule A2 du fichier "Destination" par exemple
Si les cellules ne sont pas identiques, le programme répète le même processus jusqu'à ce qu'à ce qu'il trouve des cellules qui correspondent
Si les cellules sont identiques, le programme reprend la ligne de la cellule C34 "tableur"
Il contrôle si les cellules de cette ligne sont remplie dans les autres feuilles
-Si la cellule H35 "tableur" (H35 et non 34 car la cellule est décalé d'une ligne en dessous dû à la mise en page) de la feuille Plaudière est remplie
alors une ligne est rajoutée dans la seule feuille de "destination" (en italique)
Dans cette nouvelle ligne la date est copié dans la première colonne,
-la celulle C34 "tableur" de la feuille "Noms & Dates" dans la celulle A2 "destination"
ensuite la colonne Echant est remplie qui correspond au nom de la feuille dans le fichier "tableur"
-la celulle A1 "tableur" (Enfin je crois. Le fichier "tableur" est vérouillé de base donc je ne sais pas où "Plaudière" dans "destination" figure sur la première ligne ) dans la cellule B2 "destination"
La colonne "Détermination" C "destination" sera remplie automatiquement en fonction de la cellule et "Paramètre" D "destination" aussi
-la Cellule C2 "destination" sera remplie avec "Chlore Libre (Moyenne)" et la cellule D2 "destination" avec "CL2"
Et c'est seulement à partir de la colonne "Résultat 1" E que la donnée de la cellule sera copié dedans
-la Cellule H35 "tableur" dans la cellule E2 "destination"
Pour terminer la cellule F2 "destination" sera remplie avec mg/l
Il faut donc que je répète ce processus pour chaque cellules des colonnes C, H, I, L, M, N dans "tableur" de chaque ligne (dont les dates ne figurent pas sur "destination") de chaque feuille
Il faut aussi que le programme puisse savoir la dernière ligne qu'il a copié dans "tableur" pour qu'ils puissent reprendre à partir de là lors du prochain click du bouton
Je sais que c'est toujours pas compréhensible donc n'hésite pas à me reposer des questions comme tu l'as fait.
Cordialement VBANoob123
Salut,
Tes explications sont toujours aussi peu claires.
Deux exemples :
- Lorsque tu écris : ‘’…. car en effet le positionnement des cellules de certaines feuilles ne sont pas identique’’, parles-tu du positionnement des lignes, des colonnes ou des deux ?
- Tu écris : ‘’ Pour ça, il faut d'abord contrôler si la dernière ligne de la colonne C ("tableur") ne figure pas sur la dernière ligne de la colonne A ("destination"), la cellule C34 du fichier ‘’tableur’’ avec la cellule A2 du fichier ‘’Destination’’ par exemple’’. Il n’y a pas de données dans les lignes 34 de tes différentes feuilles !!
Ton fichier modèle également n’est pas clair. Tu as des dates croissantes sur tes feuilles et soudain une date antérieure est inscrite (le premier janvier 2024 en lignes 1 et 32). Si cette situation est possible, il faudra bien plus d’explications de ta part afin d’arriver à comprendre ton travail !
Question 1 : Est-ce que les dates sont bien toujours dans un ordre croissant ?
Mais admettons que les dates soient toujours dans un ordre croissant. J’ai alors compris de tes explications que tu peux devoir reporter plusieurs jours en même temps. Par exemple les données du 5 mai 2024 ont été reportées sur le fichier destination mais il y a des données pour les dates des 5, 17 et 24 mai 2024 sur les feuilles, donc les données du 17 et du 24 mai doivent être reportés cette fois-là.
Question 2 : Est-ce bien exact ?
J’ai également compris que tu pouvais avoir des données à reporter pour des dates différentes selon les feuilles à visiter. Ainsi, en reprenant l’exemple ci-dessus, tu pourrais avoir des données pour le 5, le 17 et le 24 mai 2024 sur une feuille et seulement pour le 5 et le 24 sur une autre feuille.
Question 3 : Qu’en est-il exactement ?
Tu écris : ‘’…. car en effet le positionnement des cellules de certaines feuilles ne sont pas identique’’.
Question 4 : Tu parles bien uniquement d’un décalage au niveau des lignes et non pas des colonnes ?
Fort de ces 4 réponse, je pense pouvoir avancer avec ton travail. Reprends s’il-te-plait la numérotation de mes questions afin de me fournir tes réponses. Essaie d’être court, clair et précis, sans explications inutiles.
Je serais un peu plus occupé prochainement, mes retours risques de durer un peu. Mais retour il y aura.
A te relire.
Salut Yvouille,
Alors, je vais pas prendre plus de ton temps car peu importe le temps que je mets à déchiffrer ce que j'ai à faire. Je ne pourrais malheureusement jamais réellement bien expliquer ma demande ou la tache que j'avais à faire
Car grâce à une de tes remarques ou conseil, j'ai pu avoir un déclique et terminer le projet VBA le jour où mon contrat se terminait.
Je te remercie infiniment pour ton temps personnel que tu m'as accordé pour déjà lire, m'aider dans ma demande et en plus essayez de déchiffrer mon semblant de français.
Voici la version test "Terminé" qui correspond à ce que l'on m'a demandé de faire (le code est incompréhensible mais "fonctionne" pour l'instant):
Question 1:
Les dates sont toujours dans un ordre croissant mais dans le fichier que j'ai envoyé. Je testai juste la boucle que j'avais créé pour voir où en était la limite mais l'ordre avec la boucle n'importait peu tant que les dates était transférées dans l'ordre croissant ou décroissant des cellules.
Question 2:
Je sais pas. Je suis désolé. Les dates entières du tableur ne seront pas copiés car la plupart figurent déjà sur le fichier destination réel. Le programme VBA sert juste à éviter de copié les données manuellement.
Question 3:
Certaines lignes de certaines feuilles (Donges, etc...) sont décalées d'une ligne à cause de la mise en page de celles-ci
Question 4:
Oui, en effet.
Merci encore pour ton temps Yvouille
????
Il me semble qu'on était proche de la solution !
Bonne continuation.