Microsoft 365 associer la valeur d'une cellule à ma macro en sélectionnant la bonne extension année

Excellerateur

XLDnaute Occasionnel
Bonjour chers membres,

je voudrais associer la valeur d'une cellule à ma macro.

je vous explique:

Grace à des macro, j'ai conçu un outil qui devra aller dans le répertoire et sélectionner un fichier qui aura un nom bien spécifique avec une extension date définie.
Sauf que chaque année ce sera un nouveau fichier que la macro devra aller chercher et il n''y a que l'année qui aura été modifiée dans le nom du fichier.

Exemple:

VB:
Sheets("Bouttons").Select
    Worksheets.Add After:=ActiveSheet
    ActiveSheet.Name = "BILL"
    Workbooks.Open Filename:= _
        "\\C\Downloads\EXPORT BILL 2021.xlsx"

    Range("A1:O4900").Select
    Selection.Copy

Mon but c'est que dans une feuille différente que je puisse avoir une cellule "B3" par exemple dans laquelle je pourrais saisir l'année que je souhaite extraire et que ça vienne sélectionner le bon fichier avec la bonne extension année (EXPORT BILL 2021.xlsx), puis (EXPORT BILL 2022.xlsx) et puis (EXPORT BILL 2023.xlsx) etc... lorsque je change l'année dans la cellule "B3" comme stipulé plus haut.

J'espère avoir été assez clair 😪.

Bon pour la suite j'aimerais bien copier le tableau dans son ensemble et non avoir une sélection
Code:
Range("A1:O4900").Select
définie par défaut car le nombre de ligne peut être amené à changer.

merci la team!
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Avec 365 utilisez power query
sinon pour la première question, une simple concatenation :

FileName: = "\\C\Downloads\EXPORT BILL " & Format(Sheets("LaFeuille").Range("B3"),"0000") & ".xlsx"

Pour la seconde si le tableau est commence en A1 : Range("A1").CurrentRegion
 

Excellerateur

XLDnaute Occasionnel
Bonjour,

Avec 365 utilisez power query
sinon pour la première question, une simple concatenation :

FileName: = "\\C\Downloads\EXPORT BILL " & Format(Sheets("LaFeuille").Range("B3"),"0000") & ".xlsx"

Pour la seconde si le tableau est commence en A1 : Range("A1").CurrentRegion
Merci pour ta contrib,

mais je crois que nous allons buter sur une embuscade si ion y va comme ça...

FileName: = "\\C\Downloads\EXPORT BILL " & Format(Sheets("LaFeuille").Range("B3"),"0000") & ".xlsx"
je crois qu'on devra également spécifier le classeur car la cellule dans laquelle on va modifier manuellement n'est pas dans le classeur extrait.

Je ne sais pas si tu me comprends.

Et pour le deuxième je crois comprendre que tu me demandes de remplacer
VB:
Range("A1:O4900").Select
    Selection.Copy
par:
VB:
Range("A1").CurrentRegion.Select
    Selection.Copy

C'est bien ça?
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,r

Oui il faut référencer explicitement et complètement la cellule. C'est ce que je pratique d'ordinaire, car on ne peut jamais être certain du classeur ou de la feuille active, peu nombreux le pratiquent ici ou ailleurs, mais cela devrait être systématique.

Range("A1").CurrentRegion était une réponse à :
Bon pour la suite j'aimerais bien copier le tableau dans son ensemble et non avoir une sélection

Pour voir à quoi correspond CurrentRegion, sélectionnez une cellule d'un tableau puis faite CTRL+*, CurrentRegion renvoie le tableau (au sens excel), groupe cellules contiguës bordé par une ligne vide en dessous, au-dessus, et une colonne à gauche et à droite.

Pour copier et coller un objet Range vous n'êtes pas obligé de le sélectionner (rares sont les actions qui y obligent)

VB:
With ThisWorkbook
 .Sheets("Feuil1").Range("A1").CurrentRegion.Copy .Sheets("Feuil2").Range("A1")
End With
Copiera le tableau en A1 de la feuille Feuil1 en A1 de la Feuille Feuil2 du classeur qui contient la macro
 

Excellerateur

XLDnaute Occasionnel
Bonjour,

Avec 365 utilisez power query
sinon pour la première question, une simple concatenation :

FileName: = "\\C\Downloads\EXPORT BILL " & Format(Sheets("LaFeuille").Range("B3"),"0000") & ".xlsx"

Pour la seconde si le tableau est commence en A1 : Range("A1").CurrentRegion

Bonjour Fil, bonjour @Hasco

merci déjà pour ta contribution.

je ne sais pas si c'est dû au fait que je sois sur Office 2016, mais ça ne marche toujours pas sur mon pc.
Voilà le code que j'ai saisi:
VB:
FileName: = "\\C\Downloads\EXPORT BILL " & Format(Sheets("LaFeuille").Range("B3"),"0000") & ".xlsx"
Le code marche dans un premier temps mais dans la suite de ma procédure j'ai saisi le même code mais sur un autre fichier (donc un autre itinéraire de récup). Mais là ça bug (je crois que ça ne sais plus dans quel classeur récupérer la cellule B3.

J'essaye depuis de réparer ça mais j'y arrive pas.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Déjà entre le : et le = il ne doit pas y avoir d'espace (FileName:=)

J'espère que vous avez au moins changé le nom "LaFeuille" pour l'adapter à votre besoin.

J'ai répondu avec ce que j'avais et ne peut deviner le reste.

Première chose à faire, est de tester le contenu de B3.
Mettez un point d'arrêt (F9) sur la ligne posant problème.
Lancez votre macro
Lorsque le la macro s'arrête sur la ligne (surlignée en jaune)
dans la fenêtre "exécution" (CTRL+G si elle n'est pas affichée) taper (point d'interrogation inclus) :

?Format(Sheets("LaFeuille").Range("B3"),"0000")

Validez
Dessous s'affichera le résultat

Mais le mieux serait de mettre ce contenu en variable (string) pour pouvoir le controler plus facilement

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
314 716
Messages
2 112 161
Membres
111 447
dernier inscrit
jasontantane