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. 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
    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,

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

        A@
        0
        1. 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
        2. 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
        3. ç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. sic! j' avais pas mis les lunettes :)
            j'essaye et je te tiens au courant.

            encore merci pour l'aide
            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. 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. 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. 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. 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