Macro pour cellules non contigues

Résolu
ibll -  
 Eruel -
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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  2. ibll
     
    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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  3. ibll
     
    OK merci je vais essayer et je te tiens au courant très bientôt.

    encore merci pour cette aide précieuse

    A+
    0
  4. ibll1 Messages postés 9 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  7. ibll1 Messages postés 9 Statut Membre
     
    sic! j' avais pas mis les lunettes :)
    j'essaye et je te tiens au courant.

    encore merci pour l'aide
    0
  8. ibll1 Messages postés 9 Statut Membre
     
    ç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
  9. ibll1 Messages postés 9 Statut Membre
     
    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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      salut,
      Je dois être mal réveillé car je ne comprends pas ce que tu souhaites réaliser...
      0
  10. ibll1
     
    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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  11. ibll1
     
    Bonjour,

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

    A@
    0
  12. ibll1
     
    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
  13. Eruel
     
    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