Je rencontre un problème sur un code qui a marché pendant des mois/années.
J'effectue un test sur le remplissage de cellules, si ces cellules sont vides je les rempli en jaune avec le bout de code suivant :
If Range("aa3") = "" Or Range("n5") = "" Or Range("n6") = "" Or Range("at13") = "" Or Range("at14") = "" Or Range("q41") = "" Or Range("BH8") = "" Then
Range("AA3,N5,N6,AT13,AT14,Q41,BH8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Ca marche quand j'enregistre le code et dès que je ferme le fichier et le rouvre ça ne marche plus. Ca fait au moins 2 ans que ça marche et d'un coup ça ne marche plus.
Auriez vous une explication?
j'ai essayé en replaçant 65535 par vbyellow
au départ il n'y avait que le .color et ça marchait bien
question subsidiaire : est ce que la 1ère ligne peut être simplifiée If range... or range... or range...
@Jacques25 :
Il me semble que ton code fait la chose suivante:
s'il y a au moins une cellule vide parmi les cellules AA3,N5,N6,AT13,AT14,Q41,BH8, alors on colore l'ensemble des cellules AA3,N5,N6,AT13,AT14,Q41,BH8
@JBARBE
Il me semble que ton code fait la chose suivante:
si la cellule AA3 est vide, alors on colore l'ensemble des cellules AA3,N5,N6,AT13,AT14,Q41,BH8
Re, Bonjour mapomme,
En effet, pas essayé !
J'ai changé or par and ce qui me parait logique et ajouté !
Interior.ColorIndex = xlNone
s'il n'y a pas de couleurs dans les cellules indiquées !
Code:
Sub test()
If Range("aa3") = "" And Range("n5") = "" And Range("n6") = "" And Range("at13") = "" And Range("at14") = "" And Range("q41") = "" And Range("BH8") = "" And _
Range("aa3").Interior.ColorIndex = xlNone And Range("n5").Interior.ColorIndex = xlNone And Range("n6").Interior.ColorIndex = xlNone And _
Range("at13").Interior.ColorIndex = xlNone And Range("at14").Interior.ColorIndex = xlNone And Range("q41").Interior.ColorIndex = xlNone And Range("BH8").Interior.ColorIndex = xlNone Then
Range("AA3,N5,N6,AT13,AT14,Q41,BH8").Interior.Color = 65535
End If
End Sub
J'ai eu quelques problèmes de connexion.
Merci pour vos réponses
@ sousou le End if est bien dans mon code j'ai juste oublié de le copier dans le message
Pour les autres, si une des cellules parmi celles citées est vide je dois colorer toutes les cellules citées en jaune.
Mon code marche en l'enregistrant avec l'enregistreur de macro, je ferme le fichier, je le rouvre et ça ne marche plus le code d'erreur est le suivant :
erreur d'éxecution 1004
erreur définie par l'application ou par l'objet
Sub TEST()
Dim x, vide As Boolean
For Each x In Range("AA3,N5,N6,AT13,AT14,Q41,BH8"): vide = vide Or x = "": Next x
Range("AA3,N5,N6,AT13,AT14,Q41,BH8").Interior.Color = IIf(vide, vbYellow, xlNone)
End Sub
Mon code marche en l'enregistrant avec l'enregistreur de macro, je ferme le fichier, je le rouvre et ça ne marche plus le code d'erreur est le suivant :
erreur d'éxecution 1004
erreur définie par l'application ou par l'objet
Jack
Ton code et les codes apportés devraient fonctionner !
Tu dois avoir un probléme avec ton programme Excel !
Voir les mises à jour d'Excel ou :
Peut-être la SUPPRESSION ENTIÈRE du programme et sa RÉINSTALLATION va apporter quelque chose !
Bonne journée !
Oui des problèmes de connexion Wi-fi
Je vais essayer d'intégrer le code de Ma pomme dans mon code demain, si j'ai les mêmes soucis je referai une saisie complète du code et je verrai bien.
Merci à tous d'avoir pris du temps pour me conseiller.
Bonne fin de week end à tous.
Juste pour vous tenir au courant mon problème est réglé, mon code marche, c'était juste une histoire de protection d'onglet qui avait été déplacée dans le code.
Je garde bien le code de Ma pomme que je trouve beaucoup plus lisible.
Ma pomme je reviens sur ton code, pourrais tu m'expliquer sa signification, j'aime encore bien utiliser des codes que je comprends. J'ai bien compris le fond mais j'arrive pas à détailler :
Pour chaque X (que représente X) dans les cellules AA3... et là je bloque sur la fin de la ligne
For Each x In Range("AA3,N5,N6,AT13,AT14,Q41,BH8"): vide = vide Or x = "": Next x
les cellules AA3... colorées en jaune si vide est vrai sinon pas de couleur
Range("AA3,N5,N6,AT13,AT14,Q41,BH8").Interior.Color = IIf(vide, vbYellow, xlNone)
For Each x In Range("AA3,N5,N6,AT13,AT14,Q41,BH8"): vide = vide Or x = "": Next x
x est une variable de type variant. On va donc affecter à x successivement chaque cellule du range Range("AA3,N5,N6,AT13,AT14,Q41,BH8").
on va affecter à x la cellule AA3 puis N5 puis N6 puis ... etc. vide est une variable de type boolean valant Faux ou Vrai. Au départ, par défaut, sans affectation initiale explicite, vide vaut Faux.
On va examiner successivement toute les cellules du range via la variable x. Première cellule :vide est Faux. Si x n'est pas vide, alors x="" est Faux doncvide or x=""revient à faire vide = Faux ou Faux donc vide est Faux. Deuxième cellule : vide est toujours à faux, si x n'est pas vide, alors x="" est Vrai donc vide or x="" revient à faire vide = Faux ou Vrai qui est égal à vrai.
Ensuite les valeurs des x suivant n'ont plus d'importance car une fois que vide est Vrai alors vide restera Vrai. En effet Vrai or Faux donne Vrai et Vrai or Vrai donne Vrai .
Donc vide sera Vrai si au moins une des cellules est vide
sinon si toute les cellules ne sont pas vides, vide restera à Faux.
On utilise la syntaxe IIF. Suivant la valeur de vide , on affecte au fond de toutes les cellules du range soit la couleur jaune (si vide est vrai soit au moins une cellule vide) soit aucune couleur (si vide est faux soit aucune cellule n'est vide))