Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Reformatage de données brutes

  • Initiateur de la discussion Initiateur de la discussion KIM
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

KIM

XLDnaute Accro
Bonjour le forum, bonjour les ami(e)s,
Je reçois une extraction brute de notre système de gestion. C'est un ensemble de blocs d'information qui commence par la ligne "Département" et se termine par "Total …" et entre les 2 il y a un complément d'informations pour l'entête de chaque bloc sur plusieurs lignes ainsi que les données de chaque bloc. Une centaine de blocs peuvent se retrouver dans cette extraction voir fichier joint (feuille dataserv_v1)
J'ai besoin de votre aide pour construire 2 feuilles:
- Feuille "Base_Data" dans laquelle je récupère les données de chaque bloc et je rajoute pour chaque ligne des données les informations de l'entète du bloc, voir fichier ci-joint
Le but est d'avoir toutes les données en format ligne.
- Feuille Recap dans laquelle je récupère une ligne par bloc qui regroupe les informations de l'entête de chaque bloc avec les informations de la ligne Total qui se trouve en fin du bloc, voir fichier joint.
Votre aide me permet de gagner beaucoup de temps et vous en remercie d'avance
Bien amicalement
 

Pièces jointes

Re : Reformatage de données brutes

bonjour KIM

Un petit eclaircissement concernant la feuille Base_data S.T.P
Les noms de Departement suivant le premier sont bien perdus ainsi que tous leurs elements d'en-tete ?
 
Re : Reformatage de données brutes

Bonjour Pierrejean, et le forum,
Content de te retrouver de nouveau et merci d'avance.
Dans la feuille Base_Data, j'ai oublié de recopier en format ligne les données des elements d'entete du 2ieme departement. C'est fait dans le fichier joint.
J'ai laissé l'entete du 1er departement dans la feuille Base_Data seulement pour mieux expliquer les emplacements cibles de ces données en réalité on peut commencer les entetes des col à la ligne 5 de la feuille Base_Data.
Je te remercie d'avance et j'espère avoir repondu à ta demande d'information.
Bien amicalement
KIM
 

Pièces jointes

Re : Reformatage de données brutes

Bonsoir Pierrejean et le forum,
Merci pour le code, je n'ai pas pu dégager ta logique, as-tu le temps de me le commenter STP. Demain je vais le tester avec un fichier de données réelles.
J'ai regardé la feuille Base_Data:
1-le Département code 2 commence par le car "0", le; format de cette col doit etre texte et non chiffre, voir col R
2- les crédits notifiés sont des montants (chiffre) et non texte voir col W
3- Comment transformer les col dates col F, L et N au format jj/mm/aaaa
Merci d'avance de ton aide
Bien amicalement
KIM
 
Re : Reformatage de données brutes

Bonjour Pierrejean et le forum,
Il n'y a pas de commentaires dans le fichier joint à ton dernier message. J'ai testé ce matin sur un fichier de données réelles de 2500 lignes, 12s d'exécution pour créer Base_Data. Quel gain de temps.
Reste à voir le problème de formatage des colonnes et la feuille Recap.
Mille mercis
Amicalement
KIM
 
Re : Reformatage de données brutes

Re,
Merci pour la macro et les commentaires.
1- J'ai essayé de comprendre le code et je me pose la question comment tu retrouves la ligne et les données "Total .." de chaque bloc? Comment est positionné la var letype.row?
========
Sheets("RECAP").Cells(derlin, 10) = Sheets("dataserv_v1").Cells(letype.Row, 8).End(xlDown)
Sheets("RECAP").Cells(derlin, 11) = Sheets("dataserv_v1").Cells(letype.Row, 9).End(xlDown)
Sheets("RECAP").Cells(derlin, 12) = Sheets("dataserv_v1").Cells(letype.Row, 10).End(xlDown)
Sheets("RECAP").Cells(derlin, 13) = Sheets("dataserv_v1").Cells(letype.Row, 13).End(xlDown)
============
2- Format date: le format date pour la col F fonctionne normalement. J'ai essayé d'appliquer le meme format pour les col L et N. La macro s'arrète avec message d'erreur dès que la cellule d'une de ces col est vide. y-a-t-il possibilité de rajouter un test de non_vide avant d'appliquer cette transformation?
Merci d'avance
KIM
 
Re : Reformatage de données brutes

Re

Voici pour les dates en colonnes L et N (désolé , je n'avais pas remarqué)

letype est la variable issue de la recherche :
Code:
Set letype = Sheets("dataserv_v1").Cells.Find("Type", LookIn:=xlValues, lookat:=xlWhole)
elle est du type Range
letype.row est donc la ligne de la cellule dans laquelle excel a trouvé le mot "Type"
Code:
Sheets("dataserv_v1").Cells(letype.Row, 8)
donne la cellule de la colonne H (8eme) située sur cette ligne (ici c'est celle ou il y a "commandé")
ensuite on cherche la derniere cellule non vide vers le bas
Code:
.End(xlDown)

d'ou le code complet:
Code:
Sheets("RECAP").Cells(derlin, 10) = Sheets("dataserv_v1").Cells(letype.Row, 8).End(xlDown)
 

Pièces jointes

Re : Reformatage de données brutes

Pierrejean Merci et le forum,
Le resultat validé et correspond au besoin. Mille mercis.
Ce travail de formatage est classique et les extractions des bases centralisées n'est pas homogène malheureusement. Le principe est toujours le même, des blocs de données avec des entetes et des totaux finaux mais la disposition n'est toujours pas la m^me et l'entete de la première colonne est differente selon les données. J'ai l'impression que ta macro peut être generalisée par une mise en place d'une feuille de réference pour définir des variables qui remplacent des noms de colonnes ou l'entete de la 1ere col dans la macro. C'est une proposition si tu as le temps
En tout cas ta macro fonctionne, j'ai compris le code et je peux l'adapter sans soucis.
Mille mercis et bon WE
Bien amicalement
KIM
 
Re : Reformatage de données brutes

Bonjour le forum, les ami(e)s,
Bonjour Pierrejean,
Je reviens vers toiconcernant le fromatatge des données brutes. Ta macro fonctionne bien mais j'ai voulu alléger la feuille Base_Data en ne recopiant que les col 1,4,6,8,9,10,13,14 et à la suite les entetes voir feuille Base_Data_modele.
J'ai modifé le code pour utiliser la var Offset: ex pour la cellule de la 1ere col à recopier
Sheets("Base_Data").Cells(derlin, 1) = Sheets("dataserv_v1").Cell.Offset(0, 0)
J'ai un message d'erreur; j'ai changer le Offset(0, 0) par Offset(n, 0), meme blocage.
Merci de ton aide
Bien amicalement
KIM
 

Pièces jointes

Re : Reformatage de données brutes

Re

Ma version (sans offset dont je ne vois pas vraiment comment l'utiliser )

Je regarderai pour tenter d'avoir une version integralement paramétrée mais je ne te cache pas que cela ressort pour moi de l'utopie
 

Pièces jointes

Re : Reformatage de données brutes

Bonjour Pierrejean et le forum,
Merci pour ce nouvvelle macro, effectivement c'est très pratique de mettre la liste des colonnes à récupérer dans un tableau (les-entetes-A), et je t'en remercie
par contre je n'ai pas pu voir comment tu recuperes les titres des colonnes selectionnees dans les-entetes-A.

En ce qui concerne une version paramétrée, l'idée pour moi est: (par exemple)
dans:
Nat = Sheets("dataserv_v1").Range("B" & letype.Row - 2)
remplacer "B" par le contenu d'une cellule d'une feuille intitulée "Param" qui contient elle "B"
et dans letype.Row - 2 remplacer le 2 par le contenu d'une autre cellule de la feuille intitulée "Param" qui contient elle "B"
et là je ne sais pas faire. Comment faire référence au contenu d'une cellule dans ce type de formules?
Si tu peux m'aider pour transformer une de ces formules, je ferais le reste.
Merci pour toute l'aide fournie non seulement à moi mais au forum.
Amicalement
KIM
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
539
Réponses
5
Affichages
452
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…