Creer un message d'erreur si données non complétées

Je reviens encore vers vous pour améliorer encore et toujours mon fichier.

Est-il possible (je suppose que oui, puisque rien n'est impossible pour vous les rois du VBA) de verrouiller (activer le lock) automatiquement des cellules qui sont remplies par des données lors de la fermeture du fichier.

voici le fichier :

https://www.excel-pratique.com/~files/doc/HBMx2Message_d_erreur3.xls

Donc si on encode des données sur la ligne 14 par exemple, lors de la fermeture du fichier, ces cellules seraient verrouillées automatiquement de manière qu'à la prochaine ouverture du fichier, on ne puisse plus les supprimer.

Encore et toujours grand merci.

Bonne journée.

Pasqi

Bonsoir,

difficile sans fichier, envoie to fichier, tu auras plus de chance d'avoir une reponse.

Cordialement

Voici l'adresse du fichier.

Merci d'avance.

https://www.excel-pratique.com/~files/doc/Message_d_erreur.xlsx

Bonjour

je n'arrive pas a ouvrir ton fichier je n'ai qu'un fichier xml

Cordialement

Voici une nouvelle adresse pour le fichier, en espérant que celle-ci fonctionnera.

Merci d'avance.

https://www.excel-pratique.com/~files/doc/Message_d_erreur.xls

Bonsoir à tous,

Sub Sauvegarde()
''Macros par Claude Dubois pour "Pasqi" Excel-Pratique le 20 Fév.09
Dim DerLig As Long
Dim i As Long
    DerLig = Cells.Find("*", , , , xlByRows, xlPrevious).Row

    For i = 3 To DerLig
        If Range("h" & i) = "" Then
            MsgBox ("La fiche de " & Range("c" & i) & " n'est pas complète")
            Exit Sub
        End If
    Next i
            ActiveWorkbook.Save 'sauvegarde le fichier
End Sub

Fichier :

https://www.excel-pratique.com/~files/doc/Message_d_erreur2.xls

Amicalement

Claude.

Bonjour Claude,

Grand merci pour le code, il est ... presque parfait .

Serait-il possible de ne pas mettre le bouton "sauvegarde", mais que le message d'erreur apparaisse quand on utilise le bouton classique d'excel "enrégistrer" ou que lorsqu'on quitte le programme, au moment où excel demande "voulez-vous enrégistrer les modifications" il envoie le message d'erreur si ce n'est pas complet ?

Merci à toi et bon w-e.

Bonjour à tous,

J'ai essayé de brancher la macro via le ThisWorkbook (close), mais je n'arrive pas à

contrôler la fermeture !

En faisant fichier fermer, il se ferme même si incomplet.

Je lance un appel ici aux spécialistes !

Bonne journée

Claude.

re,

Grâce à notre ami maguetlolo, l'affaire est résolue,

regarde sa réponse et supprime ma macro "Sauvegarde"

tout est dans le ThisWorkbook.

https://www.excel-pratique.com/forum/viewtopic.php?t=10024

à+.......Claude.

Bonjour Claude et Maguetlolo,

Grand merci pour vos efforts, on y est ... presque .

Le principe demandé est très bien, on ne peut pas quitter le fichier si la donnée n'est pas remplie.

Le problème, est (imaginons que la personne ne connaisse pas la donnée à remplir et donc, qu'elle préfère effacer tout) si on supprime les données d'une ligne, qui n'est pas la dernière, on ne peut toujours pas quitter le fichier, il dit que la fiche de " " n'est pas complète.

Le fichier à remplir peut se faire à tout niveau et pas ligne par ligne, donc, si c'est faisable, grand merci.

Bonne journée

Bonjour Claude et Maguetlolo,

Grand merci pour vos efforts, on y est ... presque .

Le principe demandé est très bien, on ne peut pas quitter le fichier si la donnée n'est pas remplie.

Le problème, est (imaginons que la personne ne connaisse pas la donnée à remplir et donc, qu'elle préfère effacer tout) si on supprime les données d'une ligne, qui n'est pas la dernière, on ne peut toujours pas quitter le fichier, il dit que la fiche de " " n'est pas complète.

Le fichier à remplir peut se faire à tout niveau et pas ligne par ligne, donc, si c'est faisable, grand merci.

Bonne journée

Bonjour à tous,

Essaye avec ce code

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim DerLig As Long
Dim i As Long
Dim Rep As Integer
    DerLig = Cells.Find("*", , , , xlByRows, xlPrevious).Row

    For i = 3 To DerLig
        If Range("h" & i) = "" Then
            MsgBox ("La fiche de " & Range("c" & i) & " n'est pas complète")

            Rep = MsgBox("On supprime cette ligne ?", vbYesNo + vbCritical + vbDefaultButton2, "Fermeture")
            If Rep = vbYes Then
                Range(Range("b" & i), Range("j" & i)).ClearContents 'efface
                Range("B3:J12").Sort Key1:=Range("B3"), Order1:=xlAscending, Key2:=Range("C3") _
                , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
                False, Orientation:=xlTopToBottom
            End If
            Cancel = True
            Exit Sub
        End If
    Next i
     ActiveWorkbook.Save 'sauvegarde le fichier
End Sub

Claude.

Claude,

Merci de tes efforts mais malheureusement, ce n'est pas encore parfait.

Il est difficile de parfois tout expliquer clairement par message, donc, voici encore un détail important.

Dans ce fichier, il y a un nombre de lignes (à remplir) variables selon les périodes.

250 lignes max.

Mais ces lignes sont protégées, on ne peut pas les effacer (car elles ont des liens avec d'autres fichiers).

Donc, on doit pouvoir encoder les données dans n'importe quelle ligne, pouvoir effacer les données d'une ligne SANS EFFACER CETTE LIGNE.

Merci encore pour le temps consacré.

Bàt

Pasqi

re,

Bon, ma 1ère version avec le bouton remplissait le contrat ! !

Maintenant, "c'est vous qui voyez" comme dirait l'autre.

Je jette l'éponge !

Claude.

Bonjour

C'est vrai que lorsque l'on rajoute des conditions à chaque fois que la solution semble être trouvée, ça agace, à l'avenir essaie de bien reflechir à ton projet avant et expose toutes tes conditions d'emblée. ( même si on comprends que l'on ne peut pas penser a tout)

Bon, envoie ton fichier dans son état d'avancement actuel, je vais essayer de voir. Malheureusement pour toi, je suis loin d'être aussi compétant que Claude. et je suis aussi plus long à comprendre alors expose complètement et clairement ce que tu veux et peut-être que je pourrais t'aider.

cordialement

Hello,

Désolé Claude des infos peu claires, j'essaye en général d'être le plus clair possible, mais là, je reconnais que j''ai un peu foiré !! Mais pas toujours évident à expliquer.

Je dirais que la dernière version de Claude est proche du but.

Au lieu de supprimer la ligne, il suffirait d'effacer les données de cette ligne.

En résumé, j'ai une feuille avec max 250 lignes.

Différents utilisateurs doivent encoder des données sur ces lignes.

Mais les lignes ne seront pas encodées dans l'ordre, ils peuvent encoder la ligne 71 alors que les 70 premières sont vides.

Le fichier est protégé, donc, on ne peux ni ajouter, ni supprimer de lignes.

Ce que je demande, c'est que si un NOM est encodé dans une ligne, MAIS que le N° DE CARTE D'IDENTITE n'est pas encodé sur la même ligne, à la sauvegarde ou lorsqu'on veut quitter le programme, un message d'erreur apparaisse en indiquant qu'il faut remplir le n° de carte d'identité de Mr Untel. sinon, les données de cette ligne ne seront pas sauvegardées.

Donc si la personne n'encode pas le n° de carte d'identité, les données de cette ligne doivent être effacées, mais la ligne (redevenue vide) doit restée en place.

Si d'autres lignes ont été correctement remplies, les données doivent être sauvegardées.

Bonne chance et si ça ne va pas, tant pis, je me débrouillerai avec ce que j'ai.

Merciiiiiiiiiiii

re

Merci de continuer la recherche, c'est super.

Voici le fichier.

https://www.excel-pratique.com/~files/doc/Message_d_erreur2_1_2.xls

re

ok, je pense avoir compris

Regarde le fichier et dis moi....

https://www.excel-pratique.com/~files/doc/Message_d_erreur2_1_2_.xls

cordialement

Bonsoir,

C'est parfait, c'est nickel de chez nickel !!!

Mille merci à toi et à Claude pour votre aide, c'est super !!!

Bonne journée et bien à vous

Rechercher des sujets similaires à "creer message erreur donnees completees"