IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Sélection non contiguë de cellules dans une boucle For each [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chef d'équipe qualité
    Inscrit en
    Mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chef d'équipe qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Sélection non contiguë de cellules dans une boucle For each
    Bonjour,

    Je suis novice en Vba et je souhaite avoir des pistes/exemples pour un problème dont je ne trouve pas la solution malgré de nombreuses discussions lues et épluchées dans tous les sens

    J'ai un tableau composé ainsi :

    - 16 colonnes fixes (A à P)
    - Le nb de lignes est variable selon les saisies
    - La colonne J contient des cellules qui ne doivent pas être "re-coloriées"

    Le problème est de réaliser une sélection non contiguës de cellules par rapport au résultats de la boucle For each pour ensuite les colorier.

    > J'ai réussi à boucler la colonne K en fonction de la valeur que je recherche (string)
    > J'ai aussi réussi avec offset à colorier les colonnes précédentes (A à K) cependant je n'arrive pas à omettre la colonne J de la sélection ni à sélectionner les colonnes suivantes (L à P)
    > Je pense que j'ai qqch à faire avec des Range ou des Select avec la variable Cell utilisée dans la boucle mais je ne trouve pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Option Explicit
     
    Sub Test_FM()
     
    Dim ValCherch As String
    Dim DerLign As Integer
    Dim Plage As Range
    Dim Cell As Range
     
     
    ValCherch = "FM"
     
    DerLign = Range("K65536").End(xlUp).Row 'N° de la dernière ligne saisie
     
        Set Plage = Range("K1" & ":K" & DerLign) 'Defini la plage
     
            For Each Cell In Plage
     
            If Cell.Value = ValCherch Then Range(Cell.Offset(0, -10), Cell).Interior.ColorIndex = 6
     
            'Comment ajouter aussi le décalage vers la droite sur colonnes L à P ?
            'Comment omettre la colonne J
     
            Next Cell 'Boucle tous les FM
     
    End Sub
    Je joint un fichier pour aider à comprendre

    Je ne veux pas svp une solution toute faite, mais juste des propositions ou des pistes pour que je comprenne par moi-même...sinon c'est trop facile et inutile !

    D'avance merci pour vos retours
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    indiquer clairement le Range des colonnes utilisées, simple via l'Enregistreur de macro …

    ___________________________________________________________________________________________________________
    Je suis Paris, Manchester, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chef d'équipe qualité
    Inscrit en
    Mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chef d'équipe qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Re,

    Merci pour cette indication. Via l'enregistreur de macro j'obtiens par exemple pour la première ligne qui contient la valeur recherchée ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Macro1()
    '
    ' Macro1 Macro
     
        Range("A8:G8,I8:P8").Interior.ColorIndex = 6
     
    End Sub
    J'avais déjà essayé par cette méthode mais je n'arrive pas à relier le Range avec le n° de ligne variable déterminé par chaque passage de la boucle.

    C'est là que je ne comprends pas, ma logique m'abandonne

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 199
    Points : 319
    Points
    319
    Par défaut
    Bonjour,

    Comme ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A" & Cell.Row & ":G" & Cell.Row & ",I" & Cell.Row & ":P" & Cell.Row).Interior.ColorIndex = 6
    Cordialement,

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Chef d'équipe qualité
    Inscrit en
    Mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chef d'équipe qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Re,

    Merci pour la solution !

    Même si j'aurai juste préféré une piste plutôt qu'une réponse exacte...


  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ou utiliser Union couplée à Offset et Resize
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If c.Value = ValCherch Then Union(c.Resize(, 6), c.Offset(, -10).Resize(, 9)).Interior.ColorIndex = 16
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Chef d'équipe qualité
    Inscrit en
    Mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chef d'équipe qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Re,

    Merci pour ce code, je ne connaissais pas Resize.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Copier coller plage de cellules dans une boucle For Each..Next
    Par JulieD33 dans le forum Excel
    Réponses: 3
    Dernier message: 02/03/2015, 11h19
  2. Chercher dans les valeurs d'une cellule dans une boucle For Next
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/09/2011, 15h30
  3. exception non levée malgré throw dans une boucle for
    Par marion5515 dans le forum Langage
    Réponses: 12
    Dernier message: 14/05/2009, 17h53
  4. test avant d'entrer dans une boucle For each cell in selection
    Par totoro02 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/01/2009, 09h27
  5. comment effacer un element dans un collection dans une boucle for each
    Par medkarim dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 17/10/2008, 12h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo