Extraction de Chaîne de Texte dans une BDD Excel avec report des valeurs extrait

Signaler
Messages postés
7
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
6 octobre 2011
-
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
-
Bonjour à Tous,

J'ai une base de données d'environ 20000 lignes sous Excel 2010. Pour simplifier, disons que j'ai 1 colonne (disons la colonne A mais j'en ai plusieurs). cette colonne contient les données ci dessous.
Ce que je voudrais, c'est, via une macro :
[list]
créer une colonne B qui me dise quel fruit est en colonne A(Fraises Gariguettes, Fraises "tout court", Pommes, Peches, etc......)
créer une colonne C qui me dise quel format est en colonne A(Caisse, cagettes....).
créer une colonne D qui me dise quelle quantité est en colonne A(250g, 1kg, 2g , etc..)
Si possible, j'aimerais même une colonne E qui regroupe, le cas échéant, Fraises et Fraises Gariguettes ensembles : c'est à dire Fraise "tout court".
/list
Voilà, pour moi, c'est de la sorcellerie à l'état pur !!!. SI ça peut aider le développement, je peux par exemple tenir une petit base qui recense exhaustivement tous les fruits possibles, tous les formats, tous les poids....

et surtout : MERCI ...

BARQUETTES DE FRAISES 200g
BARQUETTES DE FRAISES GARIGUETTES 200g
CAISSES DE PECHES 20kg
CAGETTES DE POMMES 10kg
BARQUETTES DE FRAISES 500g
CAISSES DE PECHES 50kg
CAGETTES DE POMMES 5kg
BARQUETTES DE FRAISES 250g
CAISSETTE DE FIGUES VERTES 2kg
CAISSETTE DE FIGUES BLEUES 2,5kg
CAISSES DE PECHES 15kg
CAGETTES DE POMMES 5kg
BARQUETTES DE FRAISES GARIGUETTES 200g
CAISSES DE PECHES DE VIGNES 25kg
CAGETTES DE POMMES 15kg
BARQUETTES DE FRAISES 250g
CAISSETTE DE FIGUES VERTES 2kg
CAISSETTE DE FIGUES BLEUES 2,5kg
CAISSES DE PECHES 20kg
etc...... (20000 lignes tous les mois)


Extraction de Chaîne de Texte dans une BDD Excel avec report des valeurs extraites dans des colonnes

7 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut

Regarde les tableaux croisés dynamiques, c'est justement fait pour cela.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Bonjour,

Pour séparer les informations, tu peux utiliser Split avec comme séparateur l'espace.
Ensuite, il te faudra traiter le résultat.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Pour la séparation du texte, exemple de Split comme le recommande NHenry :
    Dim sLigne      As String
    Dim aMots()     As String
    Dim sResultat   As String
    Dim r           As Long
    
    sLigne = "BARQUETTES DE FRAISES GARIGUETTES"
    aMots = Split(sLigne, " ", , vbTextCompare)
    ' On sait que la structure est toujours "machin de"
    ' c'est à dire que les 2 premiers mots sont à supprimer
    ' L'index du tableau aMots commence à 0, donc la première
    ' donnée intéressante est à l'index 2
    sResultat = ""
    For r = 2 To UBound(aMots)
        sResultat = aMots(r) & " "
    Next r
    ' supprime le dernier espace
    sResultat = Trim$(sResultat)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Ou, encore plus simple : Si tes intitulés commencent toujours par "Barquette de" ou "Caisse de" :
    sLigne = "BARQUETTES DE FRAISES GARIGUETTES"
    sResultat = sLigne
    sResultat = Replace(sResultat, "Barquettes de ", vbNullString, , , vbTextCompare)
    sResultat = Replace(sResultat, "Caisses de ", vbNullString, , , vbTextCompare)
    sResultat = Replace(sResultat, "Caissette de ", vbNullString, , , vbTextCompare)
Messages postés
7
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
6 octobre 2011

Merci Jack,

on est sur un début... mais je dois préciser ma demande.
En effet, tu avais raison, je cherche à produire du tableau croisée dynamique et du graph derrière. et comme les infos qui m'intéressent (quel fruit, dans quoi, et combien) sont toutes dans la même colonne, voilà pourquoi j'ai besoin "d'éclater" l'info. ça, c'était clair.

le pb, c'est que là, je n'ai mis que qques lignes de ma base. Quelques fois (souvent en fait), les infos sont inversées. Le fruit n'est pas le 3ème mot. sa position est aléatoire. du genre :

FRAISES, 250g, BARQUETTE
BARQUETTES DE 250G DE FRAISES
BARQUETTES DE FRAISES 250g

(il peut y avoir des minuscules et majuscules)

c'est pour ça que je proposais dans le 1er post de fournir la liste des 30 ou 40 fruits possibles, afin que le code identifie dans la cellule ce qu'il doit considérer comme un fruit (et pas systématiquement le 3ème mot) et le reporte efficacement dans la colonne 'fruit'
Idem pour le contenant qui n'est pas systématiquement le 1er mot
Idem pour la quantité qui n'est pas systématiquement le dernier mot.
dis moi si je suis clair.

--------

Après, j'ai un autre truc à faire.

Si les fraises sont en présentation de 250g, elles viennent d'un fournisseur A
Si les fraises sont en présentation de 500g, elles viennent d'un fournisseur B
j'aimerais pouvoir générer le nom de ce fournisseur A ou B dans une colonne
Pareil si c'est des pêches en 10 ou 20kg, elles viennent d'un fournisseur C ou D, etc.....
(à mon avis, il faut prévoir que la liste des fournisseurs ne s'arrête pas simplement à un choix binaire, mais bon déjà, si je pouvais en gérer 2 par fruit je serais comment dire... hyper content ??

------

encore une fois, merci. je n'en reviens pas que des forums comme ça existent : les gens s'aident .. juste pour le plaisir de s'aider.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Bonjour,

Pourquoi ne pas procèder par étape, en mettant
à jour progressivement la base, en insèrant des ";" dans la perspective d' une utilisation de Split.
Exemple:
Sachant que les poids commencent par un chiffre
et se terminent toujours par g, insèrer un ";" avant et un autre après.
Faire de même pour les autres mots clés.
Après BARQUETTES, puis CAISSE, puis CAGETTES, etc...
Passer ensuite aux mot désignant les fruits.

Celà suppose donc un travail planifié, avec plusieurs requetes.Une par tache.



[] Ce qui va sans dire. va mieux en le disant.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
A titre d' exemple, requete qui remplace "CAISSE" par "CAISSE;"

"UPDATE MaTable SET MaTable.ChampA = " & _
"Replace(UCase(MaTable!ChampA),'CAISSE','CAISSE;');"

On peut imaginer une autre pour Kg

"UPDATE MaTable SET MaTable.ChampA = " & _
"Replace(MaTable!ChampA,'Kg','Kg;');"


[] Ce qui va sans dire. va mieux en le disant.