Je souhaite créer un fichier caisse avec archivage des tickets jour par jour.
Je pars de mon onglet "Mois" pour créer une feuille jour par jour soit pour mars 31 feuilles.
Dans l'onglet "Caisse", en cellule A1, j'ai la date du jour. Je souhaiterai avoir en C1 un lien hypertexte qui m'ouvre la feuille du jour concerné pour copier les tickets après impression.
Avez vous une idée ?? je n'arrive pas à créer ce lien.
Dans l'exemple joint j'ai laissé les 3 dernières feuilles des trois derniers jours du mois. A la date d'aujourd'hui, ce lien devrait m'emmener dans la feuille 40632 en cellule A1.
Peut-être une macro évènementielle du genre workbook_open qui ferait en sorte que dès que tu ouvres ton fichier, un lien hypertexte soit créé vers l'onglet en question. Ca me semble le plus simple. Par contre ça signifie que tu vas te retrouver avec près de 200 feuilles à la fin de l'année ? Ca risque d'être lourd à gérer je pense.
Ben sous la forme suivante :
dans le module this workbook tu vas dans workbook_open et tu créé ton lien. Je regarde dès que j'ai 5 minutes, peut-êetre ce midi sinon ce soir si tout va bien.
Bonjour tout le monde. Je pense qu'il s'agit d'un problème lorsque je convertis la dare du jour en simple texte pour ensuite faire la recherche des onglets mais je ne sais pas pourquoi. J'espère que d'autres saueont car ça dépasse mes compétences.
Il me semble que vous voulez un lien hypertexte en C1.
J'utiliserai plutôt l'évènement Calculate de la feuille Caisse :
Code:
Private Sub Worksheet_Calculate()
Application.EnableEvents = False 'désactive les évènements
With Me.[C1]
.Formula = "=TODAY()"
.NumberFormat = "0"
.Hyperlinks.Add .Cells, "", .Value & "!A1"
End With
Application.EnableEvents = True
End Sub
On remarquera qu'il est impossible d'effacer C1 (car cela déclenche la macro).
Sauf évidemment si l'on désactive les macros (par exemple pour tester).
De plus, si le classeur est toujours ouvert, le lien hypertexte se met à jour à minuit *
Fichier joint.
* Edit : le lien ne se met pas à jour tout seul, il faut appuyer sur la touche F9...
Merci pour vos réponses à tous les deux mais cela ne répond pas exactement à ma demande.
Peut être que le lien hypertexte n'est pas la bonne solution. Ce que je souhaite c'est pouvoir atteindre la feuille du jour concerné pour copier les tickets du jour.
Avec votre aide je suis arrivé à contruire cette macro qui créée l'hyperlien en feuille caisse et créée la feuille pour la journée.
Private Sub Workbook_Open()
Sheets("Caisse").Activate
Range("C1").Delete
Application.EnableEvents = False 'désactive les évènements
With [C1]
.Formula = "=TODAY()"
.NumberFormat = "0"
.Hyperlinks.Add .Cells, "", .Value & "!A1"
End With
Application.EnableEvents = True
Sheets("Jour").Select
Sheets("Jour").Copy After:=Sheets(3)
Sheets(4).Name = ThisWorkbook.Sheets("Caisse").[C1].Value
Sheets("Caisse").Activate
Range("B2").Select
End Sub
Par contre si l'utilisateur ferme le dossier sur la même journée et le ré ouvre, cela plante car une seconde feuille portant le même nom veut se créer.
Comment puis je faire pour vérifer que la feuille n'existe pas et si elle existe annuler sa création ??
En fait quand on regarde, tu ajoutes une date dans ta cellule C1 que tu convertit en nombre puis tu copies ta feuille mère pour la dupliquer. C'est bien ça ? Je pense que tu devrais insérer un test en début de macro pour voir si ta feuille existe déjà du genre
dim nom as string
nom = sheets(caisse).range("c1")
for 1 = 1 to sheets.count
if sheets(i).name = nom then exit sub
next i
à placer juste avant le Application.EnableEvents = True. Pas testé mais ça devrait fonctionner.
Merci pour ton retour, j'ai appliqué ta proposition ce qui donne une fois corrigé ceci:
Private Sub Workbook_Open()
Sheets("Caisse").Activate
Range("C1").Delete
Application.EnableEvents = False 'désactive les évènements
With [C1]
.Formula = "=TODAY()"
.NumberFormat = "0"
.Hyperlinks.Add .Cells, "", .Value & "!A1"
End With
Dim nom As String
nom = Sheets("caisse").[C1].Value
For i = 1 To Sheets.Count
If Sheets(i).Name = nom Then Exit Sub
Next i
Application.EnableEvents = True
Sheets("Jour").Select
Sheets("Jour").Copy After:=Sheets(3)
Sheets(4).Name = ThisWorkbook.Sheets("Caisse").[C1].Value
Sheets("Caisse").Activate
Range("B2").Select