Limiter la selection dans excel

Limiter la selection dans excel - VB/VBA/VBS - Programmation

Marsh Posté le 22-10-2007 à 11:48:21    

Bonjour à tous!
 
Je suis un grand débutant de VBA, et je m'escrime depuis quelques jours sur une macro...
Malheureusement, je commence à vraiment être bloqué et je n'ai rien trouvé malgré des longues recherches sur les fofos...
 
Voila donc mon problème:
 
Je voudrais faire une macro qui change de couleur les cases d'un tableur uniquement sur une colonne pour certaines plages de valeurs. Mais le problème, c'est que ma macro change la couleur sur toutes les cases de la ligne jusqu'au max d'excel! (jusqu'à la ligne 64 000!!) du coup ca dure 3 plombes et c'est pas très pro tout ca...
 
voici mon code:
 
 
 
Sub couleur()
 
 
ActiveSheet.UsedRange.Select
 
Dim cEll As Range
     
If Columns("e:e" ).Select Then
         
        For Each cEll In Selection
             
            If cEll.Value <> "31/12/2007" Then
            cEll.Interior.ColorIndex = 40
            cEll.Offset(0, -4).Interior.ColorIndex = 40
            End If
                                         
        Next cEll
     
    End If
     
ActiveCell.End(xlToLeft).Select
     
MsgBox "fini!"
 
End Sub
 
 
je pense que le probleme vient de mon "If Columns("e:e" ).Select Then", car il "écrase" la 1ère séléction, mais je ne sais pas comment faire pour le limiter aux cellules utilisées du tableau et qu'il n'aille pas jusqu'à la ligne maximum...
 
Qqun pourrait m'aider??
Merci d'avance!

Reply

Marsh Posté le 22-10-2007 à 11:48:21   

Reply

Marsh Posté le 22-10-2007 à 14:23:12    

As-tu essayé d'utiliser la mise en forme conditionnelle d'Excel (Menu Format) ?
Si oui, en quoi cela ne répond-il pas à ton besoin, pour envisager une macro ?


Message édité par tegu le 22-10-2007 à 14:23:38
Reply

Marsh Posté le 22-10-2007 à 14:42:40    

Bonjour,
Tu lui fais changer de couleur dès que la valeur est différente du "31/12..." quand il n'y a rien c'est normal que ca change.
Ajoute un test du style "si différent de ta cellule vide" avant de changer la couleur.
Pour savoir si ta sélection est dans la colonne "e" teste la colonne de la cellule active :
ActiveCell.Column

Reply

Marsh Posté le 22-10-2007 à 14:47:06    

Merci pour vos réponses!
Finalement j'ai réussi à m'en sortir avec un ElseIf different de cellule vide, comme tu le disais Paul Hood.
Mais je pensais qu'il y avait un moyen plus "propre" de lui dire de s'arreter une fois qu'il arrive sur une plage blanche...
 
Et pour répondre à tegu, je sais que ca peut se faire avec la mise en forme automatique, mais en fait plus que la macro, ce qui m'interesse, c'est de savoir la faire! ^^
 
Merci encore!

Reply

Marsh Posté le 22-10-2007 à 14:49:09    

Tu peux si tu connais la taille de ton tableau, définir un Range de ton tableau et lui faire parcourir uniquement les cellules de ce Range avec un each.

Reply

Marsh Posté le 22-10-2007 à 15:00:17    

ok, mais justement, mon problème c'est que c'est un tableur à rafraichir régulièrement et dont le nombre de lignes change à chaque fois...
 
Avec le elseif, ca marche très bien, mais est-ce que ca n'alourdit pas mon programme?

Reply

Marsh Posté le 22-10-2007 à 18:43:52    

la méthode end(xlup) pourrait t'aider...
 
For each cEll in range("E1:E" & range("E65536" ).end(xlUp).row)
 
next
 
En partant du principe que la première cellule soit E1, si tu mets ton traitement à l'interieur de la boucle, je pense que ça devrait correspondre à ce que tu veux !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed