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 :

adapter une formule créée en public function [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2009
    Messages : 408
    Par défaut adapter une formule créée en public function
    Avec un public function la formule NBcellsPoliceCouleur est creé
    voici le code , ca peut servir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function NBCellsPoliceCouleur(ByVal target As Range, _
    ByVal Couleur As Integer) As Integer
     
    Dim Cellule As Range
    NBCellsPoliceCouleur = 0
    For Each Cellule In target
    If Cellule.Font.ColorIndex = Couleur Then 'Teste la couleur de la police
    NBCellsPoliceCouleur = NBCellsPoliceCouleur + 1
    End If
    Next
     
    End Function
    Avec l'enregistreur de macro, j ai placé cette macro , elle calcule en B3 le nombre de cellule avec le texte rouge de C12 à C23
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B3").FormulaR1C1 = "=NBcellsPoliceCouleur(R[12]C[1]:R[23]C[1],3)"

    je voudrais la transformé pour qu'elle calcul en B3 de C15:C & Range("C65536").End(xlUp).Row
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub comptagecouleur()
    Dim Derlig As Long
    Derlig = Range("C65536").End(xlUp).Row
     
     
    Range("B3").FormulaR1C1 = "=NBcellsPoliceCouleur( (Range(C15:C & Derlig) ),3)"
     
    End Sub
    mais elle inscrit cette formule en B3
    =NBcellsPoliceCouleur( (Range(B:$O & Derlig) );3)
    merci

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B3").FormulaR1C1 = "=NBcellsPoliceCouleur(Range(R[12]C[1]:R[" & Derlig-3 & "]C[1]),3)"
    EDIT: plutot ceci

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Bien que je ne vois pas bien l"utilité de faire une sub pour mettre une formule dans une cellule..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B3").FormulaLocal = "=NBcellsPoliceCouleur(C15:C "  & Derlig & ;"3)"
    A+

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2009
    Messages : 408
    Par défaut
    bonjour Le Forestier
    ben! bonne reflexion. Mais alors comment je peux adapter la formule ci dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NBcellsPoliceCouleur(C15:C "  & Derlig & ;"3)
    Je ne vois pas comment on fait une formule qui va reconnaitre ta dernière ligne qui peut varier a tout moment (hors tableau automatique).

    si tu connais l astuce, je serais heureux que tu me la donne.

    merci d avance.

    re
    j ai pensé a ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NBcellsPoliceCouleur(C15:C"(=NBVAL(c15:c6600)";3))
    mais la formule n'est pas bonne

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2009
    Messages : 408
    Par défaut
    on ma aidé et ca donne ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NBcellsPoliceCouleur(INDIRECT("C15:C"&NBVAL(C15:C6600));3)
    merci

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Ca n'est pas une bonne solution, si tu a des cellules vides ça n'ira pas jusqu'au bout de ta colonne.
    J'ai un peu modifié ta fonction pour qu'elle fasse ce que tu veux et je pense que j'en ai rajouter un peu trop, tu peu compter sur plusieur colonnes, sais pas si c'est nécessaire enfin bon, à toi de voir.
    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
    Public Function NBCellsPoliceCouleur(ByVal target As Range, ByVal Ligne As Long, _
    ByVal Couleur As Integer) As Integer
    Dim Cellule As Range, Plage As Range, Compteur As Integer
    Dim ColDeb As Long, ColFin As Long, Col As Long
    Dim TB
        Application.Volatile
        TB = Split(target.Address, ":")
        ColDeb = Range(TB(0) & "1").Column
        ColFin = Range(TB(UBound(TB)) & "1").Column
        For Col = ColDeb To ColFin
            Set Plage = Range(Cells(Ligne, Col), Cells(Cells(65536, Col).End(xlUp).Row, Col))
            For Each Cellule In Plage
                If Cellule.Font.ColorIndex = Couleur Then 'Teste la couleur de la police
                    Compteur = Compteur + 1
                End If
            Next Cellule
        Next Col
        NBCellsPoliceCouleur = Compteur
    End Function
    La formule à mettre dans la cellule si tu veux tester la colonne C à partir de la ligne 15 par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NBCellsPoliceCouleur(C:C;15;3)
    Pour plusieur colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NBCellsPoliceCouleur(C:E;15;3)
    A+

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

Discussions similaires

  1. Adapter une formule pour toutes planifications
    Par keops76 dans le forum VBA Project
    Réponses: 0
    Dernier message: 17/08/2010, 12h34
  2. Réponses: 1
    Dernier message: 29/05/2010, 15h53
  3. Adaptation d'une formule avec
    Par karim19 dans le forum Excel
    Réponses: 7
    Dernier message: 19/04/2010, 12h44
  4. Réponses: 1
    Dernier message: 15/04/2008, 04h22
  5. Réponses: 5
    Dernier message: 20/06/2006, 08h24

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