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 :

Construire plage à partir d'indices


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut Construire plage à partir d'indices
    Bonjour Les gens,

    Voila je dispose d'une cellule qui évalue la valeur d'une formule, disons:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI(E12:E126;">=0")/E4
    Je souhaite que cette formule se base sur une plage construite de manière dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI($E$plageDebut:$E$plageFin;">=0")/E4
    ou plageDebut et plageFin sont variables définies au niveau du classeur.
    Quelle est la bonne syntaxe ?
    Cela doit être relativement simple à faire mais je suis une quiche sur excel et j'ai cherché mais malheureusement pas encore tombé sur le/les post(s) qui en parlent.

    D'avance merci pour vos réponses.

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Salut.

    Les tableaux structurés sont faits pour cela => voir mon tuto sur le sujet. Si tu ajoutes des données à la suite des données du tableau, celui-ci grandit et ta formule s'adapte automatiquement.

    Nom : 2020-10-27_192031.png
Affichages : 114
Taille : 8,2 Ko



    NB: Depuis 2007, SOMME.SI est obsolète. Perso, je lui préfère SOMME.SI.ENS qui permet 127 critères
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut
    Salut Fauconnier,

    Merci pour ta réponse et ta solution élégante!

  4. #4
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut
    Alors par contre je remarque que les valeurs de mes petits calculs ne se mettent pas à jour en fonction des filtres du tableau. Est ce qu'il y'a une parade ?

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Il faut utiliser la fonction SOUS.TOTAL, mais il n'est plus alors question de critères mais de reprendre une des fonctions statistiques "de base" qui tiendra compte des lignes filtrées. Les filtres remplaceront donc les critères du SOMME.SI.ENS.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut
    Bon j'ai fini par faire ça :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    Function nbCellulesVisiblesSi(ByVal plage As Range) As Double
     
    ' Remplace =NB.SI(IQ_P01_TableauDuree;">=0") sur E4 par ex
    ' ou =NB.SI(IQ_P01_TableauRatioB;$F$4) sur F8 par ex
     
    Dim plg As Range
    Dim total As Double
    total = 0
    For Each plg In plage
        'If plg.Rows.Hidden = False And plg.Columns.Hidden = False And plg.Cells.Value = correspondance Then
        If plg.Rows.Hidden = False And plg.Columns.Hidden = False Then
     
            For Each Cellule In plg
                If Cellule.Value >= 0 Then
                    total = total + 1
                End If
            Next
     
        End If
    Next
    nbCellulesVisiblesSi = total
     
    End Function
     
    Function sommeCellulesVisiblesSi(ByVal plage As Range) As Double
     
    'Remplace =SOMME.SI(IQ_P01_TableauDuree;">=0") sur E5 par ex
     
    Dim plg As Range
    Dim total As Double
    total = 0
    For Each plg In plage
        'If plg.Rows.Hidden = False And plg.Columns.Hidden = False And plg.Cells.Value = correspondance Then
        If plg.Rows.Hidden = False And plg.Columns.Hidden = False Then
     
            For Each Cellule In plg
                If Cellule.Value >= 0 Then
                    total = total + Cellule.Value
                End If
            Next
     
     
        End If
    Next
    sommeCellulesVisiblesSi = total
     
    End Function
    C'est crade.

    ça par contre (moins crade) mais ne marche pas. ça comptabilise toutes les lignes, même celle qui sont filtrées (et sensées êtres non visibles)
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Function nbCellulesVisiblesSi2(ByRef plage As Range, ByVal correspondance As Double) As Double
     
    ' Remplace =NB.SI(IQ_P01_TableauDuree;">=0") sur E4 par ex
    ' ou =NB.SI(IQ_P01_TableauRatioB;$F$4) sur F8
     
    Dim plg As Range
    Dim total As Double
    total = 0
    Set rn = plage.SpecialCells(xlCellTypeVisible)
     
    For Each Cellule In rn
        If Cellule.Value >= 0 Then
            total = total + 1
        End If
    Next
    nbCellulesVisiblesSi2 = total
     
    End Function
    Function sommeCellulesVisiblesSi2(ByRef plage As Range, ByVal correspondance As Double) As Double
     
    'Remplace =SOMME.SI(IQ_P01_TableauDuree;">=0") sur E5 par ex
     
    Dim plg As Range
    Dim total As Double
    total = 0
    Set rn = plage.SpecialCells(xlCellTypeVisible)
     
    For Each Cellule In rn
        If Cellule.Value >= 0 Then
            total = total + Cellule.Value
        End If
    Next
    sommeCellulesVisiblesSi2 = total
     
    End Function

Discussions similaires

  1. [XL-2003] Instancier une Plage à partir de celulles de différentes Feuilles
    Par henripec dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/09/2009, 15h55
  2. analyse d'une plage à partir de la cellule active
    Par buhrne dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 07/03/2008, 09h27
  3. Insertion de données dans une plage à partir d'un formulaire
    Par andre55 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/10/2007, 10h48
  4. Remplir une plage à partir d'un tableau
    Par roudy78 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/05/2007, 10h56
  5. [Pl/Sql] Construire requete à partir de variable
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 2
    Dernier message: 27/09/2006, 18h30

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