[DEBUTANT]Extraction de données par Macro

DoumPa

XLDnaute Nouveau
Bonjour,

C'est avec grand intéret que je viens de découvrir votre site et par la même occasion votre forum et c'est avec grand espoir que lance ce post pour essayer de résoudre mon 'problème' de données sous excel.

Je gère un magasin de vente de produit informatique dans une petite ville de province et j'aimerais améliorer ma gestion stock/produits. Pour ce faire j'aimerais pouvoir mieux exploiter les fichiers excel envoyer chaque semaine par mes fournisseurs pour les transformer en fichier cvs pour les importer régulièrement dans ma base de donnée de mon logiciel de gestion commerciale.

J'ai pensé à organiser une macro pour chaque fournisseur mais je vous avoue m'être heurté à un mur tellement mon niveau de maitrise d'excel est bas :eek: Les fichiers excel de mes fournisseurs sont à mon goût trop mélangé (entre les cellules fusionnées, les infos en colonne ou les type de produit en ligne) et je n'ai pas réussi à extraire les données que j'ai besoin de façon automatique (il me reste bien la façon manuelle avec le copier coller mais je perd un temps immense).

Je me permet de joindre à ce post une copie tronquée d'un fichier fournisseur pour que vous puissiez vous rendre compte du problème.

J'aimerais pouvoir extraire les données de ce fichier pour obtenir un cvs qui comporte les champs Founisseur/Catégorie produit/Type Produit/Marque/RefFabricant/RefFournisseur/Désignation/PrixHT Et voici les correspondances :

Fournisseur = A1
Catégorie produit = ligne en gris
Type produit = ligne en rouge bordeau
Marque = ligne en rouge bordeau (1er mot seulement)
RefFabricant = colonne B
Reffournisseur = colonne A
Désignation = colonne C
PrixHt = colonne E

Voilà mon bazar :ermm:

Si vous pouviez m'aiguiller et me renseigner, bref m'aider, je vous en remercie d'avance. :kiss:

DoumPa [file name=exemple_20050406111316.zip size=15307]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/exemple_20050406111316.zip[/file]
 

Pièces jointes

  • exemple_20050406111316.zip
    14.9 KB · Affichages: 27

DoumPa

XLDnaute Nouveau
Salut porcinet82

Le fichier cvs devrait se composer de la sorte :

1ere ligne :
Founisseur;Catégorie produit;Type Produit;Marque;RefFabricant;RefFournisseur;Désignation;PrixHT

2eme ligne :
donnee;donnee;donnee;donnee;donnee;donnee;donnee;donnee

3eme ligne :
donnee;donnee;donnee;donnee;donnee;donnee;donnee;donnee

Ect ...

J'espère m'être expliqué assez clairement.


@+ et merci

DoumPa
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour DoumPa, Porcinet, le Forum

Vite fait, en passant, mais pour faire avancer le 'schmilblick'...

Je suppose que les jolies couleurs ne sont la que pour la représentation visuelle de ce que tu veux séparer, mais que sur les fichiers bruts réceptionnés de tes fournisseurs, il en est autrement...

Que seule la structure de la mise en place des données sur les lignes est identique... mais pas le formats (?)

Si tel est le cas (pas de couleur) alors c'est plus délicat à traîter, puisque, par exemple, pour distinguer une différence entre les lignes qui contiennent :

AMD ATHLON (Premier Mot = Champs 'Marque')
de
DDR II Champs 'Catégorie produit'
Nous n'avons aucun moyen simple, puisque la structure de ces deux lignes est strictement identique... (Seule colonne 'C' remplie)


Par ailleurs pour les lignes : 71 & 72 par rapport à la ligne 93 :
Mémoires (ligne 71)
DDRAM , RIMM (ligne 72)
DDR II (ligne 93)

Que doit être reporté en Champs 'Catégorie produit' :
'Mémoires DDRAM , RIMM' (Champs 'Catégorie produit')
'Mémoires DDR II (Champs 'Catégorie produit')

ou simplement :
DDRAM , RIMM (Champs 'Catégorie produit')
DDR II (Champs 'Catégorie produit')

NB je ne fais que passer, surtout que pas mal de programmes sont boulversés dans mon emploi du temps en ce jour...

Mais ce sont des précisions importantes pour ceux et celles qui pourraient t'aider...

Bonne Journée
@+Thierry

EDITION !!!

PS j'ai zappé aussi un autre problème... Selon ton exemple, un programme 'bête et méchant' risque aussi de considérer que le Champs 'Marque' sera Intel aussi pour tous les Ventilateurs et les Mémoires...

Message édité par: _Thierry, à: 06/04/2005 15:29
 

DoumPa

XLDnaute Nouveau
Salut Thierry

Merci de vos remarques

Les jolies couleurs sont intégrées aux fichiers des fournisseurs, en fait le fichier fourni est le fichier d'un des fournisseurs réduits à quelques lignes et aux prix HT modifiés. La structure et les couleurs n'ont pas été modifiées par rapport au fichier d'origine.

Concernant les lignes 71, 72 et 93, je crois qu'il y a une erreur de la part du fournisseur des couleurs des celullules, 72 et 93 devant être normalement en bordeau (donc champ 'TypeProduit') et la ligne 71 en gris (donc champ 'Catégorie produit')

Enfin pour répondre à votre PS, c'est effectivement un problème. N'est il pas possible de programmer un odre de lecture des données qui feraient qu'à chaque nouvelle ligne grise lue on démarre une nouvelle famille, donc nouvelle marque, etc ... ?

@+ et merci

DoumPa
 

_Thierry

XLDnaute Barbatruc
Repose en paix
=> DEMO Building Database from UnStructured Sheet

Bonsoir DoumPa, le Forum

Bon alors pour les lignes 72 et 93 devant être normalement en bordeau tu devras voir avec ton fournisseur... Moi j'ai mis la couleur bordeau manuellement... Mais sinon ça tourne comme il faut même sur 30000 Lignes (testé en moins de 3 minute)

Bonne Soirée
@+Thierry
[file name=BaseSupplierFlat.zip size=24603]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/BaseSupplierFlat.zip[/file]
 

Pièces jointes

  • BaseSupplierFlat.zip
    24 KB · Affichages: 43

DoumPa

XLDnaute Nouveau
Re:=> DEMO Building Database from UnStructured She

Bonsoir Thierry, et le forum

Merci pour votre travail, c'est magnifique et efficace !

Il me reste plus qu'à comprendre ce que vous avez codé et là je crois que c'est une autre paire de manches :whistle:

Merci mille fois

@+ DoumPa
 

ChTi160

XLDnaute Barbatruc
Re:=> DEMO Building Database from UnStructured She

Salut Doumpa
bonjour Thierry
je comprends que les événements en principauté perturbent les Agenda
'condoléances à tous les monégasques'

tu as encore fais du beau travail dont le code est claire comme de la duvel

Bonne Soirée
Jean Marie
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re:=> DEMO Building Database from UnStructured She

Bonsoir Jean-Marie, re DoumPa, le Forum

Tout d'abord merci Jean-Marie pour ta sollicitude.

Ci-joint une version qui 'tente' de remédier aux problèmes énnoncés de programme 'bête et méchant' qui risquait aussi de considérer que le Champs 'Marque' sera Intel aussi pour tous les Ventilateurs et les
Mémoires... et aussi les rutpture au milieu de 'DDR /// II' etc...

NB c'est plus du bricolage, car si tu as encore 500 autres exceptions, c'est ingérable... Mais juste pour tenter d'améliorer un peu.

Bonne Soirée
@+Thierry

EDITION !!! Arf planté de fichier !!!

Message édité par: _Thierry, à: 07/04/2005 12:53
 

Pièces jointes

  • BaseSupplierFlat-V1_20050406175426.zip
    24 KB · Affichages: 21

_Thierry

XLDnaute Barbatruc
Repose en paix
Re:=> DEMO Building Database from UnStructured She

Bonjour à tous

Je repassais par là et je me suis rendu compte que j'avais remis en ligne ci-dessous exactement le même fichier !!! Arf

Sorry

Voici la version 'bricolage'...qui 'tente' de remédier aux problèmes énnoncés...

Bon Appétit
@+Thierry [file name=BaseSupplierFlat-V01_20050407125740.zip size=26348]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/BaseSupplierFlat-V01_20050407125740.zip[/file]
 

Pièces jointes

  • BaseSupplierFlat-V01_20050407125740.zip
    25.7 KB · Affichages: 49

DoumPa

XLDnaute Nouveau
Re:=> DEMO Building Database from UnStructured She

Bonjour Thierry, et le Forum

Merci de votre aide précieuse, votre macro marche à merveille ... pour ce fournisseur uniquement ;)

Loin de moi l'envie de vous demandez d'écrire une macro pour chaque fichier xls type de chacun de mes fournisseurs (5 au total), par contre je me suis permis de jetter un oeuil dans votre code pour essayer de comprendre votre travail. Peut être que j'arriverais à recomposer les autres macros à partir de votre code :p

Si je comprend bien l'action générale de la macro, votre code travail de la façon suivante :

Macro TextBox2_Click
Cette macro lance la macro TheDecoder avec un simple click sur le bouton inclus dans la page excel contenant les données 'non formatées'

Puis Macro TheDecoder
Cette macro s'occupe de repérer certaines des cellules de la couleur 15, y affecte un format, et execute la macro Leon puis la macro TheFormatter. Par contre je ne comprends pas le détail du code.

Ensuite Macro Leon
Cette macro efface le contenu, si contenu il y a, de la feuille 'Collection'

Enfin Macro TheFormatter
Cette macro, d'après ce que j'arrive à comprendre du code, est celle qui répartie les différentes données de la feuille 'intégration', dans la feuille 'Collection' dans les colonnes appropriées. Ideml que la macro TheDecoder, je ne comprends que très partiellement le code.

Existe t il un site ou un livre ou je pourrais trouver la signification du code employé ? J'ai bien essayé l'aide intégré au logiciel, mais la traduction est soit très légère soit abscente.

Merci encore

@+ DoumPa
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re:=> DEMO Building Database from UnStructured She

Bonsoir DoumPa, le Forum

Tout d'abord, tu peux me tutoyer, c'est d'usage dans notre Forum, ça rend les choses plus conviviales.

Ton analyse est correcte, 'leon' c'est le 'nettoyeur' dans toute mes applis

Pour ce qui est de 'TheDecodeur' c'est juste pour trafiquer la Base de Données Fournisseur afin de répondre au critère de distinction impératif entre le Champs 'Marque' et le Champs 'Catégorie produit' (Nous n'avons aucun moyen simple, puisque la structure de ces deux lignes est strictement identique... (Seule colonne 'C' remplie) )

Donc je déplace en Colonne 'B' les lignes Grises (ColorIndex = 15)

Pour ce qui est de 'TheFormatter'... là c'est pas si sorcier...

Je mets en mémoire toute la plage :
TabPlage = .Range('A5:E' & .Range('E65536').End(xlUp).Row)

Puis je la scanne par une boucle
For i = 1 To UBound(TabPlage)

J'introduis mes variables , ici la variable fixe non de fournisseur :
StrSupplier = Sheets('Intégrations').Range('A1')

Puis la variable Type :
StrType = TabPlage(i, 2)
Qui ne sera initilisée que par les lignes dont la 2em Collone n'est pas vide :
TabPlage(i, 2) <> ''
Et dont la troisième colonne est Vide :
And TabPlage(i, 3) = ''

Pour la Variable 'StrBordeau' (ligne bordeau) qui contient deux champs 'Marque et Catégorie... C'est plus tordu !!!

Elle ne sera initilisée que par les lignes dont la 3em Colonne n'est pas vide ET que la 2em est vide :
If TabPlage(i, 3) <> '' And TabPlage(i, 2) = '' Then

Puis je cheche le premier mot en trouvant l'espace
StrMark = Mid(StrBordeau, 1, InStr(StrBordeau, Chr(32)))

Puis je cherche la suite de la chaine de caractère après l'espace :
StrCat = Mid(StrBordeau, InStr(StrBordeau, Chr(32)) + 1, Len(StrBordeau))

Donc à ce stade j'ai mes Trois Variables 'Répétitives' :
StrSupplier
StrType
StrMark

Et à partir de là je construis un Tableau Dynamique Indéxé séquentiellement que je mets en mémoire :
ReDim Preserve TabData(8, x)

Si la colonne 1 de ma plage est non vide ainsi que la 3ème :
If TabPlage(i, 1) <> '' And TabPlage(i, 3) <> '' Then

Et donc çà se contruis ici :
TabData(0, x) = StrSupplier
TabData(1, x) = StrType
TabData(2, x) = StrMark
TabData(3, x) = LTrim(StrCat)
TabData(4, x) = TabPlage(i, 1)
TabData(5, x) = TabPlage(i, 2)
TabData(6, x) = TabPlage(i, 3)
TabData(7, x) = TabPlage(i, 5)

8 colonnes 'X' lignes
Puis on passe à la ligne suivante
X = X + 1

Une fois la Boucle
For i = 1 To UBound(TabPlage)
Terminée car plus de 'Next' je boucle à nouveau pour envoyer mon tableau dynamque que je viens de construire (TabData) vers la Feuille 'Collection'
For L = 0 To UBound(TabData, 2)
With Sheets('Collection')
For C = 1 To 8
.Cells(L + 2, C) = TabData(C - 1, L)
Next
End With
Next

Je ne sais pas si ça va t'aider, mais c'est le principe de base.

Bonne Soirée
@+Thierry

PS ces 'choses' dans la V01, sont encore plus tordues :
Mark = 1

ou
Mark = 2

Puis
If Mark = 1 Then StrMark = 'Marque inconnue': StrCat = StrBordeau

Cà me permet de ne pas avoir 'Intel' comme marque de ventilo... Mais c'est pas facile à expliquer... Si on a réinitialisé la marque 'Mark = 1', si on a initilaisé la Catégorie Mark = 2... Si MarK = 1 au stade de mon contruction de mon Tableau, c'est que c'est une Marque Inconnue...

Je Dois Filer
@+
 

Statistiques des forums

Discussions
312 231
Messages
2 086 457
Membres
103 217
dernier inscrit
LoshR7