[Résolu] Utilisation avancée des fonctions Mid, InStr (sur de longues chaines)

dieu08

XLDnaute Occasionnel
Bonjour,

Je me refusais à publier encore une nouvelle demande mais je m'y vois obligé du fait de mon manque de connaissance (et pourtant j'ai essayé de m'en sortir seul). Voici donc mon problème :

Dans le fichier exemple joint, j'ai extrait une partie des données que je récupère d'un formulaire.

Vous constarez que les données sont stockées dans une même cellule avec 8 blocs de données séparés par des "[" et "]".

A l'intérieur de ces blocs, vous avez 5 données entre cotes (ou à "None" si pas de données) qui sont séparés par des virgules.

Le but final est de pouvoir extraire chaque donnée (donc 8 x 5 données pour chaque ligne) séparement et ainsi pouvoir filtrer par les dates (ou autres) par exemple.

J'ai tenté un script qui utilise des "arrays" remplis par l'intermédiaire de "InStr" imbriqués et de "Mid" mais les formules imbriquées à partir du 3ème blocs deviennent trop complexes à gérer :

Code:
Option Base 1
Dim tblo1a() As Variant

Sub test()

nblig1 = Application.CountA(Range("A1:A65536"))

ReDim tblo1a(nblig1, 8)

For i = 2 To nblig1

tblo1a(i, 1) = Mid(Cells(i, 16), (InStr(Cells(i, 16), "[") + 2), (InStr(Cells(i, 16), "]") - 3))
tblo1a(i, 2) = Mid(Cells(i, 16), _
                                    (InStr((InStr(Cells(i, 16), "]")), Cells(i, 16), "[")) + 1, _
                                            (InStr( _
                                                    (InStr( _
                                                        (InStr(Cells(i, 16), "]")) _
                                                        , Cells(i, 16), "[" _
                                                    )), _
                                                Cells(i, 16), "]" _
                                            )) _
                                                     - _
                                                        (InStr(Cells(i, 16), "]") + 4))
                                    
tblo1a(i, 3) = Mid(Cells(i, 16), _
                                    (InStr((InStr((InStr((InStr(Cells(i, 16), "]")), Cells(i, 16), "[")), Cells(i, 16), "]")), Cells(i, 16), "[")) + 1, _
                                        15)

                                            
Next i

End Sub

Je me tourne donc vers vous pour avoir une solution plus simple pour extraire ces données.

Merci d'avance.
 

Pièces jointes

  • exemple.xlsx
    8.3 KB · Affichages: 81
  • exemple.xlsx
    8.3 KB · Affichages: 81
  • exemple.xlsx
    8.3 KB · Affichages: 82
Dernière édition:

dieu08

XLDnaute Occasionnel
Re : Utilisation avancée des fonctions Mid, InStr (sur de longues chaines)

Bonsoir ChTi160,

Je suis désolé mais j'ai traité les posts dans l'ordre pour répondre. Et comme je l'indiquais à Eric, je répondrais à tout le monde.

Je n'ai malheureusement pas eu le temps d'analyser convenablement ton code pour te répondre ou te poser des questions.

J'avoue m'être concentré, à tort certainement, sur le post de Dranreb, car j'avais besoin d'une solution rapide pour mon problème.

Si tu me le permets, je reviendrais vers toi dès demain après avoir analysé ta proposition.
 

dieu08

XLDnaute Occasionnel
Re : Utilisation avancée des fonctions Mid, InStr (sur de longues chaines)

Bonjour dieu08
Bonjour Dranred
Bonjour le forum

je suis nul en formule et je vous parle pas des Matricielles lol
en pièce jointe une approche
double click dans cellule A1, marquée "Libellé"

Le Fichier : Regarde la pièce jointe 276358

Bonne fin de journée
Amicalement
Jean Marie

Bonjour Jean-Marie,

J'ai donc étudié votre script avec attention.

J'ai recherché certains fonctionnements sur le net : obtenir la dernière ligne, la dernière colonne (c'est plus simple que de faire un CountA), Resize, Ubound...

Je ne connaissais pas le lancement de la macro par le double clic.

J'ai bien tout compris et je trouve que ce script est au final plus simple à utiliser que les calculs matriciels.

J'aurais du finalement y regarder plus tôt ! Je vais peut-être modifier ce que j'ai utilisé.

Merci Jean-Marie.

A bientôt.
 

Discussions similaires

Statistiques des forums

Discussions
312 386
Messages
2 087 850
Membres
103 669
dernier inscrit
Anne Sicard