XL 2019 Matrices VBA (array)

Mohamed Medo

XLDnaute Nouveau
Bonjour tout le monde,
SVP j'ai besoin de vos aides
Est ce qu'on peut utiliser la fonction application.WorksheetFunction.CountIf ou application.WorksheetFunction.CountIfs dans le cas d'une matrice (array à 2 dimensions)?
Si Non, Alors qu'elles sont les autres fonctions qu'on ne peut utiliser pour les matrices ?
Merci.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Mohamed, et bienvenu sur XLD,
1- Si vous avez installer l'addon XLP ( Lien ) alors vous pouvez utiliser arrayCount ( lien )
2- Avec une boucle de recherche, par ex :
VB:
Sub Essai()
T = [A1:B6]             ' Tableau de données
MotRecherché = 1        ' Chaine recherchée
For i = 1 To UBound(T)
    If T(i, 1) = MotRecherché Then Occurence = Occurence + 1
Next i
MsgBox Occurence
End Sub
et peut être d'autres astuces.
 

patricktoulon

XLDnaute Barbatruc
Bonjour
juste en passant
ou alors tu te fait ta petite fonction perso
pour le coup tu a pour 1 dim et 2 dim

pour 1 dim
VB:
Sub testArraySimple1()
    'test avec un tableau 2 dim converti en array 1 dim
    tablo = Application.Transpose([A1:A30].Value)
    MsgBox ArrayCountIF(tablo, "toto")
End Sub

Sub testArraySimple2()
    'test avec un array 1 dim (le split d'une chaine)
    tablo = Split("riri,toto,loulou,robert,toto,truc,machin,bidule,chose,kevin,jacques", ",")
     MsgBox ArrayCountIF(tablo, "toto")
End Sub

Function ArrayCountIF(T, recherche)
    Dim A&, Elem
    For Each Elem In T: A = IIf(Elem = recherche, A + 1, A): Next
    ArrayCountIF = A
End Function

pour 2 dim avec recherche dans une colonne ou une ligne ou tout le tableau
pour l'exemple je vais prendre le tableau sur une plage
mais ca marche aussi sur un tableau créé en vba
VB:
Sub testTableau2DIM_1()
    tablo = [A1:B30].Value
    MsgBox Array2DimCountIF(tablo, "toto", col:=2)    'cherche le countif "toto dans la colonne 2
End Sub

Sub testTableau2DIM_2()
    tablo = [A1:B30].Value
    MsgBox Array2DimCountIF(tablo, "toto", ligne:=13)    'cherche le countif "toto dans la ligne 13
End Sub

Sub testTableau2DIM_3()
    tablo = [A1:B30].Value
    MsgBox Array2DimCountIF(tablo, "toto", All:=True)    'cherche le countif "toto dans tout le tableau
End Sub

Function Array2DimCountIF(T, recherche, Optional ligne As Long = -1, Optional col As Long = -1, Optional All As Boolean = False)
    Dim A&, Elem
    With Application
        If ligne > -1 Then tx = .Index(T, ligne)
        If col > -1 Then tx = .Transpose(.Index(T, , col))
    End With
    If All Then tx = T
    For Each Elem In tx: A = IIf(Elem = recherche, A + 1, A): Next
    Array2DimCountIF = A
End Function
pas compliqué
 
Dernière édition:

Mohamed Medo

XLDnaute Nouveau
Bonjour ,
Merci infiniment de votre réponse.
M patricktoulon, est ce que je suis obligé de faire à chaque fois des fonctions pour résoudre mes problèmes relatives aux matrices ?? est ce qu'on peut pas utiliser les fonctions excel en VBA ? et pourquoi la fonction NB.SI et NB.SI.ENS ne sont pas fonctionnelles pour faire des calculs sur un tableau déclaré comme matrice??
 

patricktoulon

XLDnaute Barbatruc
NB.SI et NB.SI.ENS ne sont pas fonctionnelles pour faire des calculs sur un tableau déclaré comme matrice??
parce que les fonction que tu site fonctionne sur des object range pas des variables tableaux et ou array

néanmoins les fonction excel sont parfois accessibles via la fonction evaluate qui va évaluer la formule
tel que tu la code dans une cellule mais en anglais
 

Discussions similaires

Réponses
16
Affichages
663
Réponses
21
Affichages
595

Statistiques des forums

Discussions
313 277
Messages
2 096 762
Membres
106 744
dernier inscrit
Popies