Chercher le mot après, remplir une serie d'inputbox

Dim.Reichart

XLDnaute Occasionnel
Bonjour à tous,
J'ai (encore) des soucis pour créer une macro, je vous explique:
Au travail, on doit compiler des fiches (environ 80), qui contiennent chacune une vingtaine de rubriques, toujours les mêmes mais pas forcément placées dans le même ordre.
Ces fiches peuvent être au format word, libre office (ou équivalent), PDF et parfois PDF image (mais ce dernier cas sera écarté, sauf si vous avez une solution à proposer).
Donc, il faut recopier les différentes rubrique dans un tableur, avec une relecture préalable, afin de corriger les fautes éventuelles et parfois reformuler.
Vu la lourdeur de la tâche, je me suis dit qu'une macro serait la bienvenue, mais j'ai des soucis quasiment dès le début.

Voici en gros, ce que j'essaye de faire:
-Sélection de la fiche (feuille Recapitulatif, Commandbutton1)
-Ouverture du document d'un coté, et d'une USF, avec des inputbox pour chaque information à copier (en vis a vis du document, pas encore fait)
-copie des informations dans les inputbox correspondantes, en cherchant entre les mots clés listés
-une fois relues et corrigées, copie des infos des inputbox dans le tableau recapitulatif

Sauf que ouvrir le document ne fonctionne déjà qu'une fois sur deux et je ne sais pas pourquoi...
Je suis passé par Shell.application pour pouvoir ouvrir tous les types de documents, et activé la référence Library Word Object.
Je crois que du coup, il me faudrait la version Shell.application de la commande, mais je ne la trouve pas. Sinon, faire un traitement différent selon que le document est de type word (ou équivalent) ou PDF, mais ca ne m'enchante pas.

Donc, la (les) question(s), c'est d'une part, comment feriez vous? Est-ce que vous savez ce qui fait que ca ne fonctionne pas chez moi?
Toute autre remarque pertinente est la bienvenue evidemment.

D'avance, je vous remercie pour toute contribution, aide ou simple coup d'oeil à mon projet.
Et bonne soirée à tous également.
Dimitri.
 

Pièces jointes

  • Fiche Exemple.docx
    11.8 KB · Affichages: 3
  • Recap Exemple.xlsb
    23.9 KB · Affichages: 2

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Un petit recyclage d'une proposition que j'ai faite aujourd"hui dans un autre fil.
Un exemple pour ouvrir un fichier avec l'application par défaut associée au type de fichier.
VB:
Sub Ouvrir_X_Fichier()
Dim Fichier_Test
With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = False: .InitialFileName = CurDir: .Filters.Clear
    .Filters.Add Description:="Tous Fichiers", Extensions:="*.*", Position:=1
    .Title = "Choisissez un fichier"
    If .Show = -1 Then Fichier_Test = .SelectedItems(1) Else Fichier_Test = 0
End With
'Pas de fichier sélectionné
If Fichier_Test = 0 Then
MsgBox "Aucun fichier sélectionné!", vbCritical, "Erreur"
Exit Sub
End If
'ouverture fichier choisi
CreateObject("Shell.Application").Open Fichier_Test
End Sub
 

Dim.Reichart

XLDnaute Occasionnel
Bonsoir @Staple1600 ,
Merci pour ta procédure, ça ressemble a ce que j'ai en "plus carré", j'attaque les modifications nécessaires.

Pour boucler ensuite sur les mots du document, tu t'y prendrais comment stp?
Une seule méthode quel que soit le type de fichier, ou une par type?

EDIT: J'y réfléchis à mesure, et (je peux me tromper), Shell.application ouvre le fichier dans l'application qui lui est propre, mais comment puis-je connaitre l'application utilisée?
Et question subsidiaire, quel nom de variable précédent faut-il utiliser pour "lire" le document?
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re,

Si il faut ouvrir un fichier, alors ce qui prime c'est de l'ouvrir ou de savoir quelle application va l'ouvrir? ;)
Je me suis contenté d'essayer à repondre à cette seule interrogation
Je crois que du coup, il me faudrait la version Shell.application de la commande, mais je ne la trouve pas.
Sinon, faire un traitement différent selon que le document est de type word (ou équivalent) ou PDF, mais ca ne m'enchante pas.
 

Dim.Reichart

XLDnaute Occasionnel
Ce qui prime, c'est de copier les données du document au bon endroit.
Je me suis mal exprimé, désolé, je parlais de la version Shell.application de chercher dans le document.

Actuellement, j'utilise une boucle basée sur Mot = Monappli.content.Words, de 1 à Mot., mais cela ne fonctionne que si j'ouvre le document avec la commande new world.Application.Document.Open.
Si je comprend bien, lorsque je l'ouvre avec Shell.Application, la procédure ne considere pas qu'il s'agit d'un document type Word, et donc refuse les commandes propres à cette application, je pense que c'est ce qui me faisait planter avant, puisque cela arrive au moment où je change de méthode.

Donc, je vois deux solutions:
-soit il y a une commande generique, type Shell, qui permet de rechercher dans tout types de documents
-Soit je determine avant ou après ouverture l'extension du document, ou tout au moins son type, et je fais une procedure pour chaque type

Navré si je m'explique mal, mais ca n'est pas non plus très clair pour moi, alors j'ai un peu de mal a m'expliquer.
 

Staple1600

XLDnaute Barbatruc
Re

Je viens de relire le fil depuis le début.
Et à la réflexion, je ne suis pas sûr qu'utilser Excel/Word pour ce type de tâches soit le plus adapté.
La prime nature d'Excel, c'est d'être un tableur, et pas un logiciel de GED.

Si j'étais moi, et que je devais me fader ce genre de tâches, sans hésiter je quitterai Excel pour PowerShell
(outil natif inclus dans les dernières versions de Windows)
Voir le petit script joint en exemple.

NB: Si tu ne connais pas PowerShell, voir les différents tutos sur le net.
(accessibles à l'aide de tout bon moteur de recherche)
 

Pièces jointes

  • Ex_PowerShell.txt
    1.1 KB · Affichages: 5

Dim.Reichart

XLDnaute Occasionnel
Bonsoir @Staple1600 et les autres,
Merci pour ton avis, ça semble effectivement une solutionefficace, sauf que je suis à peine entrain d'apprendre les macros VBA, je ne pense pas que ce soit le bon moment pour moi de me lancer dans un autre type de codage.
Cependant, après recherche, il semblerait que certaines commandes Unix conviennent, dans mon cas, je pense que Grep est la bonne. Il faut "juste" que je trouve la syntaxe Excel, mais la j'ai un autre dossier prioritaire qui vient de tomber, je reprendrais celui-ci plus tard et je vais continuer à cogiter dessus en attendant.
Merci pour ton aide.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Dim.Reichart

Dim.Reichart
Comme disait ma tante Henriette: "Qui peut le plus, peut le moins"
Il y a moult scripts prêt à l'emploi à disposition sur le net
Et apparemment chercher un chaine de caractère dans N fichiers *.doc? est une question récurrente chez les amateurs de PowerShell.
;)
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil,

Dim.Reichart
Oui, pour chercher dans un fichier *.doc, j'ai trouvé avec Excel en bouclant sur ous les mots du document.
Et tu ne fais pas profiter la communauté XLDienne de ta procédure VBA en la publiant ici?
Cela pourrait pourtant interesser des lecteurs de ta discussion (avec une problématique proche de la tienne)
Et ce serait pile poil dans l'esprit du forum: le partage des connaissances.
PS: Si le code VBA dont tu parles est dans la PJ de ton premier message, ne tiens pas compte de ce qui précède ;)

Tiens justement, un petit partage dominical. ;)

NB: Si j'étais moi, pour cette problématique, je me focaliserai sur Powershell (au vu des possibilités offertes par cet outil) et laisserai Excel vivre sa vie de tableur ;)
 

Dim.Reichart

XLDnaute Occasionnel
Bonjour et bon dimanche,
Pour l'instant, je ne l'ai pas encore intégré en totalité à mon code, étant donné que ça ne fonctionnait pas dès le début, mais l'idée générale y est (même si ca manque de commentaires, je pense).

Concernant PowerShell, je l'ai déjà ajouté à la longue liste des "choses à apprendre". Mais étant donné que je ne serais pas le seul à utiliser cet outil d'extraction, et qu'une fois les fiches extraites, il faut faire des analyses dessus, grâce justement aux possibilités d'Excel, je ne sais pas si c'est le meilleur plan (cumulé avec le fait que je n'ai jamais utilisé de commandes UNIX, SHELL ou équivalentes).
Après, si tu me dis que PowrShell permet une utilisation simple une fois programmé, et des analyses, graphiques et autres du même style qu'Excel, effectivement, ça devient très intéressant.
 

Staple1600

XLDnaute Barbatruc
Re

C'est surtout que PowerShell est interfacé avec Windows et offre de très grandes possibiltés
(notamment de type traitement batch) et le temps de traitement est beaucoup plus court qu'avec du VBA.
Maintenant tu suis la piste que tu souhaites.

Personnellement, mon point* de départ est le suivant: "A chaque tâche, son outil dédié" ;)
*:NB: qui est une resucée de ce bon viel adage : "On reconnaît le bon ouvrier à ses outils. "
 

Dim.Reichart

XLDnaute Occasionnel
Re, oui, je vois que les possibilités sont démultipliées, je me pencherais dessus quand j'en aurais le temps. En attendant, on continuera à la main je pense, ou je finirais tout de même la macro Excel, quitte a migrer sur PowerShell plus tard, lorsque j'aurais appris à m'en servir.
Je posterais le fichier fini ici, pour servir à d'autres si besoin.
 

Dim.Reichart

XLDnaute Occasionnel
Bonsoir,
J'ai abandonné l'idée d'automatiser l'extraction dans les documents. En effet les checkbox sont devenues des caractères Unicode carrés, et pour les remplir, il faut les remplacer par un autre. Le souci, c'est que certains remplacent par un X, d'autre par un carré plein, carré coché etc... Bref trop de variabilité imprévisible!

Du coup, afin d'éviter d'avoir a se re-frapper le même genre de tâche, je pense qu'il faudrait créer un document Excel "maitre", qui permettrait d'ouvrir de nouvelles fiches, et de les compiler directement, sachant qu'il faudrait que ce tableau se mette à jour lorsqu'une fiche progresse.

Je ne suis pas sur que ce soit très clair, alors j'explique un peu le fonctionnement des fiches:
-lorsqu'un évenement négatif( accident, deversement etc) se produit, on rédige une fiche sous Word, reprenant les détails de l'évenement
-cette fiche sert de base de reflexion afin de prendre des mesures de prévention, et éviter que le même type d'incident se reproduise
-la fiche est echangée entre plusieurs interlocuteurs, chaque évolution de celle ci est enregistrée sous l'indice suivant (ind1, ind2...)
-lorsqu'une décision est prise, la fiche est close et la mesure définie appliquée
-la fiche est conservée pour archivage, et régulierement, on étudie l'ensemble des fiches (ce que je fais actuellement)

Donc, j'ai crée pas mal de formules et graphiques pour compter le type d'évenements, le nombre de fiches ayant reçu un indice, le délai de clôture etc.

Bref, selon vous, quelle méthode dois-je utiliser pour que le tableau soit à jour d'une part (en estimant que la totalité des fiches et indices passeront par moi, zéro oubli), et être sur que les fiches auront toutes la même "forme"?
J'ai lu en diagonale sur pas mal de méthodes (XML, bibliographie, sharepoint...) mais j'aimerais être sur d'apprendre la bonne chose avant de me lancer à corps perdu dedans.
A noter que je ne peux pas, où très peu modifier l'aspect même de la fiche, la base doit rester sous Word également le reste est à peu près libre, mais doit être "facile" d'utilisation pour un novice(autre que moi qui fabriquerait l'ensemble donc).

Voila, j'espere que j'ai correctement expliqué, n'hesitez pas si toutefois vous avez des questions ou autre réflexions à apporter à mon moulin.
Merci d'avance pour votre participation.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Dim.Reichart

Dim.Reichart
Des pistes de réflexions (à envisager peut-être)
• Les propriétés des documents Word= > BuiltinDocumentProperties
• Les possibilités offertes par Windows Search (pilotable par VBA - voir exemple dans les archives du forum)
 
Haut Bas