Tri et copie de données d'une seule feuille vers plusieurs

Bonjour,

J'ai un soucis concernant l'organisation d'un fichier Excel à l'aide d'une macro VBA.

Je vous expose le problème: Je recois des données de mesures sous forme de fichier texte, et je souhaite les réorganiser selon la colonne Adresses dans un seul fichier Excel, et contenant plusieurs feuilles, chaque feuille correspondant à une adresse.

J'ai déjà essayé plusieurs macros trouvés sur le forum, mais il semble qu'ils ne soient pas adéquats pour mon cas (Celà est peut être du au fait que je sois débutant sur VBA).

Je vous laisse le fichier Excel en question en pièce jointe, en espérant avoir une aide précieuse.

Merci d'avance!

25donnees-mesure.xlsx (489.16 Ko)

Bonsoir,

Ci-joint une proposition à tester.

Fonctionnement :

  • Sélectionner le fichier à traiter et cliquer "Trier les adresses".
  • Un nouveau fichier est créé, avec les adresses ventilées par onglet

Tout simple

Enfin, pas le code

Bonne soirée

Bouben

41triadresses.xlsm (31.72 Ko)

Merci énormément pour votre réponse.

Le code est effectivement compliqué mais je suis arrivé à comprendre un peu la structure

1) Il y a quelques petits détails que je dois corriger : comme par exemple des onglets qui restent vides (onglet "Aucune" et onglet "OngTemp2"); ainsi qu'une erreur dont je ne connais pas l'origine mais qui ne semble pas affecter le fonctionnement du programme.

2) J'aimerais aussi personnaliser un peu le programme, de telle sorte que par exemple il remplace les adresses (Chiffres) par des noms.

Est ce que la commande Columns("C").Replace ferait l'affaire ?

Columns("C").Replace What:="120", _
                            Replacement:="Nom", _
                            LookAt:=xlPart, _
                            SearchOrder:=xlByRows, _
                            MatchCase:=False, _
                            SearchFormat:=False, _
                            ReplaceFormat:=False

3) Dernier point:

Comment pourrais-je ouvrir directement un fichier texte avec le programme ?

Faut-il d'abord créer un nouveau fichier Excel et mettre la commande "Module Import.Csv To Xls", ou bien je mets directement cette dernière, sans passer par un fichier Excel intermédiaire ?

Merci encore une fois !

erreurs

Bonsoir,

Pour répondre aux différents points :

- onglets vides : si la colonne C ("Adresse") ne contient aucune valeur, la ligne correspondante est copiée dans cet onglet.

=> si on part du postulat que cette colonne est toujours renseignée, je supprime ce cas

- onglet "OngTemp2"

=> normalement, cet onglet est supprimé en fin de traitement, bizarre

- adresses : remplacement des n° par des noms

=> le mieux est d'ajouter un onglet de paramétrage dans le fichier principal, comprenant 2 colonnes "n°" & "nom" et ensuite le traitement fait le lien

=> si OK pour le principe, je peux essayer de le mettre en place

- import d'un fichier texte

=> si je comprends bien, le fichier Excel source est déjà un fichier retravaillé à partir d'un fichier texte

=> pour aller plus loin, merci de fournir le fichier texte à traiter, et on voit ce qu'on peut faire

- bug du traitement

=> à voir

=> renvoyer la dernière version de "TriAdresse" (si modifié depuis mon envoi) et le fichier importé qui génère cette erreur.

En attente de toutes ces infos, et après il n'y a plus qu'à faire (du moins essayer !)

Bonne soirée

Bouben

Bonsoir,

Merci pour votre réponse.

- La colonne C est effectivement toujours remplie.

- Pour les adresses, je reçois malheureusement les fichiers comme ça depuis la source, c'est pourquoi je suis obligé de faire le remplacement moi-même.

- Effectivement, pour avoir le fichier Excel, j'ai importé un fichier texte (en Tab et Semicolon), afin de pouvoir le traiter avec VBA. Voici un exemple du fichier texte.

- J'ai inclus le fichier texte converti en Excel, ainsi que le fichier généré par la Macro. En ce qui concerne "TriAdresse", je n'ai pas fait de modification là dessus.

Merci et bonne soirée.

14fichier-genere.xlsx (488.25 Ko)
12data-160620.xlsx (489.26 Ko)
21data-160620.zip (92.05 Ko)

Bonjour,

Ci-joint une nouvelle version à tester.

  • En entrée : sélection du fichier data au format texte
  • En sortie : fichier ventilé par adresse

Un onglet comprend les codes adresses et libellés associés

  • si le code n'existe pas dans l'onglet, on ajoute une ligne avec le code et un libellé provisoire : Adr_Code (ex : "Adr_126")
  • ensuite, il suffit de modifier les libellés (quelques lignes laissées en exemple)
  • pour la fois suivante, les bons libellés seront repris
  • et si on a encore de nouveaux codes, même principe : une nouvelle ligne sera rajoutée

Le traitement est revu : lecture directe du fichier texte (ligne à ligne) sans intégration intermédiaire dans Excel

2 lignes importantes nécessaires dans le fichier texte :

  • [messung] : permet de récupérer la ligne de titre
  • [Start] : les données sont récupérées à partir de ce titre

Le résultat : https://www.cjoint.com/c/FGEkhAw0PO6

Bonne journée

Bouben

Merci, c'est impeccable

Il y a juste un détail qui cloche chez moi, la ligne de titre (contenant "Adresse" et les grandeurs D_IN1 D_IN2 D_IN3 I1 I2 etc...) ne se copie pas sur le nouveau fichier.

https://www.cjoint.com/c/FGEmAXQmxCU

En ce qui concerne le remplacement des adresses et des libellés par des noms de mon choix, j'ai testé la commande Columns("C").Replace What:="120", mais ca ne semble pas marcher. Est ce que je dois créer un autre programme spécialement pour ca ?

Encore merci et bonne journée.

Bonjour,

Vous utilisez bien la dernière version ?

Dans la dernière version :

  • la ligne de titre est ajoutée
  • les codes adresses sont remplacés par les libellés.

En image : l'extrait du code qui traite ces 2 points

Je remets en PJ la dernière version (renommée en V0.1b), avec le fichier data utilisé.

Sur mon poste, c'est OK. Bizarre.

A re-tester.

Si pas bon, aucune idée (version d'Excel ?)

Bonne journée

Bouben

extraitcode
13data-160620.zip (96.89 Ko)

C'est bizarre, j'ai inversé l'emplacement de la boucle pour effacer les OngTemp avec la boucle pour copier la ligne Titre dans la Macro et ça a marché

Donc le problème vient de la boucle pour effacer les OngTemp je crois, car il y a certains onglets qui ne s'effacent pas

22resultat-v0-1b.zip (451.25 Ko)

Bonjour SalimZ, bouben

quelle jolie méthode (et jolies méthodes de classe) bouben

je me permet d'apporter ma contribution à ce problème de SalimZ - cliquer sur le bouton bleu "Nouvelles Données" pour voir le résultat

(si ce n'est que sur ma propal je traite les données dans le même classeur)

NDLR/

je n'utilise pas de collection (cf bouben)

je réalise la lecture du fichier de données tel un fichier texte

j'analyse le fichier texte au fur et à mesure de la lecture pour éviter les éventuelles erreurs

PS/

j'utilise un tri Bulles pour cette fois, mais un QuickSort permettrait d'être encore plus rapide

PPS/

en cours de traitement je fais une copie des informations triées dans Sheet2 - mais cela n'était utile que lors des tests...

Merci beaucoup bouben et andrea73 pour vos propositions, elles m'ont toutes les deux servies.

Le problème est résolu maintenant

Rechercher des sujets similaires à "tri copie donnees seule feuille"