Extraire suite de mot suivant l'emplacement du document Excel

Bonjour,

Pouvez-vous me renseigner sur le sujet suivant.

Je suis un artisan et j'ai des affaires qui sont classées sur mon ordinateur par dossier en reprenant la syntaxe suivante :

NUMERO D'AFFAIRE - ENTREPRISE - INTERLOCUTEUR - LIEU - REFERENCE

Dans chaque dossier, j'ai mon fichier excel dans lequel je répertorie l'avancement du projet avec les détails de celui-ci.

Dans le fichier Excel j'ai :

Cellule A1 : NUMERO D'AFFAIRE

Cellule A2 : ENTREPRISE

Cellule A3 : INTERLOCUTEUR

Cellule A4 : LIEU

Cellule A5 : REFERENCE

Je souhaiterais que, dans le fichier excel, se remplisse la automatiquement en mettant dans les cellules B1 à B5 ce qui correspond en fonction du nom du dossier dans lequel se situe le fichier Excel afin de ne pa savoir à remplir ces cellules mais plutôt qu'elles se remplissent automatiquement.

Exemple de nom de fichier :

110120 - Vieux grenoble - Monsieur Jacques - brive - saint-georges

Le résultat doit être le suivant :

Cellule B1 : 110120

Cellule B2 : Vieux grenoble

Cellule B3 : Monsieur Jacques

Cellule B4 : brive

Cellule B5 : saint-georges

A noter qu'entre chacun des 5 éléments il y a " - " (espace + tiret + espace) et que le "-" (tiret) peut également être utilisé dans le nom de l'entreprise, de l'interlocuteur, du lieu ou de la référence. Idem pour les majuscules qui peuvent être employées à divers endroits.

Je pense avoir été assez clair mais n'hésitez pas à me demander des renseignements si ce n'a pas été le cas.

Merci d'avance pour votre aide !

Jeff

Bonjour,

Il manque quelques informations... Et combien avez-vous de fichiers comme celui-ci ? Sont-ils tous à un même emplacement ?

Pour l'instant, je vous propose une solution, qui je pense n'est pas suffisante, avec une fonction personnalisée :

function PARTIES()
application.volatile
nomfichier = split(thisworkbook.name, ".")(0)
PARTIES = split(nomfichier, " - ")
end function

Ensuite, en A1 jusqu'à A5, il faudra avoir cette formule :

=INDEX(PARTIES(),LIGNE())

Cdlt,

Bonjour,

Déjà merci pour votre réponse et votre temps.

L'arborescence se présente comme cela. Un dossier nommé AFFAIRES avec dedans toutes mes dossiers qui contiennent chacun un dossier Documents, Fiches, Plans et le document Excel en question.

AFFAIRES

110120 - Vieux grenoble - Monsieur Jacques - brive - saint-georges

Documents

Fiches

Plans

Fiche de suivi110120.xlsx

110121 - Vieux grenoble - Monsieur Jacques - brive - Patrice

Documents

Fiches

Plans

Fiche de suivi110121.xlsx

110122 - Minimes - Yves - Grenoble - recolor

Documents

Fiches

Plans

Fiche de suivi110122.xlsx

J'ai rentré votre formule dans mon document Excel sous VBA.

Je ne sais pas comment et où rentrer cette formule (=INDEX(PARTIES(),LIGNE()). Dites moi quelles informations sont manquantes.

Encore merci

Bonjour,

Donc pour l'arborescence, elle se présente comme ça ?

AFFAIRES
    110120 - Vieux grenoble - Monsieur Jacques - brive - saint-georges
        Documents
        Fiches
        Plans
        Fiche de suivi110120.xlsx
    110121 - Vieux grenoble - Monsieur Jacques - brive - Patrice
        Documents
        Fiches
        Plans
        Fiche de suivi110121.xlsx
    110122 - Minimes - Yves - Grenoble - recolor
        Documents
        Fiches
        Plans
        Fiche de suivi110122.xlsx

Sinon, il faut copier le code de la fonction dans Visual Basic :
- D'abord, allez dans l'onglet Fichier/Options/Personnaliser le ruban/Activez l'onglet "Développeur",
- Allez sur l'onglet Développeur, cliquez sur "Visual Basic",
- Dans le menu de l'éditeur, Insertion/Module,
- Dans ce module, collez y le code de la fonction,
- Sauvegardez le fichier (au format .xlsm pour qu'il prenne en charge les macros),

Puis, rendez vous sur la feuille et en A1 jusqu'à A5 :

=INDEX(PARTIES();LIGNE())

PARTIES() renvoie un tableau avec les parties du nom du fichier.

Ligne() donne le numéro de ligne en cours (donc si vous utilisez cette formule en A2:A6, on avisera),

INDEX renvoie l'élément du tableau à la position désignée.

Cdlt,

Re,

Voici sinon un premier essai avec une procédure à placer si possible dans un nouveau fichier destiné à mettre à jour toutes les fiches :

Sub Ficher()

dim wb as workbook
dim dossiers(), parties
dim rep$, entree$, spath$, fichier$
dim n%, i%

rep = "C:\...\AFFAIRES\" '<<<<< ADAPTER : chemin dossier parent

entree = dir(rep, vbdirectory) '1er contenu du dossier
while entree <> "" 'tant qu'il y a du contenu
    if not entree like "*.*"and entree like "######*" then 'si dossier commence par une chiffre
        redim preserve dossiers(n) 'redimension tableau noms dossiers
        dossiers(n) = entree 'valeur item
        n = n + 1 'incrementation
    end if
    entree = dir 'contenu suivant
wend

for i = lbound(dossiers) to ubound(dossiers) 'pour chaque dossier relevé
    spath = rep & dossiers(i) & "\" 'sous-dossier de l'affaire
    fichier = dir(spath & "Fiche*.xlsx") 'fichier désiré
    if fichier <> "" then 'si existe
        parties = split(split(fichier, ".")(0), " - ") 'tableau scindant le nom
        set wb = workbooks.open(spath & fichier) 'ouverture et affect wb
        wb.sheets(1).range("A1").resize(ubound(parties) + 1,1) = application.transpose(parties) 'en A1 feuille 1, on colle
        wb.close true 'on ferme et sauve
    end if
next i
        
end sub

Il faudra que vous mettiez votre vrai chemin !

Ici, je suppose qu'il n'y a qu'une fiche par affaire, qu'elles sont au format .xlsx et toutes libellées ainsi "Fiche...". Je suppose aussi que tous les sous-dossiers du dossier AFFAIRES commençant par 6 chiffres correspondent bien à une affaire (sinon, il faudra adapter).

Il faut exécuter le code avec les classeurs fermés au départ.

Je n'ai pas testé donc c'est à voir, le risque d'erreurs n'est pas nul...

Cdlt,

Oui c'est bien ce que j'ai fait mais je n'arrive pas à faire ça :

Puis, rendez vous sur la feuille et en A1 jusqu'à A5 :

=INDEX(PARTIES();LIGNE())

Je ne sais pas ce que je fais de mal.

La macro ne nous fournit pas un tableau "classiques" sur ma feuille donc je ne sais pas comment je peux faire un INDEX

De toute façon, si vous avez beaucoup de fichiers, ce n'est pas une bonne option, vous devriez coller le code et la formule dans chacun d'eux. Essayez de créer un nouveau fichier pour y coller le dernier code et l'exécuter afin de voir si tous les fichiers sont bien mis à jour...

Attention, le code mettra les infos en A1:A5 de la feuille en première position. Si ce n'est pas ce qui est voulu, il faudra adapter.

Sinon, pour la fonction, sur ce fichier, je l'ai utilisée comme ça :

Si le nom est altéré, il faudra rajouter les espaces de manière à avoir A - B - ... - E.xlsm

Edit : La formule est à utiliser sur excel et non dans le code

Oui c'est bien ce que je faisais.

Quand je teste votre Excel en le mettant dans mon dossier, uniquement la case A1 se rempli avec le nom du fichier Excel. Les cellules A2 à A5 sont replies avec #REF! (Effectivement par la suite je ne compte attribuer les cases A1 à A5 pour l'attribution des valeurs mais je verrai plus tard.

Je n'ai pas la décomposition du dossier source qui apparait dans les 5 cases.

Mais j'apprécie cette solution là plutôt que l'autre. En effet avec cette solution me permet de créer un dossier source comprenant ce fichier Excel que je dupliquerai à chaque affaire et changerai le nom du fichier Excel.

Comme je vous ai dit, il faut renommer le fichier pour revenir à un modèle T1 - T2 - T3 - T4 - T5.xlsm car, avec le transit par le forum, le nom du fichier a été altéré et a probablement perdu ses espaces. Or, la fonction repose sur une scission du nom en fonction d'un séparateur bien précis " - " (espace&tiret&espace).

Effectivement j'avais raté ce problème là, désolé...

Je vais essayer de récupérer le nom du dossier source pour faire la décomposition et ensuite j'essaierai de renvoyer les valeurs vers des cases placées et différents endroits dans mon fichiers (Pour cela je tenterai de faire apparaitre les 5 valeurs sous forme de tableau à un endroit qui ne me gène pas sur la feuille et je mettrai tout simplement =A1, =A2 ... dans les cases où je veux les valeurs)

Rechercher des sujets similaires à "extraire suite mot suivant emplacement document"