XL 2013 [RESOLU] VBA - Ouvrir un fichier et une feuille spécifique selon des cellules du fichier source

Scoty

XLDnaute Occasionnel
Bonjour à tous :)

Je me lance dans les macros VBA depuis peu, et j'aurai besoin d'un petit coup de pouce. Je sais que le sujet a été traité plusieurs fois, mais je n'arrive malheureusement pas à l'appliquer à mon cas... ou je ne trouve pas exactement ce que je souhaite :/ Explication :

• D'un 1er fichier ("SOURCE"), j'y compile des infos comptables, soit une feuille pour autant de tableau de bord que j'ai.
• Je souhaiterai, grâce à la feuille MACRO de ce fichier source :
1- aller dans la feuille souhaité selon une cellule (ici D4), autrement dit la ville
2- copier le tableau
3 - Ouvrir le tableau de bord initiale de la ville
4 - Ouvrir la feuille correspondante a la cellule c4 du fichier SOURCE <= C'est ici que je sèche !
5 - Coller le tableau

Vous aurez compris qu'il s'agit la de mettre à jour des tableaux du mois précédents, avec les données du mois en cours...

Mes tableaux sont prêts, j'ai commencé un bout du code, mais je sèche quand il faut ouvrir la bonne feuille du tableau de bord selon les infos du fichier SOURCE. Les solutions que j'ai pu trouver proposent de mettre le nom de la feuille directement dans le code. Hors je ne souhaite pas cela car tous les mois je dois les mettre à jours, ce qui serait plus simple de modifier la cellule de ma feuille macro.

J'aurai 2 questions :

• J'ai trouvé ce bout de code dans un forum :
Code:
'Selection de la feuille en fonction de la cellule D4
Range("d4").Select
k = ActiveCell.Value
Sheets(k).Select
Cela marche, mais quand pensez vous ?

• Que dois-je mettre pour récupérer la bonne feuille du fichier ouvert ? Après ce code :
VB:
'Ouvre le fichier / la feuille correspondante
Workbooks.Open Filename:=Range("G8").Value
'Je voudrais mettre un worksheet ici[I] en fonction de la cellule c4 du premier fichier mais pb, ou cela n'est pas la bonne solution ?[/I] :( !

J'ai pensé créer une variable "dim as worksheet" mais je suis perdu quant à son utilisation...

Je vous laisse le fichier source.

Un grand merci d'avance :)

Scoty
 

Pièces jointes

  • 00.Ouvrir fichier-feuille VBA.xlsm
    57.8 KB · Affichages: 14
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Même sur la planète Mégara, le capitaine Flamme tiquerait en lisant ce qui suit:
Code:
'Selection de la feuille en fonction de la cellule E3
Range("d4").Select
k = ActiveCell.Value
Sheets(k).Select
"Si C'est E3, c'est point D4", penserait-il en dedans de lui ;)
Et moi, sur cette bonne vieille Terre, je pense comme le capitaine Flamme. ;)

Et si j'étais moi, je me contenterai de:
VB:
Dim NomFeuille$
NomFeuille=Range("D4")
If Len(NomFeuille) Then Sheets(NomFeuille).Select

EDITION: Je vois que le post a été édité en douce ;)
Du coup, ma blague tombe à plat ;)

Quoique le capitaine Flamme voit tout! ;)
Je voudrais mettre un worksheet ici en fonction de la cellule c4 du premier fichier

Et il dirait que C4 n'est pas D4 ;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Alors,après avoir ouvert ton fichier
1) le capitaine Flamme n'est pas infaillible ;)
2) Je te propose de tester cette macro sur ton PC
VB:
Sub check1()
Dim wB_Dest As Workbook, Feuille$
Feuille = Sheets("MACRO").[C4].Text
With Sheets([ville].Text)
.Range(.[A2], .Cells(Rows.Count, "F").End(3)).Copy
End With
'Ouvre le fichier / la feuille correspondante
Set wB_Dest = Workbooks.Open(Filename:=Sheets("MACRO").Range("G8").Text)
wB_Dest.Sheets(Feuille).PasteSpecial Paste:=xlPasteValues
End Sub
NB: Pour qu'elle fonctionne (au moins au début), il faut au préalable nommer ville, la cellule D4
 

Scoty

XLDnaute Occasionnel
Bonjour Staple,

Hahaha oui en effet, j'ai corrigé en douce mes petites coquilles... je suis en plein test du coup je bouge tout le temps les cellules !!! et je ne remets pas forcement à jour le commentaire... faute à moi désolé !!!

En tout cas merci beaucoup. je vais tester de suite. Du coup je pense que tu as vu que c'est le début du code. In fine je souhaiterai faire cela pour tout mes tableaux de bords, faire des enregistrer sous, imprimer en pdf etc.... il faudra surement que je passe par une boucle mais je vais essayer tous seul comme un grand, je continue doucement ma macro :)

Une toute petite dernière question, n'y aurait il pas juste une écriture à apposer sous l'ouverture du tableau de bord de mon code ?
Ton code est évidemment top, juste que je ne le maîtrise pas encore pour le moment

En tous cas merci staple pour ton retour

Scoty
 

Scoty

XLDnaute Occasionnel
Staple,

en relisant ton retour Je pense que je me suis mal exprimé. En fait ce que je souhaite faire :

• ouvrir le fichier de tableau de bord correspondant à la ville souhaité (le tableau de bord du mois de juin, d'ou le 06)
• de ce fichier, ouvrir la feuille 07, qui a pour réference la cellule C4 de mon fichier source.

En fait dans ce fichier source, j'y mets les données comptables de chaque ville du mois considéré (Ici, j'ai les données du mois de juillet). Et je souhaiterai pour chaque tableau de bord par ville, coller ses données dans la feuille du mois donnée de la cellule C4.

J'espère ne pas trop avoir embrouillé :s ...
 

Staple1600

XLDnaute Barbatruc
Re

Ce que je veux savoir avant tout si c'est ma macro check1 fait la même chose que la tienne sur ton PC?
Si, oui je pourrai prendre mon goûter, le coeur léger, la méche au vent.
Si non, il va falloir que je reporte mon goûter, pour créer de quoi faire un test complet ;)

PS: Seul l'abus de bière peut m'embrouiller
(heureusement c'est l'heure du thé ;))
 

Scoty

XLDnaute Occasionnel
• Non malheureusement ton code proposé bug à la dernière ligne :"wB_Dest.Sheets(Feuille).PasteSpecial Paste:=xlPasteValues"

• Ma dernière question, serait de savoir quand j'ai ouvert le tableau de bord de la ville souhaité, avec le code suivant :
VB:
'Ouvre le fichier / la feuille correspondante
Workbooks.Open Filename:=Range("G8").Value

avoir peut être juste une fonction rapide qui reprend l'info de la cellule C4 (le mois M) du fichier source afin d'ouvrir le tableau de bord sur cette feuille, qui se nomme aussi 07.
 

Scoty

XLDnaute Occasionnel
Staple,

je te laisse en pièce jointe un exemple de tdb que j'ai crée, tu comprendra mieux du coup.

Globalement, les éléments de mon premier fichier (source) sont les données comptables du mois de juillet pour chaque ville. Il faudrait juste copier coller ces données dans le bon fichier et dans l'onglet 07 (info de la cellule c4 du fichier source).

Et concernant le goûter, 1000000000 excuses !!! le fait que tu passes déjà du temps dessus, je t'aurai bien inviter pour une petite bière après lol !
 

Pièces jointes

  • TdB Bollene 06.xlsx
    26.5 KB · Affichages: 8

Staple1600

XLDnaute Barbatruc
Re

Voila j'ai testé et modifié un chouia et chez moi cela fonctionne.
VB:
Sub check1_II()
Dim wB_Dest As Workbook, Feuille$
Feuille = Sheets("MACRO").[C4].Text
With Sheets([ville].Text)
.Range(.[A2], .Cells(Rows.Count, "F").End(3)).Copy
End With
'Ouvre le fichier / la feuille correspondante
Set wB_Dest = Workbooks.Open(Filename:=Sheets("MACRO").Range("G8").Text)
wB_Dest.Sheets(Feuille).[A2].PasteSpecial Paste:=xlPasteValues
wB_Dest.Close True
End Sub
Allez zou, m'en vais goûter ;)
 

Scoty

XLDnaute Occasionnel
Bonjour à tous, le fil, Staple,

Après quelques essais, j'ai enfin pu faire ma petite macro en compilant celle de Staple et ca marche :) Il s'agit de la check 2 pour les curieux. J'y ai même fait un enregistrer sous et tout ;).

En revanche, je n'arrive toujours pas à m'expliquer ce bout de code (surtout la dernière ligne) :

VB:
'Ouvre le fichier / la feuille correspondante
Set wB_Dest = Workbooks.Open(Filename:=Sheets("MACRO").Range("G8").Text)
wB_Dest.Sheets(feuille).[A2].PasteSpecial Paste:=xlPasteValues

Je comprends que cela ouvre la bonne feuille sur la cellule A2, mais j'ai l'impression que le cas est spécifique car il colle aussi mon tableau préalablement copié dans mon fichier source. Je souhaiterai juste ouvrir mon fichier de destination sur la bonne feuille (fonction des données de mon fichier source), et sélectionner la cellule A2. Pour que je puisse acoller dans la macro juste en dessous l'action de coller que j'ai pu faire via l'enregistreur de macro.

J'ai donc créer une petite macro "juste pour ouvrir" ce que je souhaite :

Code:
Sub juste_ouvrir_le_bon_fichier_et_la_bonne_feuille_sur_la_cellule_A2()

'Déclaration des variables
Dim wB_Dest As Workbook
Dim feuille As Worksheet

'Attribution de la valeur, soit le nom de la feuille du fichier de destination
Feuille = Sheets("MACRO").[C4].Text

'Sélection de la feuille "MACRO"
Sheets("MACRO").Select

'Ouvre le fichier / la feuille correspondante
Set wB_Dest = Workbooks.Open(Filename:=Sheets("MACRO").Range("G8").Text)
Set Feuille = Wbk.Worksheets(feuille).Range(A2).Select
'La ou le bat blesse .... les lignes du dessus ne fonctionnent pas :(...

End Sub

Mais.. Marche pas, j'ai tenté plein, mais plein de possibilité hier... je suis à sec d'idée !! Merci à tous d'un petit coup de pouce

En PJ je vous laisse comme exemple mon fichier source, ainsi qu'un fichier destination
 

Pièces jointes

  • 01.Ouvrir fichier-feuille VBA.xlsm
    49.6 KB · Affichages: 5
  • TdB Bollene 06.xlsx
    26.5 KB · Affichages: 4

Scoty

XLDnaute Occasionnel
Hello Staple,

Alors, dans le bout de code que tu m'as proposé pour ouvrir le bon fichier à la bonne feuille, je pense comprendre que :

• wB_Dest.Sheets(feuille).[A2]. => Permet d'ouvrir la bonne feuille à la bonne cellule (A2)
• PasteSpecial Paste:=xlPasteValues => Permet de coller ce qu'on a initialement copier dans le fichier source

En fait à la base, je souhaitais bien partitioner étape par étape la macro, dans l'idée de récupérer certains bout pour recréer d'autres macros par exemple ( bon c'est pas pour tout de suite ^^).

J'avais tenter d'écrire cela initialement (j'ai remis mon collage via l'enregistreur de macro car cela je "maîtrise" un peu) :

VB:
'Ouvre le fichier / la feuille correspondante
Set wB_Dest = Workbooks.Open(Filename:=Sheets("MACRO").Range("G8").Text)
wB_Dest.Sheets(feuille).[A2].

'Colle le tableau ds la feuille correspondante, code récupéré suite à l'enregistreur de macro...
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Mais malheureusement cela ne fonctionne pas. J'ai l'impression que je ne peux pas utiliser "wB_Dest.Sheets(feuille).[A2]." tout seul si je ne mets pas le pastspecial juste après

Du coup je ne comprends pas du coup pourquoi cela beugue :/.

Pour résumer, je cherche juste à avoir la macro qui me permet d'ouvrir un fichier de tableau de bord, sur une feuille souhaité via les infos de mon fichier source.

Désolé staple si je ne suis pas encore très clair :/ (me suis relu plusieurs fois pr essayer d'être simple ^^)
 

Discussions similaires

Statistiques des forums

Discussions
315 141
Messages
2 116 698
Membres
112 840
dernier inscrit
CSE VALENTIN