Nombre de lignes dans une variable tableau
Fermé
Voici le code de la fonction personnalisée :
Function ArrM4(Montant As Variant) As Variant
Dim j As Integer
j = Montant.Count
ArrM4 = Application.Sum(Montant) * j
End Function
Quand l'argument Montant est une plage simple d'une feuille de calcul du type A1:A100 cette version fonctionne mais quand l'argument est un peu plus complexe : du type (A1:A100)*(A1:100>100) alors pour que ça fonctionne je dois remplacer j = Montant.Count par j = Ubound(Montant) (qui ne marche pas avec la plage simple pour sa part).
Je suis un peu perdu. J'ai bien essayé de faire un If IsError ... mais il ne veut rien savoir -> #VALEUR!
Merci de votre aide
Function ArrM4(Montant As Variant) As Variant
Dim j As Integer
j = Montant.Count
ArrM4 = Application.Sum(Montant) * j
End Function
Quand l'argument Montant est une plage simple d'une feuille de calcul du type A1:A100 cette version fonctionne mais quand l'argument est un peu plus complexe : du type (A1:A100)*(A1:100>100) alors pour que ça fonctionne je dois remplacer j = Montant.Count par j = Ubound(Montant) (qui ne marche pas avec la plage simple pour sa part).
Je suis un peu perdu. J'ai bien essayé de faire un If IsError ... mais il ne veut rien savoir -> #VALEUR!
Merci de votre aide
A voir également:
- Excel vba nombre de lignes d'un tableau
- Trier un tableau excel - Guide
- Tableau word - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Tableau ascii - Guide
- Liste déroulante excel - Guide
3 réponses
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 257
Modifié par eriiic le 14/04/2015 à 15:49
Modifié par eriiic le 14/04/2015 à 15:49
Bonjour,
Tu es sûr ça marche avec (A1:A100)*(A1:100>100) ?
Ca donne une matrice dont ta fonction ne voit que le 1er terme (?)
Et on ne voit pas trop le rapport entre les 2 calculs...
Quoiqu'il en soit avec ce que tu fournis pour différencier les deux tu peux essayer avec :
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Tu es sûr ça marche avec (A1:A100)*(A1:100>100) ?
Ca donne une matrice dont ta fonction ne voit que le 1er terme (?)
Et on ne voit pas trop le rapport entre les 2 calculs...
Quoiqu'il en soit avec ce que tu fournis pour différencier les deux tu peux essayer avec :
Function ArrM4(Montant As Variant) As Variant Dim j As Integer If IsArray(Montant) Then j = Montant.Count Else j = UBound(Montant) End If ArrM4 = Application.Sum(Montant) * j End Function
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
14 avril 2015 à 15:50
14 avril 2015 à 15:50
Bonjour
Comme tu n'as pas eu de retour depuis hier, je crois que ta demande n'est pas très claire.
Peux tu envoyer un bout de fichier, avec ta macro, au format excel 2003 sur cjoint.com et joindre le lien à ton prochain message. N'oublies pas d'y ajouter des explications sur ce que la fonction ArrM4 doit calculer et surtout à partir de quoi, et bien sur des exemples de résultat attendu
Cdlmnt
Comme tu n'as pas eu de retour depuis hier, je crois que ta demande n'est pas très claire.
Peux tu envoyer un bout de fichier, avec ta macro, au format excel 2003 sur cjoint.com et joindre le lien à ton prochain message. N'oublies pas d'y ajouter des explications sur ce que la fonction ArrM4 doit calculer et surtout à partir de quoi, et bien sur des exemples de résultat attendu
Cdlmnt
Merci pour vos retours, j'ai finalement trouvé la solution ou une solution : j'ai déclaré une nouvelle variable de type tableau Variant, j'alimente celle-ci avec la plage argument Montant et ainsi il arrive toujours à calculer le Ubound de ce nouveau tableau, je pense que c'est un problème de format.