Fonction personnalisée...

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #19550171
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



isabelle
Le #19550161
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



isabelle
Le #19550151
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



HD
Le #19550131
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
Caetera
Le #19550551
> 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
HD
Le #19571261
> 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
Publicité
Poster une réponse
Anonyme