OVH Cloud OVH Cloud

colorer cellule en VBA

49 réponses
Avatar
Pascal
bonjour,
Pourriez-vous m'aider à réaliser cette SUB ?
je cherche à colorer les cellules vide dans la plage A3:M200 en appui sur
bouton

Private Sub cmdCelluleVide_Click()
Dim Target As Range
Target.Value = "a3:m200"
If Target.Value = "" Then
Range(Target.Address, Target.Offset(0, 0).Address).Interior.ColorIndex
= 5
End If
End Sub

Merci d'avance

Pascal

10 réponses

1 2 3 4 5
Avatar
Jacky
Re...
Le résultat devrait t'en convaincre ....
Convaincu.


--
Salutations
JJ


"MichDenis" a écrit dans le message de news:
%

| Dim C
***Pas vraiment suffisant pour être efficace

voici un exemple d'une procédure élaborée par John Walkenback.:

Tu fais rouler cette procédure dans un module standard telle qu'elle est
écrite et tu refais rouler cette fois en mettant une apostrophe devant
chaque
ligne débutant par DIM pour désactiver la déclaration des variables ou
enlève seulement leur type ...

Le résultat devrait t'en convaincre ....
-------------------
Sub TimeTest()

Dim A As Integer, B As Integer, C As Integer
Dim x As Integer, y As Integer
Dim i As Integer, j As Integer
Dim StartTime As Date, EndTime As Date

StartTime = Timer

x = 0
y = 0
For i = 1 To 5000
For j = 1 To 1000
A = x + y + j
B = y - x - i
C = x - y - i
Next j
Next i

EndTime = Timer

MsgBox EndTime - StartTime

End Sub
-------------------




"Jacky" a écrit dans le message de news:

Re...
oui si tu es en:
Option Explicit
Les variables étant Variant par défaut
Dim C
devrait être suffisant
--
Salutations
JJ


"Pascal" ,com> a écrit dans le message de news:

Re,
dans les 2 cas de figure, je dois déclarer C
dim c as ??? range?
Pascal
a écrit dans le message de news:

Salut Pascal

Soit la Feuil1 à traiter
Je te propose ce code :

For Each c In Worksheets("Feuil1").Range("A3", "M200")
If c = "" Then
c.Interior.ColorIndex = 5
End If
Next

Celà devrait convenir
Maintenant des solutions avec la mise en forme conditionnelle existent
Je laisse le soin aux adeptes de te les proposer

Donne moi des nouvelles !!!!








Avatar
Modeste
Bonsour® MichDenis avec ferveur ;o))) vous nous disiez :

Si dans le haut de son module, il est inscrit : Option Explicit
Il devra déclarer cette variable et c'est une excellente habitude
à prendre pour ceux que cela concerne...


Explicit ou pas
comme tu le dit, plus qu'une habitude cela devrait etre un réflexe
qui évite pas mal de prise de tête lorsque l'on fait un tant soit peu de programmation.

j'ajouterai que le typage correct est également une des régles de l'art !

et pour finir :
bien que parfois un peu lourde
la notation Hongroise devrait etre connue et mise en oeuvre par tous !!!
http://pagesperso-orange.fr/dominique.maniez/hongroise.htm

;o)))
encore faut-il etre convaincu que cette petite complication apporte une grande simplicité de compréhension !!!

--
@+
;o)))

Avatar
MichDenis
Au sujet de la manipulation des variables, VBA est très flexible.
D'autres langages de programmation ne laissent pas le choix...
chacune des variables s'accompagne d'une déclaration obligatoire.

À part ceci :
| A part une efficacité et rapidité dans l'exécution du code ....

Dans une procédure aussi simple que celle-ci :

For each c in Range("A1:A3")
c....
next

Si tu as déclaré la variable C as range, tu aura droit à l'aide automatique
de la liste déroulante des propriétés et méthodes de l'objet...c'est une aide
mémoire non négligeable (pour moi) et cela évite aussi bien des fautes
d'orthographes (indispensable pour moi)...

Perso, quand je lis un code que je n'ai pas créé, j'aime bien regarder la déclaration
des variables... en un seul coup d'oeil, cela donne une idée des objets utilisés dans
la procédure !

Ceci étant, tu fais à ta tête et c'est ok pour moi...tout ceci pour n'épargner quelques
secondes au moment d'écrire la procédure...c'est un argument plutôt faible mais qui
suis-je pour juger !

P.S- Un de mes messages sur ce fil contient une procédure de John Walkenback
Fais le test... et pourtant cette procédure on peut la définir comme "simple"




a écrit dans le message de news:

Salut MichDenis

J'en apprend tous les jours !!!!

Sur l'ensemble des outils que j'ai pu concevoir je n'ai jamais eu de
déboir à ne pas déclarer
C'est trés certainement un tord de ma part mais avant de changer mes
habitudes j'aimerais comprendre la réelle utilité et surtout ne pas
tomber dans une nécessité de principe
A part une efficacité et rapidité dans l'exécution du code pour des
traitements lourds que gagne t'on à réaliser ce type de déclaration et
notament pour ces quelques lignes de code que j'utilise trés
fréquemment en l'état sans l'ombre d'une quelconque difficulté
Le but de m'a question n'étant pas de remettre en cause certaines
habitudes qui ont certainement leur fondemment mais d'évoluer au mieux
des nécessités de chacun et notamment des miennes
Etre efficace et justifié j'adhère pleinement
Etre puriste ce n'est pas ma philosophie

Merci pour ton aide dans cette esprit
Avatar
Modeste
la notation Hongroise

http://support.microsoft.com/kb/110264



--
--
@+
;o)))
Avatar
Pascal
Hello,
je commence toujours mon code par option explicit habitude prise avec VB
le code fonctionne très bien, merci
voici pour ceux que cela interesse, la version finale
----------------------------------------------------
-ClickActiver est déclarer Boolean avec valeur False en entrée

sub xxxx()
Dim c As Range
'si on à déjà coloré les cellules on décolore
If ClickActiver = True Then Application.ScreenUpdating = False
For Each c In [c3:n200]
c.Interior.ColorIndex = 0 '0 = aucun remplissage
Next
ClickActiver = False
Else
'sinon on colore les cellules
Application.ScreenUpdating = False
For Each c In [c3:n200]
If c = "" Then c.Interior.ColorIndex = 50 ' vert
Next
ClickActiver = True
End If
End sub

Pascal

"MichDenis" a écrit dans le message de news:

Si dans le haut de son module, il est inscrit : Option Explicit
Il devra déclarer cette variable et c'est une excellente habitude
à prendre pour ceux que cela concerne...

Dim C as Range



a écrit dans le message de news:

Rebonjours Pascal

Non pas besoin de déclarer la variable le code fonctionne en l'état

Fais des essais et dis moi !!!!




Avatar
MichDenis
| la notation Hongroise

Encore heureux qu'on ne soit pas obligé de déclarer
les variables objets par leur Quid inscrit dans la base
de registre de windows ...;-)))
Avatar
Jacky
Re...
Un peut lourd ton code..;o)
'------
Sub jj()
Dim c As Range
Application.ScreenUpdating = False
[c3:n200].Interior.ColorIndex = xlNone
For Each c In [c3:n200]
If c = "" Then c.Interior.ColorIndex = 50
Next
End Sub
'----------

--
Salutations
JJ


"Pascal" ,com> a écrit dans le message de news:
%
Hello,
je commence toujours mon code par option explicit habitude prise avec VB
le code fonctionne très bien, merci
voici pour ceux que cela interesse, la version finale
----------------------------------------------------
-ClickActiver est déclarer Boolean avec valeur False en entrée

sub xxxx()
Dim c As Range
'si on à déjà coloré les cellules on décolore
If ClickActiver = True Then Application.ScreenUpdating =
False
For Each c In [c3:n200]
c.Interior.ColorIndex = 0 '0 = aucun remplissage
Next
ClickActiver = False
Else
'sinon on colore les cellules
Application.ScreenUpdating = False
For Each c In [c3:n200]
If c = "" Then c.Interior.ColorIndex = 50 ' vert
Next
ClickActiver = True
End If
End sub

Pascal

"MichDenis" a écrit dans le message de news:

Si dans le haut de son module, il est inscrit : Option Explicit
Il devra déclarer cette variable et c'est une excellente habitude
à prendre pour ceux que cela concerne...

Dim C as Range



a écrit dans le message de news:

Rebonjours Pascal

Non pas besoin de déclarer la variable le code fonctionne en l'état

Fais des essais et dis moi !!!!








Avatar
Modeste
Bonsour® MichDenis avec ferveur ;o))) vous nous disiez :

la notation Hongroise


Encore heureux qu'on ne soit pas obligé de déclarer
les variables objets par leur Quid inscrit dans la base
de registre de windows ...;-)))


;o)))

tu veux parler des GuId ???
comme ceci :
Private Sub Workbook_Open()
On Error Resume Next
' Ajout de la bibliotheque Microsoft Speech object library
ActiveWorkbook.VBProject.References.AddFromGuid "{C866CA3A-32F7-11D2-9602-00C04F8EE628}", 5, 0
End Sub

dans un module :
Option Explicit
Public Vocal As New SpVoice
Public toto As String

Sub Parler(phrase As String) '
Vocal.Speak phrase
End Sub

Sub Test()
Parler "Bonjour Denis !"
End Sub

--
--
@+
;o)))


Avatar
francois.forcet
Rebonjour MichDenis

Tout d'abord je te remercie pour ta réponse

"Si tu as déclaré la variable C as range, tu aura droit à l'aide
automatique
de la liste déroulante des propriétés et méthodes de l'objet...c'est
une aide
mémoire non négligeable (pour moi) et cela évite aussi bien des
fautes
d'orthographes (indispensable pour moi)..."

C'est effectivement un bon argument mais pour l'élaboration du code
Celà n'induit pas pour autant de le restituer dans la proposition


"Perso, quand je lis un code que je n'ai pas créé, j'aime bien
regarder la déclaration
des variables... en un seul coup d'oeil, cela donne une idée des
objets utilisés dans
la procédure !"

L'argument aussi se tient mais seulement pour les lecteurs initiés


"Ceci étant, tu fais à ta tête et c'est ok pour moi...tout ceci pour
n'épargner quelques
secondes au moment d'écrire la procédure...c'est un argument plutôt
faible mais qui
suis-je pour juger ! "

J'ai du mal à comprendre : "Ceci étant, tu fais à ta tête et c'est o k
pour moi"

Ce ne sont pas mes intentions je te rassure : "tout ceci pour
n'épargner quelques

secondes au moment d'écrire la procédure"


Il est vrai que pour m'investir à l'éboration de quelques lignes
supplémentaires ce n'est pas tant le temps à consacrer qui me motive
mais la réelle utilité mettant en jeu le résultat escompté

Et en aucun cas je me rallierai à cette dynamique :

"j'ajouterai que le typage correct est également une des régles de
l'art "

Je respecte ceux qui ne progresse que dans cet esprit grand bien leur
fasse

Mais je ne suis pas là pour le côté artistique mais pour progresser
efficacement et apporter mon aide au mieux de mes connaissances si
faibles soient elles je le reconnait mais dans le seul souci de
satisfaire nos interlocuteurs
Je je pense pas qu'ils soient sensibles à la chorégraphie des lignes
de code

Que l'on me démente !!!!
Avatar
MichDenis
Si vous utilisez l'enregistreur de macro pour enlever la couleur
de fond sur une plage de cellule, Excel propose ceci comme code:

Selection.Interior.ColorIndex = xlnone

Si vous utilisez dans la fenêtre de l'éditeur de code, l'explorateur d'objets
et faite une petite recherche sur xlnone, vous remarquerez qu'excel
attribue à cette constante la valeur suivante : -4142 (&HFFFFEFD2)

Je pourrais écrire le code suivant :

Dim x As Excel.Constants
x = xlNone
Range("A1:A10").Interior.ColorIndex = x

X devrait valoir alors : -4142

Pourtant :
Range("A1:A10").Interior.ColorIndex = 0
fonctionne aussi ....

Quelqu'un a une explication ?






"Pascal" ,com> a écrit dans le message de news:
%
Hello,
je commence toujours mon code par option explicit habitude prise avec VB
le code fonctionne très bien, merci
voici pour ceux que cela interesse, la version finale
----------------------------------------------------
-ClickActiver est déclarer Boolean avec valeur False en entrée

sub xxxx()
Dim c As Range
'si on à déjà coloré les cellules on décolore
If ClickActiver = True Then Application.ScreenUpdating = False
For Each c In [c3:n200]
c.Interior.ColorIndex = 0 '0 = aucun remplissage
Next
ClickActiver = False
Else
'sinon on colore les cellules
Application.ScreenUpdating = False
For Each c In [c3:n200]
If c = "" Then c.Interior.ColorIndex = 50 ' vert
Next
ClickActiver = True
End If
End sub

Pascal

"MichDenis" a écrit dans le message de news:

Si dans le haut de son module, il est inscrit : Option Explicit
Il devra déclarer cette variable et c'est une excellente habitude
à prendre pour ceux que cela concerne...

Dim C as Range



a écrit dans le message de news:

Rebonjours Pascal

Non pas besoin de déclarer la variable le code fonctionne en l'état

Fais des essais et dis moi !!!!




1 2 3 4 5