MsgBox
Bonjour à tous,
je travaille actuellement sur un fichier excel dans lequel j'ai plusieurs feuilles avec du code VBA, voici mon problème:
Private Sub Workbook_Open()
MsgBox ("Attention!" & Chr(13) & Chr(13) & "le barème appliqué pour ces contrats est X" & Chr(13) & Chr(13) & "Vous êtes sur le ...:" & Chr(13) & Chr(13) & Sheets("feuille 1").Range("A1").Value)
MsgBox ("Attention!" & Chr(13) & Chr(13) & "le barème appliqué pour ces contrats est Y" & Chr(13) & Chr(13) & "Vous êtes sur le ...:" & Chr(13) & Chr(13) & Sheets("feuille 2").Range("A1").Value)
End SubEst-ce qu'il est possible qu'à chaque ouverture du fichier excel, de n’exécuter que la partie du code qui concerne la dernière feuille affichée après avoir quitté le fichier, car la fonction Private Sub Workbook_Open() execute la totalité de mon code? chose que je ne souhaite pas.
Merci de votre précieuse aide et bonne à tous.
Quand tu dit la totalité de ton code c'est ces deux lignes de MsgBox ?
A quel moment tu veux afficher la deuxième partie de ton code ? soit si j'ai bien compris le deuxième MsgBox ?
Soit un peu plus clair :3 !
Bonjour,
ça peut-être plus que ces deux lignes, c'es en cours de conception.
Je m'explique:
Je travaille sur la feuille 1, je sauvegarde et je quitte Excel, si j'ouvre le fichier, le message qui s'affiche à l'ouverture concernera seulement la feuille 1 et pas plus.
Je travaille sur la feuille 2, je sauvegarde et je quitte Excel, si j'ouvre le fichier, le message qui s'affiche à l'ouverture concernera seulement la feuille 2 et pas plus.
Dites-moi si c'est claire ou vous avez besoin de plus d'explication.
Merci de votre retour.
Salut tout le monde,
Si tu veux avoir cette infos à l'ouverture d'excel tu peux sauvegarder sur une feuille excel (veryhidden ou pas à toi de voir) :
- quand on ferme le classeur, si l'activesheet est la 1 alors par exemple sur une feuille "DATA" en cellule A1 tu mets le nom de ta feuille
- quand on ouvre les classeur selon la valeur de la cellule A1 de ta feuille "DATA" tu fais des actions, montre des messages
Après à moindre mesure, si tu vas sur le deuxième onglet, tu bosses, tu sauvergardes et tu quittes, excel va se réouvrir sur le deuxième onglet. Tu as juste à faire à l'ouverture un choix selon la feuille active.
Le soucis c'est que si l'utilisateur ouvre et c'est l'onglet 1, change sur onglet2 mais ne sauvegarde pas et ferme excel... celui-ci va se réouvrir sur l'onglet 1 (qui est celui du dernier fichier save)
Après sinon tu peux forcer la sauvegarde du classeur lors de la fermeture, que l'utilisateur le veuille ou pas comme ça si celui ci à juste changé d'onglet, cela le prendra en compte... si les macros sont activé bien sur ^^
A toi de voir ce qui t'intéresse dans ton cas.
ECG
Salut tout le monde,
Si tu veux avoir cette infos à l'ouverture d'excel tu peux sauvegarder sur une feuille excel (veryhidden ou pas à toi de voir) :
- quand on ferme le classeur, si l'activesheet est la 1 alors par exemple sur une feuille "DATA" en cellule A1 tu mets le nom de ta feuille
- quand on ouvre les classeur selon la valeur de la cellule A1 de ta feuille "DATA" tu fais des actions, montre des messages
Après à moindre mesure, si tu vas sur le deuxième onglet, tu bosses, tu sauvergardes et tu quittes, excel va se réouvrir sur le deuxième onglet. Tu as juste à faire à l'ouverture un choix selon la feuille active.
Le soucis c'est que si l'utilisateur ouvre et c'est l'onglet 1, change sur onglet2 mais ne sauvegarde pas et ferme excel... celui-ci va se réouvrir sur l'onglet 1 (qui est celui du dernier fichier save)
Après sinon tu peux forcer la sauvegarde du classeur lors de la fermeture, que l'utilisateur le veuille ou pas comme ça si celui ci à juste changé d'onglet, cela le prendra en compte... si les macros sont activé bien sur ^^
A toi de voir ce qui t'intéresse dans ton cas.
ECG
Merci de votre retour, je ne fais que débuter dans ce langage, ce que vous m'expliquer m'est totalement flou, si vous avez un exemple en code à me donner, je serai preneur.
merci de votre retour.
Salut,
Ci-joint un exemple avec 3 petites macros :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'quand le classeur est fermé on garde en mémoire le nom de la feuille qui est affichée (feuille active)
Sheets("DATA").Cells(1, 1).Value = ActiveSheet.Name
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'quand le classeur est sauvegardé on garde en mémoire le nom de la feuille qui est affichée (feuille active)
Sheets("DATA").Cells(1, 1).Value = ActiveSheet.Name
End Sub
Private Sub Workbook_Open()
'on boucle sur toute les feuilles du classeur, si l'on trouve le nom de la feuille on va dessus
'ce check permet surtout que si la case A1 de DATA est vide ou que la feuille a été supprimé entre deux par n'importe quel moyen de ne pas avoir d'erreur
'(on ne pourras pas aller sur une feuille vide ou sur une feuille qui n'existe plus)
For Each ONGLET In ThisWorkbook.Worksheets
If ONGLET.Name = Sheets("DATA").Cells(1, 1).Value Then
Sheets(Sheets("DATA").Cells(1, 1).Value).Select
Exit For
End If
Next
End SubECG
Merci de votre aide, j'essayais cela le lundi et vous tiens au courant.
Bon week end.
Salut,
Ci-joint un exemple avec 3 petites macros :
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'quand le classeur est fermé on garde en mémoire le nom de la feuille qui est affichée (feuille active) Sheets("DATA").Cells(1, 1).Value = ActiveSheet.Name End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 'quand le classeur est sauvegardé on garde en mémoire le nom de la feuille qui est affichée (feuille active) Sheets("DATA").Cells(1, 1).Value = ActiveSheet.Name End Sub Private Sub Workbook_Open() 'on boucle sur toute les feuilles du classeur, si l'on trouve le nom de la feuille on va dessus 'ce check permet surtout que si la case A1 de DATA est vide ou que la feuille a été supprimé entre deux par n'importe quel moyen de ne pas avoir d'erreur '(on ne pourras pas aller sur une feuille vide ou sur une feuille qui n'existe plus) For Each ONGLET In ThisWorkbook.Worksheets If ONGLET.Name = Sheets("DATA").Cells(1, 1).Value Then Sheets(Sheets("DATA").Cells(1, 1).Value).Select Exit For End If Next End SubECG
Merci pour votre aide, je viens de tester le code et ça marche à merveille.