XL 2010 Extraction de donnée / Extraire donnée

Bantho

XLDnaute Nouveau
Bonjour à tous,

Je reviens vers vous concernant quelque chose qui me prend énormément de temps. En effet, je reçois des fichiers où dans les descriptifs, il y a plusieurs infos. Je dois en extraire les données comme par exemple :

Cellule A1 : Repiquage La personnalisation est prévue dans la zone de repiquage qui se trouve dans la partie blanche à gauche du millésime sur le planning. Impression recto seul. Fichier à fournir par vos soins au format du repiquage 255 x 40 mm en SMALL et ( 370 x 60 mm en XXL ) en PDF sans fond perdu. SMALL ouvert : 330 x 470 . Format plié : 330 x 235 mm. XXL ouvert : 480 x 700 mm. Format plié : 480 x 350 mm. Livré avec un rainage entre les feuillets et le planning pour un pliage, idéal pour l'envoi postal. Qualité Les feuillets sont en papier couché satiné 170 g qualité écriture, le planning est imprimé sur du papier 400 g qualité écriture.

En gros il faudrait, grâce au descriptif de la Cellule A1 :

Cellule A2 : 330X470 Cellule B2 : 330 X 235 mm Cellule C2 : 480 X 700 mm Cellule D2 : 170 g Cellule E2 : 400 g

Les cellules ne sont malheureusement pas homogène. L exemple donné est le plus compliqué car c'était pour des calendrier de toutes tailles mais généralement j ai une ou deux dimensions et une ou deux grammage de papier/textile par cellule :)
Je peux ensuite avoir 600 lignes comme 12000 lignes de produits :)

Aujourd'hui, la seule solutions que je possède est de filtrer par gramme ou mm ou Cm... imaginer 12.000 lignes ainsi ... c est un enfer :)

Je vous laisse un exemple aussi de fichier avec les descriptifs que l'on peut trouver :)

Je vous remercie infiniment pour toute l'aide que vous pourrez m'apporter
Bonne fin de journée à vous
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
Bonjour

Une solution avec une fonction VBA personnalisée utilisant RegEx
(adapté d'un code de JB)
VB:
Function separer(chaine As String, n, vType As Boolean)
  Set obj = CreateObject("vbscript.regexp")
  obj.Global = True
  obj.Pattern = IIf(vType, "\d{1,3}\s([x])\s+\d{1,3}", "\d{1,3}\s([g])+")
  Set a = obj.Execute(chaine)
  If a.Count > n - 1 Then separer = a(n - 1) Else separer = ""
End Function
Exemple d'utilisation
en B1 (puis recopie vers la droite)
=separer($A1;COLONNE()-1;VRAI)

et si on veut extraire le "poids"
=separer($A1;1;FAUX)

PS: Test OK sur la chaine de caractère exemple du message#1

NB:
- Ne fonctionnera que sous Windows (pas sur Mac)
- Ne pas oublier d'enregistrer le classeur en *.xlsm pour conserver le code VBA.
 
Dernière édition:

Bantho

XLDnaute Nouveau
Super :) Merci beaucoup
On va tester tout cela et je te tiens au courant.
Merci pour tes recherches
 

Discussions similaires


Haut Bas