Message à la fermeture du fichier

Bonjour le forum,

J’ai besoin d’un coup de main pour finaliser ma macro « Private Sub Workbook_BeforeClose(Cancel As Boolean) » que j’ai commencée mais que je n’arrive pas à finaliser.

Je voudrais qu’à la fermeture de mon fichier une boite de dialogue me prévienne si dans la colonne « G » en me donnant les n° de lignes et code session des cellules où il n’est pas inscrit "OUI "en me posant la question est-ce que je veux faire une modification. A ce message si je réponds OUI alors il me redonne la « main » pour que j’effectue les modifications sinon il ferme le fichier.

Par exemple : si je devais fermer le fichier joins, j’aurai un message me disant que les lignes 5 et 7 correspondant aux codes sessions BA31 et UU44 ne sont pas envoyés. Est-ce que je veux les modifier. Si oui j’ai la main pour inscrire « OUI » à la place de « NON » dans le cas contraire il ferme le fichier.

Merci par avance pour une proposition.

Bonjour,

Tu peux essayer ça : (c'est simpliste mais ça fonctionne) à placer dans "thisworkbook"

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim cell As Range

    For Each cell In Range("G3:G" & Range("A1").CurrentRegion.Rows.Count)
        If cell.Value <> "OUI" Then
            If MsgBox("Il y a des lignes non-envoyées. Voulez-vous les envoyer ?", vbYesNo) = vbYes Then
                Cancel = True '<annule la demande de fermeture du classeur
                cell.EntireRow.Select '<pour mettre en évidence la ligne à compléter
                Exit Sub
            Else
                Exit For '<pour ne pas boucler sur chaque valeur différente de "OUI"
            End If
        End If
    Next

End Sub

Merci salmanasard.

Ta macro marche bien mais il faut impérativement qu'il n'est rien d'écrit au-dessus de mon tableau ce qui n'est pas le cas dans mon fichier réel. Il faudrait que le test commence à partir de la ligne 7 qui correspond à la 1ère ligne de données de mon tableau. J'ai essayé de modifier ta macro en conséquence mais sans résultat. A chaque fois elle m'indique la ligne au-dessus de mon tableau où il n'y a pas inscrit "OUI" dans la colonne G.

Je t'ai remis un nouveau fichier avec des info au-dessus du tableau pour que tu constate ou comprenne mon explication.

Cordiale

ment.

a capella parce que je réponds depuis mon ipad et donc, sans excel :

tu remplaces la cible “G3” par “G7”

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim cell As Range

    For Each cell In Range("G7:G" & Range("A1").CurrentRegion.Rows.Count)
        If cell.Value <> "OUI" Then
            If MsgBox("Il y a des lignes non-envoyées. Voulez-vous les envoyer ?", vbYesNo) = vbYes Then
                Cancel = True '<annule la demande de fermeture du classeur
                cell.EntireRow.Select '<pour mettre en évidence la ligne à compléter
                Exit Sub
            Else
                Exit For '<pour ne pas boucler sur chaque valeur différente de "OUI"
            End If
        End If
    Next

End Sub

ca te va ?

sinon, je jetterai un œil dessus demain ;)

Merci d'avoir pris le temps de répondre mais cette solution de modifier le G3 en G7 je l'avais essayé et ça n'avez pas résolue le problème . D'ailleurs si tu essayes de le faire dans le dernier fichier joins tu verras que le résultat obtenue n'est pas celui qu'on voudrait avoir.

Cordialement.

Bonjour à tous,

Étant donné que tu as un tableau structuré ...

Un essai ...

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Cell As Range

    For Each Cell In Range("Tableau2021[Envoyée]")
        If Cell.Value <> "OUI" Then
            If MsgBox("Il y a des lignes non-envoyées. Voulez-vous les envoyer ?", vbYesNo) = vbYes Then
                Cancel = True '<annule la demande de fermeture du classeur
                Cell.EntireRow.Select '<pour mettre en évidence la ligne à compléter
                Exit Sub
            Else
                Exit For '<pour ne pas boucler sur chaque valeur différente de "OUI"
            End If
        End If
    Next
End Sub

ric

Bonjour à tous,

Une version qui ne va sélectionner que la ligne du tableau ...

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Cell As Range

    For Each Cell In Range("Tableau2021[Envoyée]")
        If Cell.Value <> "OUI" Then

            If MsgBox("Il y a des lignes non-envoyées. Voulez-vous les envoyer ?", vbYesNo) = vbYes Then
                Cancel = True '<annule la demande de fermeture du classeur
                Worksheets("2020").ListObjects("Tableau2021").DataBodyRange.Rows(Cell.Row - 8).Select
                Exit Sub
            Else
                Exit For '<pour ne pas boucler sur chaque valeur différente de "OUI"
            End If
        End If
    Next
End Sub

ric

Impec. Merci à vous deux pour le temps passé. Juste un complément à ma demande :

- Pour 2021 je vais créer un nouveau onglet et donc il y aura un nouveau tableau. Comment je peux faire sans devoir modifier directement dans la macro le nom du nouveau tableau pour que la macro s'applique. En clair comment faire fonctionner la macro sur l'onglet actif et non pas sur le nom du tableau.

La macro me donnant le résultat attendu je ferme le sujet et merci encore.

Cordialement.

Bonjour à tous,

Désolé, je ne sais pas comment faire cela ...

ric

Bonjour à tous,

Après quelques recherches > il est possible que ceci fonctionne ...

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim X As Integer
    For X = 1 To ActiveSheet.ListObjects(1).DataBodyRange.Rows.Count
        If ActiveSheet.ListObjects(1).DataBodyRange.Columns(7).Cells(X, 1) <> "OUI" Then
            If MsgBox("Il y a des lignes non-envoyées. Voulez-vous les envoyer ?", vbYesNo) = vbYes Then
                Cancel = True '<annule la demande de fermeture du classeur
                ActiveSheet.ListObjects(1).DataBodyRange.Rows(ActiveSheet.ListObjects(1).DataBodyRange.Columns(7).Cells(X, 1).Row - 8).Select
                Exit Sub
            Else
                Exit For '<pour ne pas boucler sur chaque valeur différente de "OUI"
            End If
        End If
    Next X
End Sub

ric

Merci RIC pour tes recherches. La macro à l'air de fonctionner.

Rechercher des sujets similaires à "message fermeture fichier"