Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 

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
 

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)



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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…