Bonjours,
Contexte:
Je dois rédiger un classeur Excel comportant plusieurs onglet bien définis fonction d'options souhaitées.
Pour ce faire:
1/je pars d'un classeur avec tous les onglets possible suivant toutes les options possibles et imaginable (type un classeur physique avec autant de page que de feuille de calcul soit une 40aine de feuilles)
2/je fais des choix d'option (soit : choisir les pages dont j’ai besoin dans le nouveau classeur)
3/j'appuie sur un bouton (abra cadabra)
4/les onglets du classeur visés par les options souhaitées sont copiées dans un nouveau classeur qui est renommé, sauvegardé, et fermé (soit :je prends un classeur vide et je mets uniquement les feuilles dont j’ai besoin).
Problème :
Toutes ces feuilles sont des feuilles de calcul dont les données d’entrée sont centralisées sur une feuille « donnée ».
Lorsque j’ouvre le nouveau classeur, sur les onglets copiés, les liens vers les données d’entrée sont par exemple :
='[classeur source.xls]donnee'!B26
Au lieu de :
='donnee'!B26
Questions :
Comment pourrais-je résoudre mon problème ? J’ai peur que toute la façon dont j’ai pensé mon projet ne soit pas très adaptée à VBA, comment auriez-vous fait ?
Ci-dessous le premier jet de la macro avec le choix des langues (ANGLAIS/FRANÇAIS et oui chaque feuille sera en version anglaise ou française)
Private Sub CommandButton1_Click() ‘Le bouton est sur l’onglet ENTREE
Dim langue As String
langue = Range("D5") ‘cellule de l’onglet ENTREE
MsgBox langue
Dim nom_classseur As String
classseur_source = "classeur source.xls"
Dim nom_note As String
nom_note = Range("D2") ‘nom du nouveau classeur ‘cellule de l’onglet ENTREE
Dim adresse_note As String
adresse_note = Range("D3") ‘adresse du nouveau classeur ‘cellule de l’onglet ENTREE
Windows(classseur_source).Activate
Workbooks.Add
ActiveWorkbook.SaveAs Filename:=adresse_note & "\" & nom_note & ".xls"
If langue = "FRANCAIS" Then
Windows(classseur_source).Activate
Sheets("donnee").Copy After:=Workbooks(nom_note & ".xls").Sheets(1)
Windows(classseur_source).Activate
Sheets("TESTFR").Copy After:=Workbooks(nom_note & ".xls").Sheets(1)
ElseIf langue = "ANGLAIS" Then
Windows(classseur_source).Activate
Sheets("donnee").Copy After:=Workbooks(nom_note & ".xls").Sheets(1)
Windows(classseur_source).Activate
Sheets("TESTEN").Copy After:=Workbooks(nom_note & ".xls").Sheets(1)
Else
MsgBox "ERREUR, Spécifier une langue"
End If
ActiveWorkbook.Save
ActiveWindow.Close
Windows(classseur_source).Activate
Sheets("ENTREE").Select
End Sub
Contexte:
Je dois rédiger un classeur Excel comportant plusieurs onglet bien définis fonction d'options souhaitées.
Pour ce faire:
1/je pars d'un classeur avec tous les onglets possible suivant toutes les options possibles et imaginable (type un classeur physique avec autant de page que de feuille de calcul soit une 40aine de feuilles)
2/je fais des choix d'option (soit : choisir les pages dont j’ai besoin dans le nouveau classeur)
3/j'appuie sur un bouton (abra cadabra)
4/les onglets du classeur visés par les options souhaitées sont copiées dans un nouveau classeur qui est renommé, sauvegardé, et fermé (soit :je prends un classeur vide et je mets uniquement les feuilles dont j’ai besoin).
Problème :
Toutes ces feuilles sont des feuilles de calcul dont les données d’entrée sont centralisées sur une feuille « donnée ».
Lorsque j’ouvre le nouveau classeur, sur les onglets copiés, les liens vers les données d’entrée sont par exemple :
='[classeur source.xls]donnee'!B26
Au lieu de :
='donnee'!B26
Questions :
Comment pourrais-je résoudre mon problème ? J’ai peur que toute la façon dont j’ai pensé mon projet ne soit pas très adaptée à VBA, comment auriez-vous fait ?
Ci-dessous le premier jet de la macro avec le choix des langues (ANGLAIS/FRANÇAIS et oui chaque feuille sera en version anglaise ou française)
Private Sub CommandButton1_Click() ‘Le bouton est sur l’onglet ENTREE
Dim langue As String
langue = Range("D5") ‘cellule de l’onglet ENTREE
MsgBox langue
Dim nom_classseur As String
classseur_source = "classeur source.xls"
Dim nom_note As String
nom_note = Range("D2") ‘nom du nouveau classeur ‘cellule de l’onglet ENTREE
Dim adresse_note As String
adresse_note = Range("D3") ‘adresse du nouveau classeur ‘cellule de l’onglet ENTREE
Windows(classseur_source).Activate
Workbooks.Add
ActiveWorkbook.SaveAs Filename:=adresse_note & "\" & nom_note & ".xls"
If langue = "FRANCAIS" Then
Windows(classseur_source).Activate
Sheets("donnee").Copy After:=Workbooks(nom_note & ".xls").Sheets(1)
Windows(classseur_source).Activate
Sheets("TESTFR").Copy After:=Workbooks(nom_note & ".xls").Sheets(1)
ElseIf langue = "ANGLAIS" Then
Windows(classseur_source).Activate
Sheets("donnee").Copy After:=Workbooks(nom_note & ".xls").Sheets(1)
Windows(classseur_source).Activate
Sheets("TESTEN").Copy After:=Workbooks(nom_note & ".xls").Sheets(1)
Else
MsgBox "ERREUR, Spécifier une langue"
End If
ActiveWorkbook.Save
ActiveWindow.Close
Windows(classseur_source).Activate
Sheets("ENTREE").Select
End Sub