Page 1 sur 1

fonction NB.DIFF dans calc

Publié : 30 sept. 2006 12:14
par terrios
bonjour,

je suis a la recherche d'une fonction equivalente au NB.DIFF de l'extension morefunc d'excel qui permet de compter des éléments (texte, date...) différents dans une plage définie.

cordialement

Publié : 30 sept. 2006 13:51
par Jeff
Bonjour,

A ma connaissance,il n'y a aucune fonction similaire dans OOo,et le pack morefunc n'existe pas pour OOo.

Cependant,quelques personnes sur ce forum ont un niveau assez impressionnant en macro et peut être celà peut se "bricoler" ainsi.
ça éviterai un assemblage de NB.SI avec valeur d'erreur.

Sinon,ta question à été évoquée sur un autre site : http://permalink.gmane.org/gmane.comp.o ... ench/47696

Publié : 30 sept. 2006 16:26
par MichelXld
bonjour

J'espère que cette fonction (qui ne prend pas en compte tous les cas de figure) pourra t'aider

Code : Tout sélectionner

=NbDiff_OOo("Feuille1";1;1;1;10;Vrai)

Code : Tout sélectionner

'NomFeuille: spécifie la feuille contenant la plage à tester. 

'Définition de la plage à tester: 
    ' ColDebut: Numéro de la 1ere colonne dans la plage à contrôler 
    ' ColFin: Numéro de la derniere colonne dans la plage à contrôler 
    ' LigDebut: Numéro de la 1ere ligne dans la plage à contrôler 
    ' LigFin: Numéro de la derniere ligne dans la plage à contrôler 

'Blancs: Compte les cellules vides si l'argument = true    

Function NbDiff_OOo(NomFeuille As String, ColDebut As Integer, _
   ColFin As Integer, LigDebut As Integer, LigFin As Integer, Blancs As Boolean) As Integer 

Dim Ws As Object, Cellule As Object 
Dim Resultat As Variant
Dim Tableau()
Dim J As Integer, K As Integer

Ws = ThisComponent.Sheets(NomFeuille) 
NbDiff_OOo = 0 
K = 1

For X = ColDebut - 1 To Colfin - 1 
  For Y = LigDebut - 1  To LigFin - 1 
    Verif = False
    Cellule = Ws.getCellByposition( X , Y ) 
    
    Resultat = Cellule.getString
    
    If Blancs <> False Or Cellule.Type <> com.sun.star.table.CellContentType.EMPTY Then
      
      If UBound( Tableau ) = -1 Then 
        ReDim Preserve Tableau(1)
        Tableau(1) = Resultat
      Else
        For J = LBound( Tableau ) To UBound( Tableau )    
          If Tableau( J ) = Resultat Then
            Verif = True
            Exit For
          End If
        Next J
      
        If Verif = False Then
          K = K + 1
          ReDim Preserve Tableau(K)      
          Tableau(K) = Resultat      
        End If
      
      End If
    End If
     
  Next Y 
Next X 

NbDiff_OOo = UBound( Tableau ) 
End Function  

Code : Tout sélectionner

Sub Test
MsgBox NbDiff_OOo("Feuille1" ,1 ,1 ,1 ,10 ,True ) 
End Sub

michel