XL 2019 Message d'erreur si cellules vides

LeForain

XLDnaute Junior
Bonjour à tous,
Je vous joins le fichier.

C'est une sorte de check liste où, dans la colonne E, les cases deviennent vertes avec mention "OK" en cas de double clic sur la cellule.
Seulement, j'aimerais qu'avant d'enregistrer le fichier (macro du bas), un message d'erreur s'affiche avec mention "TOUTES LES CASES NE SONT PAS COCHEES", empêchant l'enregistrement.

Dans ce cas de figure du fichier, il faut que les cellules E9 à E47 soient remplies.
La difficulté (pour moi) est que j'aimerais que, peu importe le nombre de lignes, que j'intercalerai ou que je supprimerai, le message intervienne si toutes les colonnes ne sont pas vertes avec OK.

Pourriez-vous m'aider ?

Bien cordialement
 

Pièces jointes

  • Fichier.xlsm
    23.6 KB · Affichages: 8

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour LeForain,
Difficile de détecter la dernière ligne utile si elles sont vides.
Une astuce parmi d'autres : la cellule suivant la dernière cellule utile est blanche et non rose.
Et ça marche quelque soit le nombre de lignes. Mais il faut que toutes les lignes utiles aient leur cellules en "E" colorées. ( non blanches )
Alors peut être avec :
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim L%, PasFini: L = 9: PasFini = 0
    While Cells(L, "E").Interior.Color <> vbWhite
        If Cells(L, "E") <> "OK" Then PasFini = 1 ' PasFini=0 si tout est rempli, 1 s'il y a des manques.
        L = L + 1
    Wend
    If PasFini = 1 Then
        Cancel = True
        MsgBox " Certaines lignes ne sont pas renseignées avec OK."
        Exit Sub
    Else
        Cancel = False
        ActiveWorkbook.Save
    End If
End Sub
Test : Supprimez quelques ok et faites Enregistrer.
 

Pièces jointes

  • Fichier.xlsm
    23.3 KB · Affichages: 5

Jacky67

XLDnaute Barbatruc
Bonjour à tous,
Je vous joins le fichier.

C'est une sorte de check liste où, dans la colonne E, les cases deviennent vertes avec mention "OK" en cas de double clic sur la cellule.
Seulement, j'aimerais qu'avant d'enregistrer le fichier (macro du bas), un message d'erreur s'affiche avec mention "TOUTES LES CASES NE SONT PAS COCHEES", empêchant l'enregistrement.

Dans ce cas de figure du fichier, il faut que les cellules E9 à E47 soient remplies.
La difficulté (pour moi) est que j'aimerais que, peu importe le nombre de lignes, que j'intercalerai ou que je supprimerai, le message intervienne si toutes les colonnes ne sont pas vertes avec OK.

Pourriez-vous m'aider ?

Bien cordialement
Bonjour à tous
Le nombre de OK doit correspondre au nombre de saisie en colonne b avec cette ligne de code
VB:
Sub PassationPDF()
Dim Chemin As String, NomFichier As String
If Application.CountA([b9:b47]) > Application.CountA([e9:e47]) Then MsgBox "TOUTES LES CASES NE SONT PAS COCHEES", , "Saisie incomplète": Exit Sub
  NomFichier = "FDC_" & Range("B5").Value & "_" & Range("D5").Value & "_" & Range("E6").Value & ".pdf"
  '----
  '---
'suite des codes actuel
 

piga25

XLDnaute Barbatruc
Bonjour à tous,
une autre solution indiquant les cellules qui n'ont pas été renseignées
VB:
Sub PassationPDF()
Dim Chemin As String, NomFichier As String

Dim Cell As Range
Dim Resultat As String

For Each Cell In Range("E9:E47")
If Not Cell = "OK" Then
Resultat = Resultat & Cell.Address & Chr(10)
End If
Next Cell

If Resultat = "" Then
MsgBox "Toute la plage de cellule est renseignée"
Else
MsgBox Resultat, vbInformation, "CES CASES NE SONT PAS COCHEES . "
Exit Sub
End If


  NomFichier = "FDC_" & Range("B5").Value & "_" & Range("D5").Value & "_" & Range("E6").Value & ".pdf"

  With Application.FileDialog(msoFileDialogFolderPicker)
    If .Show = -1 Then    ' Clic sur Ok
     Chemin = .SelectedItems(1)
    Else
      ' Clic sur Annuler
     Exit Sub
    End If
  End With

  Sheets("FICHE").ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & "\" & NomFichier, _
                                          Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                                          IgnorePrintAreas:=False, OpenAfterPublish:=True

End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Leforain, Fanfan, Jackie, Piga,
Mais il faut être compatible avec cette demande :
j'aimerais que, peu importe le nombre de lignes, que j'intercalerai ou que je supprimerai, le message intervienne si toutes les colonnes ne sont pas vertes avec OK.
@LeForain,
Est ce que quand il doit y avoir une ligne ok, la cellule désignation correspondante est obligatoirement remplie ?
 

LeForain

XLDnaute Junior
Bonsoir à tous et merci beaucoup pour vos différentes solutions que je viens de tester.

En effet, @sylvanu ce qui pêche encore, c'est la possibilité de rajouter ou supprimer des lignes et que ça continue de fonctionner.

Chaque ligne qui doit être OK a sa cellule de désignation remplie à sa gauche.

Merci pour votre aide.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
si j'enlève un OK, l'enregistrement est permis quand même alors que des cases restent non cochées
Cela m'étonnes, sur mon PC ça marche.
Etes vous sur d'avoir activé les macros ?
Test4.gif

Est-ce qu'un code permettrait de faire en sorte que si une colonne E n'est pas complètement "verte + OK" et que la cellule à sa gauche comporte du texte, le message s'affiche ?
Bien sur, mais le problème est de détecter la dernière ligne à analyser.
Serait il possible de baptiser la cellule C49 avec un nom ? Par ex "Fin".
Dans ce cas cela serait facile à détecter.
 

LeForain

XLDnaute Junior
Cela m'étonnes, sur mon PC ça marche.
Etes vous sur d'avoir activé les macros ?
Regarde la pièce jointe 1192362

Bien sur, mais le problème est de détecter la dernière ligne à analyser.
Serait il possible de baptiser la cellule C49 avec un nom ? Par ex "Fin".
Dans ce cas cela serait facile à détecter.
Effectivement c'est bizarre sur le fichier que vous avez envoyé hier à 15h13 c'est comme si la macro ne foc tonnait pas alors que la "supprimer" par exemple fonctionne.

En effet, cela me va si on baptise la dernière ligne "fin"
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
En effet, cela me va si on baptise la dernière ligne "fin"
En PJ un essai.
La cellule C49 doit être nommée FIN.
Avec :
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim L%, PasFini: L = 9:  PasFini = 0
    For L = 9 To [FIN].Row - 1
        If (Cells(L, "A") <> "" Or Cells(L, "B") <> "") And Cells(L, "E") <> "OK" Then
            PasFini = 1: Exit For
        End If
    Next L
    If PasFini = 1 Then
        Cancel = True
        MsgBox " Certaines lignes ne sont pas renseignées avec OK."
        Exit Sub
    Else
        Cancel = False
        ActiveWorkbook.Save
    End If
End Sub
La suppression insertion ligne ne pose aucun souci.

J'en ai profité pour modifié Worksheet_BeforeDoubleClick de façon à ne être active que dans la zone utile ( de E9 à la cellule FIN )
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    DL = [FIN].Row
     If Not Intersect(Target, Range("E9:E" & DL-1)) Is Nothing Then
        Target.Interior.Color = vbGreen
        Target = "OK"
    End If
End Sub
 

Pièces jointes

  • Fichier V2.xlsm
    24.6 KB · Affichages: 2

LeForain

XLDnaute Junior
En PJ un essai.
La cellule C49 doit être nommée FIN.
Avec :
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim L%, PasFini: L = 9:  PasFini = 0
    For L = 9 To [FIN].Row - 1
        If (Cells(L, "A") <> "" Or Cells(L, "B") <> "") And Cells(L, "E") <> "OK" Then
            PasFini = 1: Exit For
        End If
    Next L
    If PasFini = 1 Then
        Cancel = True
        MsgBox " Certaines lignes ne sont pas renseignées avec OK."
        Exit Sub
    Else
        Cancel = False
        ActiveWorkbook.Save
    End If
End Sub
La suppression insertion ligne ne pose aucun souci.

J'en ai profité pour modifié Worksheet_BeforeDoubleClick de façon à ne être active que dans la zone utile ( de E9 à la cellule FIN )
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    DL = [FIN].Row
     If Not Intersect(Target, Range("E9:E" & DL-1)) Is Nothing Then
        Target.Interior.Color = vbGreen
        Target = "OK"
    End If
End Sub


Super initiative pour rendre les double clics actifs seulement au bon endroit ! Merci beaucoup !

Qu'en est-il chez vous si vous cliquez sur effacer tout, puis sur valider ?
Chez moi, même avec tout le tableau VIDE l'enregistrement est permis et aucun message ne s'affiche
 

Discussions similaires

Statistiques des forums

Discussions
312 210
Messages
2 086 277
Membres
103 170
dernier inscrit
HASSEN@45