Macro pour cellules non contigues

Résolu/Fermé
ibll - 17 sept. 2009 à 18:19
 Eruel - 27 nov. 2009 à 09:03
Bonjour,

voiçi mon problème :

j'ai des cellules dans lesquelles il y a des données et d'autre rien.
ex :
A4 = 2
A5 vide
A6=10
A7 vide
A8=9
A9 vide

je voudrais pourvoir créer une macro pour sélectionner uniquement les cellules contenant les données.
En fait je leur attribuerait une couleur de fond (ça je sais faire)
c'est la sélection qui me pose problème.

si quelqu'un peut m'aider, je prends
merci d'avance
A voir également:

12 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
17 sept. 2009 à 18:37
Bonsoir,
Dim i As Integer, derlig As Integer
derlig = ActiveSheet.Range("A65536").End(xlUp).Row
For i = 1 To derlig
If IsEmpty(Cells(i, 1)) Then 'si la cellule est vide alors je ne fais rien
Else 'sinon (si elle est "pleine")
Cells(i, 1).Select 'je la sélectionne
With Selection.Interior 'et je la peins en rouge
.ColorIndex = 3 'ici le code couleur
End With
End If
Next i
0
merci d'abord pour la réactivité.

mais quelques petites précisions :

j'ai 5 cellules concernées
A5,A7,A9,A11,A12 seulement.

par ailleurs j'ai créer une cellule (A4) avec un menu déroulant qui (j'aimerais bien) me permettrais de remplir les dites cellules d'une couleur de mon choix.

le menu me permet de choisir rouge, violet, bleu ciel, vert etc....

en cliquant sur le menu (et donc en sélectionnant une couleur), je voudrais que les 5 cellules du haut se remplissent. Donc la couleur pourrait changer selon mes besoins.

pouvez-vous me guider sur la macro correspondante.

merci d'avance
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
18 sept. 2009 à 10:13
Salut,
Commençons par la devise de Mike-31 sur ce forum : "Un problème sans solution est un problème mal posé (Einstei­n)"...
Ensuite, plusieurs étapes :
1- Créer la liste déroulante :
Dans la feuille Excel ou tu veux ta liste déroulante, créé d'abord les champs (par exemple en colonne F) avec dans la cellule voisine le numéro VBA correspondant à la couleur (en colonne G)
F_________G
Noir_______1
Rouge_____3
Orange____46
Vert_______50
Bleu_______33
Violet______13
Gris________2
Ensuite tu cliques sur A4, Données/validation
Autoriser choisir "liste" et source : =$F$1:$F$7 (par exemple)
OK voilà ta liste est créée.
2- Insérer le code au bon endroit pour que lorsque ta feuille change la couleur change dans les cellules concernées :
Clic droit sur l'onglet de la feuille et choisir "visualiser le code", Visual Basic s'ouvre.
copier coller ce code dans cette fenêtre :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim var As String
var = ActiveSheet.Columns(6).Cells.Find(Range("A4")).Offset(0, 1)
Set plage = ActiveSheet.Range("A5,A7,A9,A11:A12")
With plage.Interior
.ColorIndex = var
End With
Set plage = Nothing
End Sub
Explications :
Dim var As String : déclaration d'une variable nommée "var" comme étant une chaîne de caractère
var = ActiveSheet.Columns(6).Cells.Find(Range("A4")).Offset(0, 1) attribution d'une valeur à cette variable. Ici la valeur qu'on lui donne c'est : ActiveSheet [page active] Columns(6) [colonne F] .Cells.Find(Range("A4")) [recherche de la cellule ayant le même contenu que "A4"] .Offset(0, 1) [on prends la valeur contenue dans la cellule voisine, colonne de droite]
Set plage = ActiveSheet.Range("A5,A7,A9,A11:A12") définit la plage de cellules qui changera de couleurs
With plage.Interior
.ColorIndex = var attribue à la plage la couleur recherchée (var)
End With


Si tu souhaites plus d'explications n'hésite pas. En VBA le principal n'est pas le code lui même mais la démarche.
0
OK merci je vais essayer et je te tiens au courant très bientôt.

encore merci pour cette aide précieuse

A+
0
ibll1 Messages postés 8 Date d'inscription dimanche 20 septembre 2009 Statut Membre Dernière intervention 21 septembre 2009
20 sept. 2009 à 20:04
coucou je reviens avec des nouvlles.
en fait en écrivant ton code (et j'ai fait très attention) il semble qu'il y ait une erreur 13 = incompatibilité de type au niveau du code

le .colorindex=var il ne le prend pas.

voilà ce que j'ai écris :

Private Sub worksheet_selectionchange(ByVal target As Range)
Dim var As String
var = ActiveSheet.Columns(42).Cells.Find(Range("F4")).Offset(0.1)
Set plage = ActiveSheet.Range("A9,A11,A13,A15,A17")
With plage.Interior
.ColorIndex = var

End With
Set plage = Nothing

End Sub

si tu peux m'aider encore j'apprécierais beaucoup, merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
21 sept. 2009 à 08:32
Salut,
L'erreur est ici :
var = ActiveSheet.Columns(42).Cells.Find(Range("F4")).Offset(0.1)
à remplacer par var = ActiveSheet.Columns(42).Cells.Find(Range("F4")).Offset(0, 1)
C'est une virgule, pas un point.
0
ibll1 Messages postés 8 Date d'inscription dimanche 20 septembre 2009 Statut Membre Dernière intervention 21 septembre 2009
21 sept. 2009 à 14:35
sic! j' avais pas mis les lunettes :)
j'essaye et je te tiens au courant.

encore merci pour l'aide
0
ibll1 Messages postés 8 Date d'inscription dimanche 20 septembre 2009 Statut Membre Dernière intervention 21 septembre 2009
21 sept. 2009 à 14:57
ça marche !

je pensais qu'en sélectionnant juste la couleur dans le menu, les cellules se coloreraient............mais en fait il faut valider dans une cellule vide.

ce n'est pas possible ?
0
ibll1 Messages postés 8 Date d'inscription dimanche 20 septembre 2009 Statut Membre Dernière intervention 21 septembre 2009
21 sept. 2009 à 18:22
Help ! nouveau problème

dans ma page j'ai une cellule qui change de couleur à l'aide du menu crée par la validation des données.
tout va bien.......
sauf que je voudrais mettre une 2nd cellule qui fonctionne de la même manière et ainsi pouvoir avoir par exemple dans l'une la couleur vert et dans l'autre la couleur jaune.

mais, je ne peux pas refaire la même procédure parce que la programme s'y perd.
et si j'en crée une autre Private par exemple, ça ne marche pas non plus ????????????????

voilà la 1ère procédure pour la cellule F4 (qui change de couleur)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim var As String
var = ActiveSheet.Columns(28).Cells.Find(Range("F4")).Offset(0, 1)
Set plage = ActiveSheet.Range("F4")
With plage.Interior
.ColorIndex = var
End With

Set plage = Nothing
End Sub


maintenant pour la cellule L4 qui devrait avoir les mêmes caractéristiques..........je n'y arrive pas.
peux-tu encore me rendre service?

merci d'avance Ibll
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
22 sept. 2009 à 10:00
salut,
Je dois être mal réveillé car je ne comprends pas ce que tu souhaites réaliser...
0
Bon voyons!!!!!

j'ai une cellule avec un menu déroulant "vert, bleu, rouge, etc.......;" et en cliquant sur une couleur la cellule prend la couleur désirée. ça! ça marche.

ex : je sélectionne jaune, et la cellule devient jaune

mais si je veux faire une autre cellule fonctionnant sur le même principe mais avec une autre couleur

ex: je veux que celle-ci soit rouge (alors que l'autre reste toujours jaune).

j'espère que c'est clair !!!

je ne peux pas utiliser la même procédure pour les deux cellules par ce l'ordi semble ne plus retrouver ses petits.

comment puis-je faire?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
23 sept. 2009 à 16:11
Pourquoi pas? :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim var As String
var = ActiveSheet.Columns(28).Cells.Find(Range("F4")).Offset(0, 1)
Set plage = ActiveSheet.Range("F4")
With plage.Interior
.ColorIndex = var
End With
Set plage = Nothing
var = ActiveSheet.Columns(28).Cells.Find(Range("B4")).Offset(0, 1)
Set plage = ActiveSheet.Range("B4")
With plage.Interior
.ColorIndex = var
End With
Set plage = Nothing
End Sub
J'ai choisit B4 et F4...
0
Bonjour,

j'essaye et je te tiens au courant.
merci encore de rester "connecté" sur mes problèmes informatiques

A@
0
Alors là ! Pijaku merci beaucoup.
ça marche impécable.

pour l'instant je n'ai pas d'autres questions à te poser.............;;sauf si tu me encore m'aider concernant les paramétrages de graphiques incorporés suite à une macro.

j'ai mis un post il y a quelques jours.

merci encore et bonne journée
0
bonjour,
Je suis dans une situation similaire. J'ai des listes déroulantes et quand une valeur de la liste est choisie cela me met des cellules en fond rouge. Evidement lorsqu'on change la valeur de la liste déroulante c'est d'autre cellules qui deviennent rouge. J'aimerai selectionner ses cellules pour pouvoir les intégrer dans les "cellules variables" du solveur excel mais je bloque un peu.
J'ai tenté une approche avec le code ci-dessous sans succes.

For Each Cell In Sheets("Feuil1").Range("B2:D16")
If Cell.Interior.Color = 255 Then
SolverOK SetCell:=Range("J2"), MaxMinVal:=3, ValueOf:=0,
ByChange:=Cell.Value
End If
Next

Si quelqu'un peut m'aider merci.
0