Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

Blixa

XLDnaute Nouveau
Bonsoir à tous...

J'ai essayé de condenser le plus possible le titre, mais ce n'étais pas simple de synthétiser mon besoin...
En fait j'aimerais savoir s'il serait possible de créer une macro qui empêcherait l'utilisateur d'enregistrer le doc, s'il n'a pas rempli 2 colonnes de la feuille de calcul...
2 colonnes de champs obligatoires...si c'est vide on ne peut pas enregistrer le doc...
possible or not possible... that's my question...

Merci par avance pour votre aide et vos infos...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

Bonsoir Blixa, bonsoir le forum,

Oui c'est possible mais il faut que tu sois plus clair. Tu parles de doc, s'agit-il d'un fichier word ou excel ? Tu parles de 2 colonnes de champs obligatoires... Ça fait 131 072 cellules. Beaucoup non ? Il faudrait que tu mettes ton fichier en pièce jointe en précisant clairement les cellules à rempir obligatoirement pour que l'on puisse te proposer une macro adéquate.
 

TooFatBoy

XLDnaute Barbatruc
Re : Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

Si en te posotionnant en A1 puis en faisant un xldown tu obtiens 65536, alors c'est que ta colonne est vide.

Ou plus exactement cela veut dire que toutes les cellules de la colonne sont dans le même état que la cellule A1 (pleine ou vide).
Et pour être vraiment pointilleux il faudrait également tester si la dernière cellule de la colonne est vide.

Donc au final pour être certain qu'une colonne est vide il faudrait que A1 soit vide, que le xldown donne 65536 et que A65536 soit vide.


Ceci dit, il y a sans doute plus simple, mais mes connaissances sont trop limitées pour connaître. :(
 

Blixa

XLDnaute Nouveau
Re : Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

Bonjour,

Merci à tous les 2 pour vos réponses...

Marcel32, tu dis "mais mes connaissances sont trop limitées pour connaître", que devrais je dire...lol

bon sinon pour en revenir à ma demande...
je ne sais pas exactement combien de lignes comportera le fichier, et parenthèse pour Robert, je me suis mal exprimé en parlant de doc, je sous entendais le document, mais c'est vrai que ça porte à confusion avec le .DOC de Word...
Dans mon cas il s'agit bien d'un fichier Excel.
En fait je souhaite mettre à dispo de mes collègues un fichier, une matrice, pour effectuer les modifications des coordonnées de nos clients.
Mais comme il nous faut impérativement le n° de client et la raison sociale, j'aimerais que le fichier ne puisse pas être enregistrer si sur la dernière ligne comportant des données, les colonnes n° de client et raison sociale sont vides...
Le but étant que chacun puisse y mettre les modifs à effectuer sur les fiches clients, et ensuite s'approprier le fichier en faisant "enregistrer sous".
Ensuite je récupére les différents fichiers créés, je les compiles pour ne plus en avoir qu'un seul regroupant toutes les données.
Mais ce qui veut dire que pour une personne il comportera peut être 15 lignes, pour une autre 25 et une autre 50...
ais je été plus clair ou plus précis?

Robert, je met mon fichier en pièce jointe comme demandé, tu verras j'ai mis les 2 colonnes n° de client et raison sociale, qui sont les 2 colonnes obligatoires, en rouge.

Encore merci de votre aide, et si vous avez besoin d'infos n'hésitez pas...
 

Pièces jointes

  • Matrice _Modif_Coordo_Clients.xls
    18 KB · Affichages: 107

Robert

XLDnaute Barbatruc
Repose en paix
Re : Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

Bonjour le fil, bonjour le forum,

En pièce jointe jointe ton fichier modifié. Une macro dans le Module1 qui recherche la dernière ligne éditée, puis vérifie si le numéro et la raison sociale de chaque ligne a bien été renseigné. En cas de manque, la variable publique test devient vrai. Deux macros dans le composant ThisWorkbook empêchent, l'une la fermeture du classeur, l'autre la sauvegarde du classeur tant que cette variable n'est pas égale à faux. Résultat, tant que tous les numéros et raisons sociales n'ont pas été renseignés on ne peut ni fermer ni enregistrer le classeur. En espérant que cela te convienne...
 

Pièces jointes

  • Blixa_v01.xls
    34 KB · Affichages: 245

job75

XLDnaute Barbatruc
Re : Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

Bonjour à tous,

Peut-être cette macro, à placer dans ThisWorkbook :

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim ref As Range
With Sheets("Feuil1")
  Set ref = .Range("A3:B65536").Find("", LookIn:=xlValues)
  If Application.CountA(.Rows(ref.Row)) Then
    Cancel = True
    .Activate
    ref.Select
    MsgBox "Renseignez la cellule sélectionnée...", 48
  End If
End With
End Sub

A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

Bonjour le fil, bonjour le forum,

Impressionné par ton code Job je l'ai utilisé mais j'ai découvert un bug. Si tu oublies les deux données d'une même ligne la sauvegarde s'éffectue quand même... Voir pièce jointe.
 

Pièces jointes

  • Blixa_v02.xls
    36 KB · Affichages: 122

Blixa

XLDnaute Nouveau
Re : Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

ouah...Merci Robert et Merci Job75...
joli travail à tous les deux..

c'est vrai que sur le fichier de Job, il est possible de fermer le classeur même si 1 des 2 données obligatoires d'une même ligne et même les 2 ne sont pas là... par contre pour enregistrer si 1 donnée est manquante c'est impossible, sauf si, comme le dit robert, les 2 données d'une ligne sont manquantes...
je ne suis malheureusement pas assez calé pour définir d'où vient le bug...
Alors qu'avec celui de Robert ça marche nickel...impossible d'enregistrer ou de fermer si une des 2 données est manquante...
C'est nickel.... tout juste ce qu'il me fallait...

Oups..après test sur ta version Robert je viens de m'apercevoir de quelque chose...
Je vais essayer d'être clair...par exemple, si je rentre des données sur la ligne 1, que pour x ou y raison je laisse des lignes totalement vides, et que je reprend ma saisie sur la ligne 5...
Si sur la ligne 5 j'oublie de mettre une des données obligatoires, cela me bloque, normal... mais Excel me demande des n° de clients et des raisons sociales pour toutes les lignes que j'ai laissé vides... et là c'est plus embêtant...mais pas dramatique, je préciserai juste aux personnes de bien rentrer les données ligne après ligne, et de faire attention à ne pas en sauter...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

Bonjour le fil, bonjour le forum,

En fait je pense que le code de Job est bien mieux car pour que le bug se produise il faut qu'il n'y ait absulument aucun renseignement sur la ligne et cela doit être rarissime. Donc je te conseille d'utiliser le sien qui en plus a l'avantage d'être bien plus simple.
 

job75

XLDnaute Barbatruc
Re : Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

Bonjour le fil, le forum,

Merci Robert :) désolé hier j'avais dû partir très vite (les vacances...).

Pour remédier au problème que tu soulèves (saut d'une ligne) on peut utiliser le code suivant :

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim ref As Range
With Sheets("Feuil1")
  Set ref = .Range("A3:B65536").Find("", LookIn:=xlValues)
  If Application.CountA(.[COLOR="Red"]Range(ref.Row & ":65536")[/COLOR])Then
    Cancel = True
    .Activate
    ref.Select
    MsgBox "Renseignez la cellule sélectionnée...", 48
  End If
End With
End Sub

A+
 

job75

XLDnaute Barbatruc
Re : Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

Re,

Pour Blixa, si l'on veut en plus empêcher la fermeture du classeur, utiliser le code suivant (toujours dans ThisWorkbook) :

Code:
Dim Flag As Boolean 'impérativement en haut de la feuille

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Test
Cancel = Flag
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Test
Cancel = Flag
End Sub

Sub Test()
Dim ref As Range
Flag = False
With Sheets("Feuil1")
  Set ref = .Range("A3:B65536").Find("", LookIn:=xlValues)
  If Application.CountA(.Range(ref.Row & ":65536")) Then
    Flag = True
    .Activate
    ref.Select
    MsgBox "Renseignez la cellule sélectionnée...", 48
  End If
End With
End Sub

A+
 

micmos

XLDnaute Nouveau
Re : Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

Bonjour à Tous,

Merci pour ce code qui correspond - presque - à ce que je cherchais :)

J'ai un fichier (en pièce jointe) qui doit contenir des données sur la plage B9:G28, et comme pour Blixa si une donnée n'est pas renseignée je voudrais que la personne ne puisse pas sauvegarder le fichier. Dans mon cas si une description (colonne B) est indiquée alors la personne doit remplir toutes les données dans les autres cases, par exemple une description est en B9 alors la personne doit remplir C9, D9, E9, F9, G9. Cela fonctionne avec le code de job. Seulement dans ma colonne A j'aimerai renseigner des nombres de 1 à 28, nombres qui seront toujours indiqués. Ainsi la marco ne doit faire référence qu'à la plage B9:B28, sauf que avec le code actuel je ne peux pas renseigner mes cases A9 à A28 sinon la macro me demande toujours de renseigner les autres cases.

J'ai essayé plein de choses mais mes limites Excelliennes et notamment de la connaissance de if Application CountA s'arrêtent là :)

Merci de votre aide d'avance! Vous trouverez ci-joint le fichier correspondant.

A+

Micha
 

Pièces jointes

  • 02-Demande d'entreposage_2016.xls
    114 KB · Affichages: 69

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16