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
@+