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: 13
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Tu auras remarqué si tu relis le fil, et notamment le message#11, que mes déclarations de variables étaient
Dim wB_Dest As Workbook, Feuille$
ou plus classiquement Dim Feuille As String
Or toi tu as déclaré Feuille As Worksheet
et tu utilises une variable Wbk non déclarée
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.
PS: C'est ce que faisait ma dernière macro, non ? (avec la copie/valeurs seules en plus)
 

Scoty

XLDnaute Occasionnel
• OK ok d'accord, je ne savais pas que d'écrire ",Feuille$" correspondait à la déclaration "Dim Feuille As String ".

• Feuille as worksheet, j'ai trouvé cela dans mes recherches, mais justement je n'arrive pas à l'appliquer à mon cas.

PS: C'est ce que faisait ma dernière macro, non ? (avec la copie/valeurs seules en plus)
Absolument oui, ta macro (check2 ac ma petite touche de newbie) fonctionne parfaitement, elle fait parfaitement le job. J'aurai juste souhaité qu'elle n'effectue pas le collage valeurs en plus, juste qu'elle m'amène à la cellule A2 de mon fichier tableau de bord.

Ces juniors qui se lancent dans des macros... mais ou on va lol !
 

Staple1600

XLDnaute Barbatruc
Re

A tester (j'ai la flemme;))
VB:
Sub check1_III()
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).Activate
Range("A2").Select
End Sub
 

Scoty

XLDnaute Occasionnel
Ca fonctIOOOOONNNE :) :) :)

C'est super cool merci staple, Au top le coup de main ^^ Enfin la première pierre de posé, avec bien la déclinaison des taches pour que je m'y retrouve comme je souhaitais. :) Etape 2 maintenant c'est de faire une boucle pour ma 30taine de Tdb, de mettre des alertes en cas si les fichiers / dossiers n'existent pas ou je me plante dans les mois etc.... On m'a aussi conseillé d'éviter la liste déroulante dans mon fichier source et de faire du ligne à ligne pour la suite avec l'incrémentation de la variable pr la boucle. Allé Voici la petite bête accouché :

VB:
Sub check4_ac_saveas()

'Déclaration des variables
Dim NomFeuille
Dim wB_Dest As Workbook, Feuille
Dim Chemin As String, Fichier As String

'Attribution de valeurs aux variables
Feuille = Sheets("MACRO").[C4].Text
Chemin = Sheets("MACRO").[G11].Text
Fichier = Sheets("MACRO").[G10].Text

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

'Selection de la feuille en fonction de la cellule E3
NomFeuille = Range("D4")
If Len(NomFeuille) Then Sheets(NomFeuille).Select

'Copie le tableau de la feuille sélectionnée préalablement
Range("A2:F2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy

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

'Colle le tableau ds la feuille correspondante
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

'Effectuer un enregistrer sous... en fonction du nom / adresse du fichier source
ActiveWorkbook.SaveCopyAs Chemin & Fichier

'fermer le fichier actif du mois m-1 sans le sauvegarder
ActiveWorkbook.Close SaveChanges:=False

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

'Message box
MsgBox "Ayé 1er tdb mis a jour, reste à faire la boucle pr les autres ^^"

End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Un petit conseil en passant (que tu liras donné par d'autres ici dans d'autres discussions)
En VBA, il est souvent inutile d'utiliser les Select et autre Activate
En premier lieu parce que, cela ralentit l’exécution du code
(c'est pour cela qu'il n'y en avait pas dans ma macro check1_II ;))

PS: Il y a un petit souci dans tes déclarations, on devrait lire:
Dim NomFeuille As String Dim wB_Dest As Workbook, Feuille As String Dim Chemin As String, Fichier As String
 

Scoty

XLDnaute Occasionnel
• Complètement Staple, j'ai lu plusieurs fois que .select, . activate ralentit la macro, je suis tombé sur des tutos qui permettent d'éviter cela je vais y jeter un oeil. Disons que pour le moment, vu ma "maîtrise légendaire" de la chose, en plus de rajouter des morceaux de codes vu ici et là, je mets aussi un peu d'enregistreur de macro... je reste conscient que pour les barbatruc, elle reste très scolaire ^^. A la base je voulais chaque étape pour comprendre l'action, un peu comme un logigramme.

• Du coup pour les variables, c'est vrai que j'avais un petit doute effectivement à la lecture de ta première réponse avec le "$" après feuille. Je l'avais supprimé pour voir et sans remettre as string.... cela a quand même marché... Bon du coup je comptais regarder cela après. Au final, j'ai tout remis propre comme tu viens de me montrer (mais j'ai pas pu m'en empêcher, j'ai remis ma pâte très scolaire^^) :

VB:
Déclaration des variables
Dim NomFeuille As String
Dim wB_Dest As Workbook
Dim Feuille As String
Dim Chemin As String
Dim Fichier As String
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 837
dernier inscrit
Ugo