Macro pour cellules non contigues

Résolu
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
Configuration: Windows Vista
Firefox 3.5.3

12 réponses

  1. Modérateur
    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
    1. 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
      1. Modérateur
        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
    2. OK merci je vais essayer et je te tiens au courant très bientôt.

      encore merci pour cette aide précieuse

      A+
      0
      1. 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
        1. Modérateur
          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
          1. sic! j' avais pas mis les lunettes :)
            j'essaye et je te tiens au courant.

            encore merci pour l'aide
            0
            1. ç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
              1. 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
                1. Modérateur
                  salut,
                  Je dois être mal réveillé car je ne comprends pas ce que tu souhaites réaliser...
                  0
              2. 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
                1. Modérateur
                  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
              3. Bonjour,

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

                A@
                0
                1. 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
                  1. 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