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
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas