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 :

Atteindre dernière cellule colorée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 127
    Par défaut Atteindre dernière cellule colorée
    Bonjour,

    J'ai un petit souci.

    J'ai une colonne avec des cellule colorée genre: en colonne C, des lignes 9 à 12: Vert, Vert, Vert, Orange.

    Je n'arrive pas à écrire le code qui me permettrait d'atteindre la dernière cellule colorée (je voudrais l'écrire du même type que celui pour atteindre la dernière ligne non vide (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Derligne=Range("A65536").End(xlup).Row
    Je voudrais un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerCellColor=Range("??").??????
    Merci d'avance pour votre aide
    Julien

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour Julien,

    Voilà une proc qui va chercher le numero de la derniere cellule colorée dans la colonne A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
     
    Dim i&: i = Range("A65536").End(xlUp).Row
        While Cells(i, 1).Interior.ColorIndex = xlNone
            i = i - 1
        Wend
    MsgBox "La derniere cellule de la colonne A colorée se trouve en ligne : " & i
     
    End Sub

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par antonysansh Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
     
    Dim i&: i = Range("A65536").End(xlUp).Row
        While Cells(i, 1).Interior.ColorIndex = xlNone
            i = i - 1
        Wend
    MsgBox "La derniere cellule de la colonne A colorée se trouve en ligne : " & i
     
    End Sub
    Ca ne marchera pas forcément parce que, du point de vue de la propriété End, une cellule colorée n'est pas une cellule utilisée.
    Donc, si tes dernières cellules colorées sont vides de contenues, ta macro renverra la dernière cellule ayant un contenu et non la dernière cellule colorée.

    Autre prposition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function LastColor() as Long
     
    Dim c As Range
     
    LastColor = 0
    For Each c In ActiveSheet.UsedRange
       If c.Interior.ColorIndex <> xlNone Then LastColor = c.Row
    Next c
     
    End Sub

  4. #4
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Tu as raison Menhir, je n'avais pas pris en compte les cellules colorées vides.

    Par contre sur de très grande plage, je trouve ta solution plutôt couteuse.
    Pour ma culture sais tu s'il n'est-il pas possible de parcourir depuis la fin pour éviter de passer sur des cellules colorées inutilement ?

  5. #5
    Expert éminent 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
    Par défaut
    Si couleur précise, utilisez Find avec FindFormat

  6. #6
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Citation Envoyé par antonysansh Voir le message
    Par contre sur de très grande plage, je trouve ta solution plutôt couteuse.
    Pour ma culture sais tu s'il n'est-il pas possible de parcourir depuis la fin pour éviter de passer sur des cellules colorées inutilement ?
    Bonjour,
    Je pense comme antonysansh, et non pas besoin de couleur précise.
    en reprenant le code de antonysansh et en changant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A65536").End(xlUp).Row
    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells.SpecialCells(xlCellTypeLastCell).Row
    et une condition pour gérer l'erreur si il n'y a aucune cellule de couleur,
    et cela fonctionne même sur des cellules vides de couleurs.
    on obtient
    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
    Sub test()
     
    Dim colonne As String
    colonne = "A"
     
    Dim i&: i = Cells.SpecialCells(xlCellTypeLastCell).Row
     
        While Range(colonne & i).Interior.ColorIndex = xlNone
            If i = 1 Then
                'pour gérer l'erreur si il n'y a aucune cellule de couleur
                MsgBox "Aucune cellule de couleur dans la colonne " & colonne
                Exit Sub
            End If
            i = i - 1
        Wend
    MsgBox "La derniere cellule de la colonne " & colonne & " colorée se trouve en ligne : " & i
     
    End Sub

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par antonysansh Voir le message
    Par contre sur de très grande plage, je trouve ta solution plutôt couteuse.
    Effectivement, j'avais oublié que le UsedRange ne se contente pas de balayer les ligne mais qu'il va générer une plage "surfacique" englobant plusieurs colonne.

    J'aurais du ajouter un Column(3) après mon UsedRange.

    Pour ma culture sais tu s'il n'est-il pas possible de parcourir depuis la fin pour éviter de passer sur des cellules colorées inutilement ?
    A ma connaissance, For Each ne permet pas de choisir son sens de scrutation comme For to.
    Mais, si la plage utilisée fait moins de 30 000 lignes, il vaut mieux commencer par le début que par la fin.

    Mais en utilisant un SpecialCells(xlCellTypeLastCell) (comme le suggère gnain), ça permet de commencer plus près de la cible.
    Ce code devrait être plus rapide que le premier que j'ai donné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function LastColor() as Long
     
    For LastColor = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
       If Cells(LastColor, 3).Interior.ColorIndex <> xlNone Then Exit For
    Next LastColor
     
    End Function

  8. #8
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Bonjour,
    effectivement, il est mieux de partir d'en bas que d'en haut.
    puis on est pas obligé d'utiliser UsedRange car xlCellTypeLastCell va chercher la dernière ligne utilisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For LastColor = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
       If Cells(LastColor, 5).Interior.ColorIndex <> xlNone Then
            lig = LastColor
            Exit For
        End If
     
    Next LastColor
    MsgBox lig

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

Discussions similaires

  1. [OLE Excel] Aller jusqu'à la dernière cellule rempli
    Par JBrek dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 07/08/2009, 19h21
  2. Réponses: 2
    Dernier message: 01/09/2006, 09h28
  3. [VBA-E] Repérer la dernière cellule modifiée
    Par aokiseiichiro dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/05/2006, 15h45
  4. atteindre la cellule d'un DBGRID ou DBLOOKUPLISTBOX
    Par hocine dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/03/2006, 10h55
  5. [VB][Excel]test la dernière cellule pleine d'une feuille
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/09/2005, 13h25

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