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 :

VBA Countifs plages variables


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Supply Chain analyst
    Inscrit en
    Octobre 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Supply Chain analyst

    Informations forums :
    Inscription : Octobre 2021
    Messages : 26
    Par défaut VBA Countifs plages variables
    Bonjour,

    Je cherche à mettre en place la formule nb si ens en VBA en utilisant des plages variables.

    Avec l'enregistreur j'obtiens cela et c'est parfait en revanche je ne parviens pas à l'adapter avec des variables pour que la formule s'adapter à la taille des plages.
    Tout en sachant que les critères sont situés sur la même ligne sur une colonne différente.

    Merci d'avance pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Sub Macro4()
    '
    ' Macro4 Macro
    '
     
    '
       Range("AJ2").Select
       Selection.FormulaR1C1 = "=COUNTIFS(R2C3:R170C3,RC[-33],R2C35:R170C35,RC[-1])"
     
    End Sub

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut
    par exemple

    Option Explicit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    Dim aa As Integer, j As Integer, k As Integer, l As Integer
    Dim ValeurCherchee
    Dim myRange As Range
    With Sheets("Feuil1")
    ValeurCherchee = "toto"
    j = 5 ' N° de colonne
    k = 1 'PremiereLligne
    l = 20 'DerniereLigne
    Set myRange = .Range(.Cells(k, j), .Cells(l, j))
    End With
    aa = Application.WorksheetFunction.CountIf(myRange, ValeurCherchee)
    MsgBox aa
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Supply Chain analyst
    Inscrit en
    Octobre 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Supply Chain analyst

    Informations forums :
    Inscription : Octobre 2021
    Messages : 26
    Par défaut
    Pour compléter mon premier message, je souhaite compter le nombre de "true" par article, en VBA.

    Ci-joint un fichier exemple
    Avec en colonne H, le résultat attendu.Exemple.xlsx

  4. #4
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 288
    Par défaut
    Salut
    Un début de piste. J'ai remplacé True par Ok
    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
    49
    50
    51
    52
    53
    54
    Option Explicit
    Sub test()
    Dim xlwbk As Workbook, xlwbs As Worksheet
    Dim rng As Range, rngCritere1 As Range, rngCritere2 As Range
    Dim dernLigneA As Long, dernLigneDoublon As Long, countLigne As Long, countLigneDoublon As Long, indexLigneA As Long, indexLigneDoublon As Long
    Dim i As Long
    Dim strDoublon As String, valCritere1 As String, valCritere2 As String
    Dim cValeur As Variant
     
    Set xlwbk = ThisWorkbook
    Set xlwbs = Worksheets("Feuil1")
     
    dernLigneA = xlwbs.Cells(Rows.Count, 1).End(xlUp).Row
    dernLigneDoublon = xlwbs.Cells(Rows.Count, 3).End(xlUp).Row
     
    Set rng = xlwbs.Range(Cells(2, 1), Cells(dernLigneA, 1))
     
    countLigne = 0
    indexLigneDoublon = dernLigneDoublon + 1
     
    For Each cValeur In rng.Cells
    countLigneDoublon = 0
        If InStr(1, strDoublon, "|" & cValeur.Value & "|") = 0 Then
            For indexLigneA = 1 To dernLigneA
                If rng.Cells(indexLigneA, 1).Value = cValeur.Value Then
                    countLigneDoublon = countLigneDoublon + 1
                End If
            Next indexLigneA
            If countLigneDoublon > 1 Then
                xlwbs.Cells(indexLigneDoublon, 3).Value = cValeur.Value
                xlwbs.Cells(indexLigneDoublon, 4).Value = countLigneDoublon
                indexLigneDoublon = indexLigneDoublon + 1
                strDoublon = strDoublon & "|" & cValeur.Value & "|"
            End If
        End If
    Next cValeur
     
    dernLigneDoublon = Cells(Rows.Count, 3).End(xlUp).Row
     
    Set rngCritere1 = xlwbs.Range(Cells(2, 1), Cells(dernLigneA, 1))
    Set rngCritere2 = xlwbs.Range(Cells(2, 2), Cells(dernLigneA, 2))
     
    For i = 2 To dernLigneDoublon
        valCritere1 = xlwbs.Range(Cells(i, 3), Cells(i, 3)).Value
        valCritere2 = "ok"
        xlwbs.Range(Cells(i, 5), Cells(i, 5)) = WorksheetFunction.CountIfs(rngCritere1, "=" & valCritere1, rngCritere2, "=" & valCritere2)
    Next i
     
    Set rngCritere2 = Nothing
    Set rngCritere1 = Nothing
    Set rng = Nothing
    Set xlwbs = Nothing
    Set xlwbk = Nothing
    End Sub

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si vous utilisiez les tableaux structurés d'excel, vous ne devriez pas vous préoccuper de la taille variable de votre liste. Le raccourci clavier pour convertir une plage classique en tableau est Ctrl + L)

    S'il s'agit de compter le nombre de TRUE dans une seule colonne, la fonction COUNTIF suffit.
    Soit pour compter le nombre de TRUE dans la colonne nommée Status de la table nommée myTable =COUNTIF(myTable[Status],TRUE)

    [EDIT]

    En relisant votre premier post, je constate que vous avez effectivement deux critères et donc l'usage de COUNTIFS est requis

    Voici un code insérant la formule =NB.SI.ENS([Ref];[@Ref];[Status];VRAI) dans la colonne nommée Compter en prenant comme critère 1 la colonne nommée Ref et comme critère 2 celle nommée Status et dans celle-ci, il y a comme valeur VRAI ou FAUX


    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub T()
      Dim oList As ListObject
      Set oList = Range("t_Data").ListObject
      oList.ListColumns("Compter").DataBodyRange.Cells(1, 1).Formula = "=COUNTIFS([Ref],[@Ref],[Status],TRUE)"
      Set oList = Nothing
    End Sub
    Une autre solution est d'utiliser un tableau croisé dynamique

    Nom : 211201 dvp COUNTIFS.png
Affichages : 75
Taille : 53,8 Ko
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [XL-2013] VBA : multiplication plage variable Quantité * CU
    Par sursaut91 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/05/2017, 14h24
  2. VBA - Graphique avec plage variable
    Par virstyle dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2010, 11h48
  3. vba vlookup plage variable
    Par choupette_64 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/08/2009, 14h19
  4. [VBA-E] COUNTIF sur une sélection de plage variable
    Par NiKoS29 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/09/2007, 23h03
  5. [VBA-E] Macro Pour Faire un Tri sur plage variable
    Par tabarly35 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/09/2006, 19h02

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