Extraire chemin et nom de classeur pour fonction

J

Julien

Guest
Bonjour,

Je voudrais faire une fonction qui compare les cellules A2,A3... de la feuille ouverte à une autre feuille.

Pour cela j'utilise la fonction RECHERCHEV:

Code:
RECHERCHEV(A2;'D:\\Mes documents\\Excel\\[SuperClasseur.xls]SuperClasseur'!$1:$65536;5;0)

Ca marche pour ce classeur spécifique mais il faudrait que ca marche pour n'importe quel classeur.
Pour cela, il faut que j'utilise par exemple les variables 'CheminFichier' et 'NomClasseur'dans ma formule qui serait donc de cette forme:

Code:
RECHERCHEV(A2;'CheminFichier[NomClasseur.xls]NomClasseur'!$1:$65536;5;0)

Il y a bien une fonction pour demander à l'utilisateur le chemin d'un fichier à partir d'un explorateur, mais celle-ci retourne le chemin complet du fichier:

Code:
FichierChoisi = Application.GetOpenFilename('fichier excel, *.xls', , 'Donner le chemin du fichier à comparer')

J'ai donc par exemple FichierChoisi= 'D:\\Mes documents\\Excel\\SuperClasseur.xls
Je voulais savoir comment extraire le nom du classeur (sans xls) et le chemin (sans le nom du fichier) pour ensuite les placer dans ma formule.

Ou peut-être existe t-il une façon différente pour résoudre mon problème...?

Et si en même temps vous connaissait le code de la boucle pour que ma macro affiche sur la cellule suivante le résultat de la formule en A3... et qu'elle s'arrête lorsque la cellule A.. est vide.

Je vous en remercie d'avance :)
 
B

bebere

Guest
bonsoir Julien
une partie de réponse

Sub Noms()
MonChemin = ThisWorkbook.Path
MonNom = ThisWorkbook.Name
MonNomSansExtension = Left(MonNom, Len(MonNom) - 4)
End Sub

pour la suite fichiers en pièces jointes?

à bientôt
 
J

Julien

Guest
Bonjour,

J'ai essayé:
Code:
MonChemin = ThisWorkbook.Path
MonNom = ThisWorkbook.Name
MonNomSansExtension = Left(MonNom, Len(MonNom) - 4)
End Sub
Mais avec ca, je récupère le chemin et le nom du fichier excel où est placé ma macro (elle est dans les macros persos pour qu'elle soit utilisable sur n'importe quel classeur).

Je pourrai réutiliser ce code s'il me donnait le chemin et le nom du classeur actif.

Je pourrais faire mon programme de la façon suivante:
1) J'utilise une fonction qui me permet d'ouvrir un classeur: L'utilisateur choisi donc le fichier à comparer.
Il s'ouvre.

2) Je modifie le code si dessous pour qu'il s'applique au classeur ouvert /actif:
Code:
MonChemin = ThisWorkbook.Path
MonNom = ThisWorkbook.Name
MonNomSansExtension = Left(MonNom, Len(MonNom) - 4)

3)Et ensuite, je place les variables dans ma formule comme ceci:
Code:
RECHERCHEV(A2;'MonChemin[MonNom]MonNomSansExtension'!$1:$65536;5;0)
(ce qui ne doit pas être la syntaxe exacte pour placer des variables dans une fonction?).

En fait vu que je débute vraiment en macro, j'aimerais connaître le code VBA des 3 parties de mon programme citées ci-dessus.

Ou s'il y a une manière plus simple de le faire.

Merci d'avance.
 
B

bebere

Guest
bonjour Julien, le Forum
d'abord recherchev=vlookup en vba; remplacé par ,
Application.VLookup(ValeurRecherchée, PlageRecherche, NoColonne)
il faut concaténer signe &
MonChemin & Workbooks(MonNom).Sheets('NomFeuille').range('A1:A56')
explique ce que tu veux faire,il y a peut être une autre manière
maintenant je n'ai pas le temps
à bientôt
 
J

Julien

Guest
OK Merci pour les infos.

(Je mets dans les prochains messages les 2 classeurs que je veux comparer et le classeur du résultat de comparaison.)

Je vais essayer d'expliquer ce que je veux vraiment faire:

J'ai 1 fichier contenant les références de produits et leur prix. Mais ce fichier change tous les jours. Ce que je veux, c'est la différence de ces 2 fichiers:
Pour l'instant, dans excel je tape une formule qui regarde
si les réf du fichier d'aujourd'hui sont présentes dans celles du fichier d'hier:
- si oui: et si le prix d'aujourd'hui= 0 écrire 'Obsolète', sinon écrire 'différence prix auj - prix hier'.
- si non: écrire 'Nouveau'

Je dois faire aussi une 2ème recherche qui regarde chaque référence du fichier d'hier pour voir si elles sont dans le fichier d'aujourd'hui, si ce n'est pas le cas écrire 'Plus en vente'.

Ensuite j'étends ma formule aux cases d'en dessous et je regarde le résultat.


Mais le problème avec cette méthode, c'est que je dois retaper toujours le chemin des fichiers dans ma formule. Et de plus, le nombre de référence peut changer donc il faut que j'étende mes formule de la même dimension que les tableaux.

Il me faudrait donc une super macro qui automatise tout ca :woohoo:

1ère partie: Récupération des données de l'utilisateur:
Je viens de penser que si mes fichiers sont toujours au même endroit sur mon disque et ont toujours le même type de nom, par exemple Imprimantes-18-11.xls pour le fichier du 18 novembre contenant les références des imprimantes; je pourrais demander à l'utilisateur le type de produit à comparer et les 2 dates.

Pour ensuite écrire dans ma formule quelque chose du genre:
D:\\MesDocuments\\Excel\\ & Workbooks(TypeProduit & - & Jour & - & Mois & .xls).Sheets('Feuil1')

2ème partie: Affichage du résultat de la comparaison:
Il faudrait que ma macro remplisse une feuille comparaison avec les nouveaux produits, les produits qui ont changé de prix, les produits obsolètes et les produits qui ne sont plus en vente (pas les produits dont la différence vaut 0 et les produits toujours en vente)

J'aimerai bien un petit peu d'aide pour la programmation :unsure: où si vous avez autre chose à proposer.
 
B

bebere

Guest
rebonsoir Julien
suis de retour
ton chemin tu le tapes dans une cellule et puis menu insertion nom définir ex : Mon Chemin.comme cela tu n'as plus besoin de le taper
si tu peux mettre un fichier zippé -50k nom simple.zip, je peux te faire une macro
à bientôt
 
J

Julien

Guest
Fichier2: Imprimantes-18-11.zip

Fichier contenant les références des imprimantes du 18 novembre + prix
J'ai rajouté: - la formule de la 1ère comparaison à droite des références pour voir les nouveaux produits, et la différence des autres produits
- la formule de la 2ème comparaison qui me donne les produits plus en vente et toujours en vente
Ces formules sont aussi dans le fichier comparaison.xls mais elles sont un peu plus clair de celui ci car il ne fallait pas que je mette le chemin complet de ce classeur.

Lien supprimé
 
J

Julien

Guest
Fichier3: Comparaison.zip

Voilà le résultat de la comparaison des deux fichiers.
Je rappelle mes problèmes:
les chemins de mes fichiers sont fixes et mes tableaux contiennent les produits dont la différence vaut 0 et les produits toujours en vente.

Lien supprimé
 
B

bebere

Guest
Re:Fichier2: Imprimantes-18-11.zip

julien
regarde ds imprimante18, j'ai commencé une procédure
pas fini mais un résultat,remarque bienvenue
continue demain
maintenant dodo
à bientôt [file name=ImprimantesV1.zip size=15484]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ImprimantesV1.zip[/file]
 

Pièces jointes

  • ImprimantesV1.zip
    15.1 KB · Affichages: 37
B

bebere

Guest
Re:Fichier2: Imprimantes-18-11.zip

bonjour Julien,le Forum
dernière version
attend nouvelle
à bientôt

[file name=ImprimantesV2.zip size=22057]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ImprimantesV2.zip[/file]
 

Pièces jointes

  • ImprimantesV2.zip
    21.5 KB · Affichages: 46
J

Julien

Guest
Re:Fichier2: Imprimantes-18-11.zip

Merci Bebere, le résultat est très bien!

J'ai quelques questions sur le code de tes macros:
1) Je ne vois pas à quoi sert la Macro1 dans le classeur Imprimantes-17-11, je vois juste qu'elle sélectionne les cellules A10:C15 dans le classeur imprimante-18-11.

2) Dans la procédure de comparaison, je comprend que tout d'abord, tu veux savoir si Imprimante-17-11 est ouvert, si ce n'est pas le cas, l'ouvrir.
Ensuite Wb2 = classeur Imprimantes-17-11
Wb1= ThisWorkbook, donc classeur Imprimantes-18-11 (je suppose)
On appelle 'l' le nombre de ligne du tableau d'Imprimantes-18-11
plg1 la plage du même tableau
Jusque la je suis OK.
Mais après pourquoi tu gardes le même l pour la plage plg2 (tu as mis la ligne qui selon moi calcule la longueur du tableau Imprimantes-17-11 en commentaire.)
plg2 doit être la plage du tableau du 17
nbrel c'est le nombre de ligne de plg1 donc 'l'?

Après avec une méthode de recherche (ingénieuse!) tu fais les différentes comparaisons.
Ensuite, j'ai un petit peu de mal à comprendre, j'aimerai bien quelques commentaires dans le code stp...

Pour faire quelques améliorations:
-j'aimerais bien pouvoir choisir avec quel classeur comparer le classeur ouvert
-que ca affiche le résultat dans un nouveau classeur.
-que ca n'affiche pas 'toujours en vente' dans le résultat.
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino