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 Sub

Est-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 Sub

ECG

7test-onglet.xlsm (16.29 Ko)

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 Sub

ECG

Merci pour votre aide, je viens de tester le code et ça marche à merveille.

Rechercher des sujets similaires à "msgbox"