XL 2016 Macro si cellules vides

MickaeL_D

XLDnaute Junior
Bonjour les experts,

En plus de la macro déjà existante. Je souhaiterais obliger l’opérateur à entrer un commentaire dans la colonne « O » si l'une des colonnes (de F à N) est vide sur la ligne en cours.

Merci d'avance,
 

Pièces jointes

  • CDC_test.xlsm
    284.8 KB · Affichages: 24

soan

XLDnaute Barbatruc
Inactif
Bonjour Mickael,

tu peux essayer :

VB:
ActiveSheet.Unprotect "2230"
Ligne.Columns("O") = Z
ActiveSheet.Protect "2230"

c'est la solution du post #12 de fanch55, où j'ai juste enlevé les parenthèses inutiles qui entouraient le mot de passe ; mais ça marchera pareil qu'avec ; donc si ça ne marche toujours pas, c'est peut-être car ce n'est pas le bon mot de passe ? bien sûr, si ton mot de passe est par exemple "loup", tu dois remplacer "2230" par "loup" (2×), comme ceci :
VB:
ActiveSheet.Unprotect "loup"
Ligne.Columns("O") = Z
ActiveSheet.Protect "loup"

soan
 

MickaeL_D

XLDnaute Junior
Bonjour Soan,

Je te confirme que le mdp est bien 2230. Mais l'erreur est toujours là. Voir capture ci-dessous.

Capture.JPG
 

soan

XLDnaute Barbatruc
Inactif
@MickaeL_D

ok pour ta confirmation du mot de passe ; donc tu déprotèges bien la feuille active ; mais est-ce que cette feuille active est bien la feuille où il faut faire le job ? si c'est une autre feuille, il faut la nommer explicitement ; par exemple, si c'est "Feuil5", mets ceci :
VB:
Worksheets("Feuil5").Unprotect "2230"
Ligne.Columns("O") = Z
Worksheets("Feuil5").Protect "2230"

c'est bizarre, il y a Dim Ligne As Range ; mais normalement, Ligne est un numéro de ligne, pas une plage de données ; donc ça serait plutôt : Dim Ligne As Long ou Dim Ligne& ; en supposant que c'est quand même un Range, où est situé ce Range ? sur la feuille active ou sur une autre feuille telle que "Feuil5" ? il faudra peut-être ajouter une référence explicite de feuille ? ça pourrait alors donner :
VB:
With Worksheets("Feuil5")
  .Unprotect "2230"
  .Ligne.Columns("O") = Z
  .Protect "2230"
End With

je me trompe peut-être, mais est-ce que le .Rows qui est tout au bout à droite de la ligne For n'est pas en trop ? vraiment à tout hasard, essaye sans ; sinon, j'espère que fanch55 pourra t'aider mieux que moi. 🍀

soan
 
Dernière édition:

fanch55

XLDnaute Barbatruc
c'est bizarre, il y a Dim Ligne As Range ; mais normalement, Ligne est un numéro de ligne, pas une plage de données ;
Salut @soan ,
Ligne dans ce contexte est un range, il désigne l'ensemble des cellules d'une ligne du range spécifié .
Mais tu as raison pour le Sheet, il faut être plus rigoureux surtout quand on "travaille" dans le Workbook.
Le dernier code a été modifié pour y répondre .
 
Dernière édition:

MickaeL_D

XLDnaute Junior
Malheureusement cela ne fonctionne pas...
La msgbox "CDC_test est toujours protégé" s'ouvre à chaque fois. Et ce, sans que la feuille se déprotège.
Du coup la suite du code ne peut pas s'exécuter.

Je tenais tout de même à te remercier d'avoir pris de ton temps pour avoir essayé de trouver une solution :cool:
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Mickael, fanch 55,

dans ton fichier réel, vérifie le nom de ta feuille :

c'est peut-être pas "CDC_test" mais une variante :​

"CDC_test " ; " CDC_test" ; " CDC_test "

(espace en trop à la fin ou au début, ou même
aux deux bouts)




autre piste pour la ligne de débug en jaune :

Sh.Ligne.Columns("O").Value = Comment

mais j'ai pas téléchargé le fichier du post #23 de fanch55,
alors peut-être qu'il l'a déjà fait dans ce fichier ?

soan
 

soan

XLDnaute Barbatruc
Inactif
@fanch55, Mickael,

j'ai testé le fichier de ton post #23.

la sauvegarde marche bien, et ça me demande bien avant de renseigner 2 commentaires ; j'ai mis "abc" et "def" et ça passe ; pour une nouvelle sauvegarde juste après, dans la même session Excel, ça ne me demande plus de saisir un commentaire car tous les commentaires sont mis ; pour une autre session Excel : je ferme le classeur, puis je l'ouvre à nouveau, puis je fais une sauvegarde : pas de demande de saisie d'un commentaire.

la feuille a été correctement déprotégée pour inscrire mes 2 commentaires "abc" et "def", puis reprotégée ensuite ; il n'y a pas eu de plantage ; à tout hasard, Mickael devrait essayer avec un autre mot de passe mais cette fois non numérique, par exemple "loup" ; je dis ça car peut-être qu'avec un mot de passe numérique tel que 2230, un espace se rajoute devant pour le signe « plus », et du coup, la feuille ne veut pas se déprotéger avec " 2230" au lieu de "2230" ? j'sais bien que c'est plutôt « tiré par les cheveux », mais sait-on jamais ?

j'ai Excel 2007 ; peut-être que y'a une différence de version d'Excel qui fait que ça marche pas sur le PC de Mickael car il a Excel 2016 ? notamment la différence d'interface entre SDI et MDI ; plus d'infos ICI.

dans son énoncé, Mickael a écrit : « Je souhaiterais obliger l’opérateur à entrer un commentaire dans la colonne « O » si l'une des colonnes (de F à N) est vide sur la ligne en cours. » ; c'est bien ce que tu as fait : "abc" et "def" se sont inscrits en colonne O ; mais je me demande si ce n'est pas une erreur de Mickael, car l'entête en O32 est "Justifier l'écart" et l'entête en P32 est "Commentaires" ; donc moi, j'aurais plutôt mis "abc" et "def" en colonne P, pas en colonne O. (remarque : en O32, le 1er mot est « Jusifier » : il manque le « t » !)

j'viens d'm'en rendre compte : dans la sub Workbook_BeforeSave(), il y a : Dim Comment As Variant ; mais Comment ne doit pas être utilisé en tant que nom de variable car c'est un mot-clé VBA ! (=keyword) ; en effet, Comment est le mot-clé pour désigner l'objet "commentaire d'une cellule" ; il faut donc utiliser un autre nom de variable ; je te laisse le choisir. 😜 je rappelle que Comment est utilisé entre autres ici :

Ligne.Columns("O").Value = Comment : c'est la ligne surlignée en jaune du Debug.

soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@fanch55, Mickael, (complément)

Image.jpg


j'ai essayé ça, de cliquer sur la croix après une modif non sauvegardée ; une boîte de dialogue apparaît avec cette question : "Voulez-vous enregistrer ce Classeur ?" ; je clique sur le bouton "Oui", et là attention : en mode debug, juste après exécution de ThisWorkbook.Save du cas vbYes, il y a un appel implicite à la sub Workbook_BeforeSave() ! et là, bizarrement, ça veut plus déprotéger la feuille et j'ai donc le message "CDC_test est toujours protégé" ; à vous de voir ce qu'il faut faire de ces infos... 😜

soan
 

Discussions similaires

Réponses
4
Affichages
226

Membres actuellement en ligne

Statistiques des forums

Discussions
312 370
Messages
2 087 693
Membres
103 641
dernier inscrit
anouarkecita2