Transfert des données selon nom variable d'un classeur

roybaf

XLDnaute Occasionnel
Bonjour à tous,

Voilà tout est dans le titre, quelqu'un pourrait-il m'aider à construire une macro qui serait capable d'aller chercher des données dans un classeur nommée 2011 et de recopier les cellules dans un autre nommé 2012, et ainsi de suite 2013 récupère des données 2012...

Et autre difficulté, une macro enregistrer sous qui s'enregistre en prenant comme nom la cellule a1 ex a1 = caisse 2012 et s'enregistre dans le dossier ou se trouve le fichier.
J'ai crée une macro de ce type mais l'adresse de destination est fixe car je connais le dossier de destination, mais là le fichier va être transmit à divers personnes qui vont mettre le fichier source je ne sais ou...

Sub enregistrer()
If Range("b4") = "" Then
MsgBox "Saisir le mois en cours en B4"
Else
Dim Chemin
Chemin = "C:\Documents and Settings\ag76221\Mes documents\Mr XXX\caisses\"
Dim MonFichier
MonFichier = Chemin & Range("b4").Value
ActiveWorkbook.SaveAs Filename:=MonFichier, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
End If
End Sub


Merci par avance.
 
Dernière édition:

dudule

XLDnaute Nouveau
Re : Transfert des données selon nom variable d'un classeur

Bonjour Roybaf,

Pour votre demande :

Et autre difficulté, une macro enregistrer sous qui s'enregistre en prenant comme nom la cellule a1 ex a1 = caisse 2012 et s'enregistre dans le dossier ou se trouve le fichier.

Je vous propose ce code :

Code:
Sub enregistrer()

If Range("B4") = "" Then 'on teste si la cellule B4 est vide
MsgBox "Saisir le mois en cours en B4"
Exit Sub
End If

Dim nom_fichier As String 'on déclare le nom du fichier comme étant la cellule B4
nom_fichier = Range("B4")

'et on enregistre le classeur excel dans le même dossier
'avec le nom de la cellule B4
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs (ThisWorkbook.Path & "\" & nom_fichier & ".xlsm")
Application.DisplayAlerts = True

' ici Application.DisplayAlerts nous permet d'ecraser automatiquent un fichier avec le même nom

End Sub

Pour la première partie de votre message il faudrait que vous nous donniez plus d'informations (les classeurs sont ils tous dans le même dossier ? Quelles sont les feuilles et les cellules à recopier ?)...
Le mieux serait de mettre deux fichiers exemple : un classeur 2011 et un 2012 avec une version de ce à quoi vous voulez arriver pour le 2012.

A+ :)
 

roybaf

XLDnaute Occasionnel
Re : Transfert des données selon nom variable d'un classeur

Bonjour et merci de vous intéressez à mon cas,

Je vous transmet mon fichier , en voyant vous comprendrez.

Page menu, cliquer sur tableau de bord puis mot de passe "monet" ensuite en bas de la page il y a un tableau comparatif n-1et n je souhaite qu'il récupère les données de l'année n-1, donc qu'il soit en mesure de détecter qu'il est en 2011 par exemple et qu'il aille chercher et copier les données de 2010. Il seront dans le même dossier, c'est en rapport avec la première question..

Merci.
 

Pièces jointes

  • CA 201 ter ss ventilation 1.xlsm
    273.7 KB · Affichages: 58
Dernière édition:

dudule

XLDnaute Nouveau
Re : Transfert des données selon nom variable d'un classeur

Re-bonjour,

Ok pour la feuille "Tableau de bord" (selectionnée à la main et pas de demande de code).

Pour detecter l'année en cours pas de soucis (la cellule B2 est bien changeante en fonction de l'année ?).

Une fois les données récupérées, elles iront bien dans les cellules C39 à D50 ?
Et les données à récupérer sont bien dans les plages C10:N10 et C12:N12 du fichier N-1 ?
Concernant le nom des fichiers, comment fait ont pour différencier les années (par exemple dans votre fichier je ne vois rien qui fait référence à 2012...) ?

J'attends votre retour.
 

roybaf

XLDnaute Occasionnel
Re : Transfert des données selon nom variable d'un classeur

Re-bonjour,

Dans la feuille couverture la cellule E29 indique l'année en cour, je souhaiterai une macro qui enregistre le fichier en prenant e29 comme nom de fichier.

Je souhaite ensuite que la feuille tableau de bord aille récupérer les données de l'année précédente soit "tableau de bord""f41àh52" et me les copie de "c41 à e52" de la nouvelle année sachant que j'aurai par la suite 2013,2014,2015...donc les liens devrons être automatique lorsque je crée une nouvelle année. Je vous joint le fichier finalisé, je ne sait pas si je suis assez explicite..dsl

Merci.
 

Pièces jointes

  • caisse 2012.xlsm
    276.8 KB · Affichages: 47

dudule

XLDnaute Nouveau
Re : Transfert des données selon nom variable d'un classeur

Re,

Si j'ai bien compris :

Le premier fichier est le fichier de base que vous remplissez manuellement de façon quotidienne.
Arrivé au 31/12 vous voulez lancer la maccro d'enregistrement (avec comme nom la cellule D28 de la feuille couverture il n'y a rien en E29).

Puis vous voulez recréer le fichier "CA 201 ter ss ventilation 1.xlsm‎" pour une nouvelle année en copiant les cellules demandées dans la feuille "Tableau de bord" tout en effacant B9:B39 et I9:Q39 des feuilles Caisse ainsi que C7:H37 et C40:I42 des feuilles Ventil, en plus de ça il faut remplacer les références de l'année N par l'année N+1 (par exemple remplacer tous les 2012 par 2013).

Tout ça en cliquant sur un bouton dans l'onglet "Tableau de Bord" ?

Dites moi si c'est bien ça.
 

roybaf

XLDnaute Occasionnel
Re : Transfert des données selon nom variable d'un classeur

Oui quelque chose du genre, je vous ait envoyer le dernier fichier, sur la feuille "couverture" c'est bien E29 ou figure l'année.
De plus toutes les recettes devrons être effacées de toute les pages (soit 24 pages)

Mais l'enregistrement se fait tout au long de l'année donc une fois commencé à être rempli il devra s'enregistrer sous le nom de fichier de l'année en cour.

Dsl c'est un peu compliqué non?

Merci.
 

dudule

XLDnaute Nouveau
Re : Transfert des données selon nom variable d'un classeur

Re,

Dans l'onglet "Tableau de bord" ajoutez un bouton de commande (Menu développeur, Insérer, Contrôle ActiveX).

Appellez le "bouton_start" (Mode création, clique droit sur le bouton, propriétés, dans la fenêtre allez sur Name())

Clique droit sur l'onglet, visualiser le code, et copier/coller ça :

Code:
Public nom_fichier As String

Private Sub bouton_start_Click()

Application.ScreenUpdating = False

Call enregistrer
Call copie_efface
Call change_annee

Application.ScreenUpdating = True

End Sub

Sub enregistrer()

If Sheets("Couverture").Range("E29") = "" Then 'on teste si la cellule E29 est vide
    MsgBox "L'année n'est pas renseignée en E29 sur la feuille Couverture !"
    End
End If

'on déclare le nom du fichier comme étant la cellule E29
nom_fichier = Sheets("Couverture").Range("E29")

'et on enregistre le classeur excel dans le même dossier
'avec le nom de la cellule E29
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs (ThisWorkbook.Path & "\caisse_" & nom_fichier & ".xlsm")
Application.DisplayAlerts = True

' ici Application.DisplayAlerts nous permet d'ecraser automatiquement un fichier avec le même nom

End Sub

Sub copie_efface()
'on copy/colle les données de la feuille tableau de bord
Sheets("Tableau de bord").Range("F41:H52").Copy
Sheets("Tableau de bord").Range("C41").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Dim nbre As Byte
nbre = ThisWorkbook.Sheets.Count 'nombre d'onglet

For i = 1 To nbre 'pour tous les onglets
    'si c'est un onglet caisse
    If Sheets(i).Name Like "Mois_#_Caisse" Then
        Sheets(i).Range("B9:B39,I9:Q39") = "" 'alors on vide les cellules
    
    'si c'est un onglet ventil
    ElseIf Sheets(i).Name Like "Mois_#_ventil" Then
        Sheets(i).Range("C7:H37,C40:H42") = "" 'alors on vide les cellules
    
    Else
    
    End If
   
Next i

End Sub

Sub change_annee()

nom_fichier = nom_fichier + 1 'on définit la nouvelle année

'on change l'onglet couverture
Sheets("Couverture").Range("E29") = nom_fichier
Sheets("Couverture").Range("E31") = "01/01/" & nom_fichier

'on change l'onglet tableau de bord
Sheets("Tableau de bord").Range("F5") = "OBJECTIF DE CA TTC " & nom_fichier & ":"
Sheets("Tableau de bord").Range("C21") = "Objectif " & nom_fichier - 1 & "/" & nom_fichier & " TTC"

'on sauvegarde en N+1
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs (ThisWorkbook.Path & "\test_caisse_" & nom_fichier & ".xlsm")
Application.DisplayAlerts = True

End Sub

C'est pas de la haute couture mais ça fait le job.

Dites moi si ça vous va/si il y a des bugs.

A+
 

roybaf

XLDnaute Occasionnel
Re : Transfert des données selon nom variable d'un classeur

Re,

Dans l'onglet "Tableau de bord" ajoutez un bouton de commande (Menu développeur, Insérer, Contrôle ActiveX).

Appellez le "bouton_start" (Mode création, clique droit sur le bouton, propriétés, dans la fenêtre allez sur Name())

Clique droit sur l'onglet, visualiser le code, et copier/coller ça :

Code:
Public nom_fichier As String

Private Sub bouton_start_Click()

Application.ScreenUpdating = False

Call enregistrer
Call copie_efface
Call change_annee

Application.ScreenUpdating = True

End Sub

Sub enregistrer()

If Sheets("Couverture").Range("E29") = "" Then 'on teste si la cellule E29 est vide
    MsgBox "L'année n'est pas renseignée en E29 sur la feuille Couverture !"
    End
End If

'on déclare le nom du fichier comme étant la cellule E29
nom_fichier = Sheets("Couverture").Range("E29")

'et on enregistre le classeur excel dans le même dossier
'avec le nom de la cellule E29
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs (ThisWorkbook.Path & "\caisse_" & nom_fichier & ".xlsm")
Application.DisplayAlerts = True

' ici Application.DisplayAlerts nous permet d'ecraser automatiquement un fichier avec le même nom

End Sub

Sub copie_efface()
'on copy/colle les données de la feuille tableau de bord
Sheets("Tableau de bord").Range("F41:H52").Copy
Sheets("Tableau de bord").Range("C41").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Dim nbre As Byte
nbre = ThisWorkbook.Sheets.Count 'nombre d'onglet

For i = 1 To nbre 'pour tous les onglets
    'si c'est un onglet caisse
    If Sheets(i).Name Like "Mois_#_Caisse" Then
        Sheets(i).Range("B9:B39,I9:Q39") = "" 'alors on vide les cellules
    
    'si c'est un onglet ventil
    ElseIf Sheets(i).Name Like "Mois_#_ventil" Then
        Sheets(i).Range("C7:H37,C40:H42") = "" 'alors on vide les cellules
    
    Else
    
    End If
   
Next i

End Sub

Sub change_annee()

nom_fichier = nom_fichier + 1 'on définit la nouvelle année

'on change l'onglet couverture
Sheets("Couverture").Range("E29") = nom_fichier
Sheets("Couverture").Range("E31") = "01/01/" & nom_fichier

'on change l'onglet tableau de bord
Sheets("Tableau de bord").Range("F5") = "OBJECTIF DE CA TTC " & nom_fichier & ":"
Sheets("Tableau de bord").Range("C21") = "Objectif " & nom_fichier - 1 & "/" & nom_fichier & " TTC"

'on sauvegarde en N+1
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs (ThisWorkbook.Path & "\test_caisse_" & nom_fichier & ".xlsm")
Application.DisplayAlerts = True

End Sub

C'est pas de la haute couture mais ça fait le job.

Dites moi si ça vous va/si il y a des bugs.


A+
Merci beaucoup cela m'a bien fait avancer.
Jai un souci, j'ai un fichier caisse et un fichier test qui s'enregistre à chaque fois.
De plus les recettes des caisses des années précédente ne se supprime pas.

Merci.
 

roybaf

XLDnaute Occasionnel
Re : Transfert des données selon nom variable d'un classeur

Pour mon second fichier voilà ce que cela donne (voir fichier)

J'ai créer un formulaire et je souhaiterai le dupliquer 12 fois pour créer un menu en première page comme pour l'ancien fichier et ainsi chaque bouton fait appel à un formulaire du mois lui correspondant.

Quand je clics sur suivant dans mon formulaire, les précédentes données de textbox reste dans le formulaire.

Merci
 

Pièces jointes

  • Marge estimée suite à devis.xlsm
    55 KB · Affichages: 43
  • Marge estimée suite à devis.xlsm
    55 KB · Affichages: 38
  • Marge estimée suite à devis.xlsm
    55 KB · Affichages: 41

dudule

XLDnaute Nouveau
Re : Transfert des données selon nom variable d'un classeur

Re,

Le fichier caisse_année qui se crée est un enregistrement automatique du fichier que je vous ai envoyé.
Le fichier test_caisse_année+1 est le nouveau fichier de saisie qui se crée avec les recettes effacées, les années modifiées et les cellules copiées.

Exemple :

Le 31/12/12 tu lances la macro, un fichier caisse_2012 est créé.
Un fichier test_caisse_2013 est créé avec les recettes effacées, les 2012 remplacés par 2013 et les cellules de "Tableau de bord" copiées. Ce fichier sera utilisé pour toute l'année 2013.

Le 31/12/13 vous lancez la macro, un fichier caisse_2012 est créé.
Un fichier test_caisse_2014est créé avec les recettes effacées, les 2013 remplacés par 2014 et les cellules de "Tableau de bord" copiées. Ce fichier sera utilisé pour toute l'année 2014.

Etc...

Pour modifier les noms d'enregistrement c'est les lignes :

Code:
ActiveWorkbook.SaveAs (ThisWorkbook.Path & "\caisse_" & nom_fichier & ".xlsm")
de la Sub "enregistrer" (tu modifies le "caisse_" par ce que tu veux).

et

Code:
ActiveWorkbook.SaveAs (ThisWorkbook.Path & "\test_caisse_" & nom_fichier & ".xlsm")
de la Sub "change_annee" (tu modifies le "test_caisse_" par ce que tu veux).
 

dudule

XLDnaute Nouveau
Re : Transfert des données selon nom variable d'un classeur

Re,

Pour le deuxième fichier voir PJ.

J'ai ajouté une liste déroulant avec les mois de Janvier à Decembre.
Pas besoin de faire 12 userform vu que si on sélectionne le mois dans la liste ça fait le même boulot.
A toi de créer les 12 feuilles...

Je ne comprends pas l'utilité du bouton suivant alors que tu fais la même chose qu'avec le bouton valider :confused:.
 

Pièces jointes

  • Marge estimée suite à devis.xlsm
    54.7 KB · Affichages: 50
  • Marge estimée suite à devis.xlsm
    54.7 KB · Affichages: 52
  • Marge estimée suite à devis.xlsm
    54.7 KB · Affichages: 50

roybaf

XLDnaute Occasionnel
Re : Transfert des données selon nom variable d'un classeur

je te remercie beaucoup pour ton temps.
Tout est parfait juste qu'au niveau de l'effacement des données des feuilles sont appelés 'Mois_#_ Caisse' et d'autre Mois_#_Caisse il y a des ' parfois sur le nom des feuille et du coup la fonction effacer ne reconnait pas les 'Mois_#_ Caisse', comment faire pour l'intercaler en mettant (Mois_#_Caisse ou 'Mois_#_ Caisse')?

Je note résolu, et merci beaucoup encore une fois dudule.
 

dudule

XLDnaute Nouveau
Re : Transfert des données selon nom variable d'un classeur

Remplace :

Code:
For i = 1 To nbre 'pour tous les onglets
    'si c'est un onglet caisse
    If Sheets(i).Name Like "Mois_#_Caisse" Then
        Sheets(i).Range("B9:B39,I9:Q39") = "" 'alors on vide les cellules
    
    'si c'est un onglet ventil
    ElseIf Sheets(i).Name Like "Mois_#_ventil" Then
        Sheets(i).Range("C7:H37,C40:H42") = "" 'alors on vide les cellules
    
    Else
    
    End If
   
Next i

Par :

Code:
For i = 1 To nbre 'pour tous les onglets
    'si c'est un onglet caisse
    If Sheets(i).Name Like "Mois_#_Caisse" Or Sheets(i).Name Like "'Mois_#_Caisse'" Then
        Sheets(i).Range("B9:B39,I9:Q39") = "" 'alors on vide les cellules
    
    'si c'est un onglet ventil
    ElseIf Sheets(i).Name Like "Mois_#_ventil" Then
        Sheets(i).Range("C7:H37,C40:H42") = "" 'alors on vide les cellules
    
    End If
   
Next i

Pareil pour ventil si tu as ce cas là.

Bonne soirée.

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 925
Membres
101 841
dernier inscrit
ferid87