[excel/VBA] export données .xls vers fichiers .txt - méthode d'extraction automatique

Bonjour,

Je cherche à exporter les données d’une case d’une feuille excel vers un fichier texte. Il s’agit de tour de parole d’un dialogue entre deux personnes (sujet A et le sujet B). Une case contient le contenu d’un tour de parole “bonjour Pierre, comment vas-tu ce matin”. Chaque tour de parole (1,2, …, n) est à exporter dans un fichier sujetA_tour1.txt.
$A/tour1 [quote=""]
“bonjour !”
[/quote]
va dans le fichier sujetA_tour1.txt
$B/tour2 [quote=""]
bonjour !
[/quote]
va dans le fichier sujetB_tour2.txt
$B/tour 3 [quote=""]
ça va ?
[/quote]
va dans le fichier sujetB_tour3.txt

Ma feuille excel contient le n° du tour de parole le sujet A ou B, et un theme (chocolat, concombre, poivre, épices, etc.), etc.

  • je souhaiterai créer automatiquement un dossier <theme_chocolat> où il crée un fichier sujetA_tour1.txt, etc … pour la réponse de son interlocuteur sujetB_tour2.txt <theme_concombre> sujetB_tourn.txt, etc …
    … de sorte qui j’obtiens une arborescence des thème abordés et contenu des échanges dans mes dossiers.

… je ne sais pas si j’ai été assez clair dans mes explications !?
merci de vos réponses,

Lionel

Avec ce système, tu vas avoir autant de fichiers que de prises de paroles ?

As-tu pensé à une sauvegarde au format xml ?

je souhaiterai traiter les fichiers 1/1 avec un script perl qui parcourt les dossiers, lit le fichier et annote/tag certains termes. Il renvoit le résultat dans un fichier résultat que j’aimerai récupérer dans excel ensuite.

Le but des dossier et l’arborescence serait d’avoir comme une sorte de fil rss discursif. La solution XML … oui peut-être ? mais il faudrait me l’expliquer.

Tout ce que tu expliques là, excel (+VBA) doir savoir le faire directement en jouant sur les filtres.
Donc pourquoi passer par une interface fichier ?
Tu traites ta feuille1, et tu mets le resultat dans ta feuille2 que tu exporteras ensuite dans un autre classeur, ou même tu écris directement dans le deuxième si c’est possible

Sinon, pour la solution arborescence fichiers, tu dois pouvoir explorer ta feuille en l’explorant colonne par colonne.
Pour chaque rubrique rencontrée tu crées le répertoireavec MKDIR
Puis tu rentres dans le répertoire (CHDIR) et tu traites le niveau inférieur sur le même modèle (on doit pouvoir le faire par récursivité)

Enfin, si la feuille se présente comme je l’imagine

OK, je m’explique :
Voici un exemple de corpus :
Sx;nom_du_sujet_valeur1;valeur2;tour_n°x;“attends, reprends la main !”
Sx;nom_du_sujet_valeur1;valeur2;tour_n°x;“je reprends la main”
Sx;nom_du_sujet_valeur1;valeur2;tour_n°x;“remets le dans l’écran !”
Sx;nom_du_sujet_valeur1;valeur2;tour_n°x;“en fait, tu l’avais sorti de l’écran”
Sx;nom_du_sujet_valeur1;valeur2;tour_n°x;“là, je vois le repère qui bouge”

Je passe ce fichier par un script perl et j’obtiens par exemple pour chaque mot son correspondant grammatical :

attends;VER:pres;attendre
,;PUN;,
reprends;VER:pres;reprendre
la;DET:ART;le
main;NOM;main
!;SENT;!
je;PRO:PER;je
reprends;VER:pres;reprendre
la;DET:ART;le
main;NOM;main

etc.

Je récupère par conséquent un document au format texte qui me met ligne par ligne le mot son correspondant grammatical (pronom personnel, verbe, etc.) et le lexème.
Je veux dans un premier temps :

  • soit découper mes tours de parole pour faire /fichier (tour de parole) tourner mon script perl puis récupérer ensuite dans un format XML l’arborescence des dossiers et fichiers créés;
  • soit, comme tu le propose dans plusieurs feuilles .xls. Mais dans ce cas il me faudrait faire un recherchev dans la chaîne de caractère du document excel, par exemple, “en fait, tu l’avais sorti de l’écran”, qu’il aille pour chaque chaîne séparé par des espaces “en” “fait” “,” “tu” “l’” “avais”, etc., vérifier dans le résultat (mot/fonction grammaticale/lexème, que j’importe dans une feuille excel) et renvoit pour chaque mot le résultat soit dans la même case du document excel tel que en<PRO:PER(en)>fait<VER:pres(FAIRE)>tu<PRO:PER(tu)> l’<PRO:PER(l)>avais<VER:impf(AVOIR)>, etc., ou bien dans des cases séparées/alignées.

suis-je plus clair ?

Effectivement, traiter en excel suppose de rentrer le dictionnaire, et s’il est conséquent les recherches risquent de ne pas être optimisées

L’exemple que tu donnes, correspond à peu près à ce que je m’imaginais quand je t’ai proposé la solution xml.
Et comme c’est ce à quoi tu veux arriver en définitive, il devrait être possible de construire à partir de la feuille excel une arbrescence

<Sx>
  <sujet name=nom_du_sujet_valeur1>
    <valeur2 name= ...>
      <tour name= ...>
        <dialogue>
           attends, reprends la main !"
        </dialogue>
etc..

et de demander à perl de recopier telles quelles les lignes tag et de traiter les autres (en y rajoutant ses propres tags si nécessire)

Pour ce qui est de construire une telle arborescence à partir du contenu de la feuille excel, ca ne pose aucun problème en vba.
Si tu veux plus de précisions sur ce point, pas de pb

merci beaucoup de ta réponse.
Juste pour info parce que là vraiment excel vers xml ce n’est pas mon fort : comment tu arrives à automatiser la construction de ton fichier xml à partir de la feuille excel ?

Concernant,

Je suis arrivé à un résultat contraingnant, mais un résultat quand même . Je m’explique :

  1. je prends ma phrase je fais un
=NBCAR(Ax)
  1. puis je cherche les espaces
 =CHERCHE(" ";Ax)
  1. je fais un
=STXT()

qui me permet d’isoler chaque mot dans une case
4) je fais mon

=RECHERCHEV()

pour chaque mot/case et obtiens mes résultats
5) je concatène

=CONCATENER()

avec des

;"<";">";

etc.
et j’obtiens dans une case la chaîne suivante ->

ouais<int>ça<pro:dem>zoome<ver:subp>dans<prp>l'<det:art>écran<nom>

C’est très long et il devrait y avoir des solutions plus simple, notamment qui permettent d’automatiser et éviter certaines erreurs … dans un second temps je souhaiterai comme tu le propose construire cet arbre xml.

Pour le reste, je refléchis à ta réponse cela et te fais un retour mais je suis d’ores et déjà preneur de précisions sur l’arborescence du contenu de la feuille excel en VBA.

Merci encore gcc,
Lionel

Quelques petites remarques de première lecture :

  • ta démarche semble la bonne. Ce qui m’étonne, c’est que tu dises que c’est long
    essaie de mettre Application.ScreenUpdating = False et Application.ScreenUpdating = true en début et en fin de programme voir si tu gagnes du temps

à mon avis : superflu

il serait peut être plus rapide de distribuer ta cellule et de traiter ensuite chacune des résultantes, ou encore d’utiliser split()

tu as pensé à trier sur la première colonne ?

j’aurais plutôt vu quelque chose du genre
<mot type=int value=ouais>
<mot type=pro:dem value=zoome> etc …

pour la construction du xml, je regarde de plus près et je te dis la suite

Merci,

Eh bien, en fait je fais tout cela séparément : j’ai tout le contenu (un tour/cellule) dans un feuille avec le nom des sujets, et des valeurs x,y, etc. - je fais le ménage dans les espaces par un

=SUPPRESPACE()

puis je

=CONCATENER()

mon résultat pour ajouter un espace à la fin.

Je m’explique : dans la phase suivante je souhaite découper/mot séparé par des espaces, et j’ai par conséquent besoin d’avoir la dernière chaîne de caractère d’une phrase également -> j’ajoute un espace à la fin de la dernière chaîne de chaque phrase.

là je suis un peu perdu, parce que je fais tout à la main, chaque étape séparément dans une feuille de mon workbook. J’utilise les fonctions d’excel là ! et j’ai des fonctions très longues pour l’instant … c’est pour cela que c’est long, et mon intel duo rame.
[lien IMG 2]
[lien IMG 3]

là, je serais preneur également … puisqu’il semblerait que ça me facilite le travail, notamment toute la phase d’extraction des mots.

c’est également le résultat que je souhaite avoir, parce que pour l’instant, ça ressemble à cela
[lien IMG 4]

OK
merci de tes efforts,
L

Il faudrait que tu mettes des vignettes avec un lien pour accéder à tes images de copie d’écran, parce que là ton post devient difficile à lire sur des écrans pas trop larges …

Je commence à comprendre pourquoi c’est lent …
Essaie la chose suivante

  • tu copies dans une feuille vierge tes colonnes A à G
  • tu sélectionnes la colonne G
  • tu fais Donnees > Convertir > délimité > espace (interpréter les séparateurs identiques consécutifs comme uniques)
    Normalement, la distribution qui en découle devrait te permettre de simplifier notablement ton programme
    Si ça te convient tu évalues le nombre de colonnes max que pourrait nécessiter la conversion, et tu remets la suite de ton programme au delà (à droite) de ces colonnes.
    Le plus simple étant quand même de passer par le VBA (commandes split et vlook), mais essaie déjà cette méthode

Effectivement, beaucoup plus rapide !
C’est bon à savoir

Il me reste à mettre en forme en xml maintenant … :confused: