Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction personnalisée...

6 réponses
Avatar
HD
Bonjour,

Je voudrais réaliser une fonction personnalisée... mais celle ci ne me
retourne 0 dès que je l'utilise dans mon classeur alors qu'elle fonctionne
lorsque je la lance à partir d'une macro...

Voilà ma macro :

Public Function Débit(nCpt As String) As Double
Dim i As Long
Dim TDeb
TDeb = 0
i = 1

Do
If Left(ActiveWorkbook.Sheets("écritures").Cells(i, 3).Value,
Len(nCpt)) = nCpt Then
TDeb = TDeb + ActiveWorkbook.Sheets("écritures").Cells(i,
6).Value
End If
i = i + 1
Loop Until Cells(i, 1).Value = ""
Débit = TDeb
End Function

J'ai en fait une feuille "écritures" avec des écritures comptables. Je
recherche le total débit (en colone 6) de tout les comptes (en colone 3)
commençant par nCpt. Exemple :
= Débit ("601")
Je cherche ici le total des débits pour les comptes commençant par 601...

Mais voilà... ça ne fonctionne pas... La fonction me retourne toujours 0...
du moins quand je l'utilise dans une cellule... :-/

Merci d'avance pour votre aide
--

@+
HD

6 réponses

Avatar
isabelle
bonjour Hd,

à la place de
Loop Until Cells(i, 1).Value = ""

ce ne serait pas
Loop Until Cells(i, 3).Value = ""

isabelle

HD a écrit :
Bonjour,

Je voudrais réaliser une fonction personnalisée... mais celle ci ne me
retourne 0 dès que je l'utilise dans mon classeur alors qu'elle fonctionne
lorsque je la lance à partir d'une macro...

Voilà ma macro :

Public Function Débit(nCpt As String) As Double
Dim i As Long
Dim TDeb
TDeb = 0
i = 1

Do
If Left(ActiveWorkbook.Sheets("écritures").Cells(i, 3).Value,
Len(nCpt)) = nCpt Then
TDeb = TDeb + ActiveWorkbook.Sheets("écritures").Cells(i,
6).Value
End If
i = i + 1
Loop Until Cells(i, 1).Value = ""
Débit = TDeb
End Function

J'ai en fait une feuille "écritures" avec des écritures comptables. Je
recherche le total débit (en colone 6) de tout les comptes (en colone 3)
commençant par nCpt. Exemple :
= Débit ("601")
Je cherche ici le total des débits pour les comptes commençant par 601...

Mais voilà... ça ne fonctionne pas... La fonction me retourne toujours 0...
du moins quand je l'utilise dans une cellule... :-/

Merci d'avance pour votre aide



Avatar
isabelle
bonjour Hd,

Public Function Débit(plage As Range, nCpt As String) As Double
Dim TDeb
TDeb = 0
For Each c In plage
If Left(c, Len(nCpt)) = nCpt Then TDeb = TDeb + Cells(c.Row, 6)
Next
Débit = TDeb
End Function

=Débit(C1:C20;"601")

isabelle

HD a écrit :
Bonjour,

Je voudrais réaliser une fonction personnalisée... mais celle ci ne me
retourne 0 dès que je l'utilise dans mon classeur alors qu'elle fonctionne
lorsque je la lance à partir d'une macro...

Voilà ma macro :

Public Function Débit(nCpt As String) As Double
Dim i As Long
Dim TDeb
TDeb = 0
i = 1

Do
If Left(ActiveWorkbook.Sheets("écritures").Cells(i, 3).Value,
Len(nCpt)) = nCpt Then
TDeb = TDeb + ActiveWorkbook.Sheets("écritures").Cells(i,
6).Value
End If
i = i + 1
Loop Until Cells(i, 1).Value = ""
Débit = TDeb
End Function

J'ai en fait une feuille "écritures" avec des écritures comptables. Je
recherche le total débit (en colone 6) de tout les comptes (en colone 3)
commençant par nCpt. Exemple :
= Débit ("601")
Je cherche ici le total des débits pour les comptes commençant par 601...

Mais voilà... ça ne fonctionne pas... La fonction me retourne toujours 0...
du moins quand je l'utilise dans une cellule... :-/

Merci d'avance pour votre aide



Avatar
isabelle
ou bien,

=Débit(écritures!$C$1:$C$20;"601")

isabelle

HD a écrit :
Bonjour,

Je voudrais réaliser une fonction personnalisée... mais celle ci ne me
retourne 0 dès que je l'utilise dans mon classeur alors qu'elle fonctionne
lorsque je la lance à partir d'une macro...

Voilà ma macro :

Public Function Débit(nCpt As String) As Double
Dim i As Long
Dim TDeb
TDeb = 0
i = 1

Do
If Left(ActiveWorkbook.Sheets("écritures").Cells(i, 3).Value,
Len(nCpt)) = nCpt Then
TDeb = TDeb + ActiveWorkbook.Sheets("écritures").Cells(i,
6).Value
End If
i = i + 1
Loop Until Cells(i, 1).Value = ""
Débit = TDeb
End Function

J'ai en fait une feuille "écritures" avec des écritures comptables. Je
recherche le total débit (en colone 6) de tout les comptes (en colone 3)
commençant par nCpt. Exemple :
= Débit ("601")
Je cherche ici le total des débits pour les comptes commençant par 601...

Mais voilà... ça ne fonctionne pas... La fonction me retourne toujours 0...
du moins quand je l'utilise dans une cellule... :-/

Merci d'avance pour votre aide



Avatar
HD
Ouille...

J'ai trouvé pourquoi ça bloquait... cela venait de la condition de ma
boucle... comme quoi, l'on cherche parfois bien compliqué alors que la
solution est sous notre nez...

@+
HD
Avatar
Caetera
> J'ai trouvé pourquoi ça bloquait... cela venait de la condition de ma
boucle... comme quoi, l'on cherche parfois bien compliqué alors que la
solution est sous notre nez...



***************

Une fonction personnalisée écrite avec des plages en dur et sans variables, ça
n'a pas de sens...
Pour ce cas de figure et avec des plages nommées il suffit de ça :

=SOMMEPROD((GAUCHE(comptes;3)="601")*débits)

http://www.cijoint.fr/cjlink.php?file=cj200906/cijFZkjrKm.xls

Etc
Avatar
HD
> Une fonction personnalisée écrite avec des plages en dur et sans
variables, ça n'a pas de sens...


Cette plage est amenée à voir très régulièrement bouger ses données... les
données récupérées proviennent d'une base de donnée SQL. Et si je passe par
des fonctions Débit() ou Crédit() c'est aussi et surtout pour reprendre tel
que les paramètres des fonctions OLE d'un autre logiciel... Ainsi les
fonctions OLE Débit et Crédit seront remplacées par les fonctions du même
nom mais provenant d'une macro complémentaire... Ainsi tout sera directement
compatible.

Mais la formule que vous m'avez fournie est très intéressante... Il est donc
probable que je la réutilise.

Merci à vous tous ;-)

--
@+
HD