|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 176 ![]() |
Bonjour tout le monde,
Après lecture du lien ci-dessous (et je dois l'avouer, peu de compréhension de ce qui y est décrit http://silkyroad.developpez.com/VBA/LesVariables/#LIV J'ai créé une bête fonction dont l'objectif est de renvoyer le numéro de la dernière ligne non vide d'un tableau : Code :
Code :
dlo = derniereLigneOccupee(range("B10")) dont le code est le suivant : Code :
Je ne trouve pas d'où provient l'erreur, d'autant plus que l'utilisation du résultat "dlo" ne pose aucun souci quand je l'utilise avec une autre fonction.. Merci d'avance de vos explications
|
||||
|
|
00
|
|
|
#2 | |
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
Bonjour,
Comment est définie la variable "dlo" ? A tout hasard, modifie les lignes suivantes : Code :
Function derniereLigneOccupee(cel As range) as Long Code :
Function calculSommeDistanceModePose(nomb As Long) as Long
__________________
Cordialement. Daniel Citation:
|
|
|
20
|
|
|
#3 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 176 ![]() |
Merci de ta réponse !
Avant calcul de dlo, j'ai défini dlo as long. Avec les modifications que tu suggères, l'erreur se transforme en "400", ce qui me laisse penser à un mauvais appel de fonction. Tout semble bien orthographié cependant.. Edit : Si j'enlève le , on retombe sur l'erreur "byref", localisée à l'appel de la fonction |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
L'erreur se produit sur quelle ligne ?
__________________
Cordialement. Daniel Citation:
|
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 176 ![]() |
Cf poste édité ci-dessus, à l'appel de la fonction calculSommeDistanceModePose :
|
|
|
00
|
|
|
#6 | |
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
Rectifie la ligne suivante :
Code :
calculSommeDistanceModePose = calculSommeDistanceModePose + Range("B4").Offset(i - 1 - 4, 0).Value * Range("d4").Offset(i - 1 - 4, 0).Value renvoie à la ligne 0 pour i=1
__________________
Cordialement. Daniel Citation:
|
|
|
20
|
|
|
#7 | ||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 176 ![]() |
Bien vu, merci de la peine que tu t'est donnée !
Après légère modification du code, la fonction ressemble à ça : Code :
Merci encore |
||
|
|
00
|
|
|
#8 | |||||
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
Telle qu'elle est conçue, la fonction "derniereLigneOccupee" renvoie le dernière ligne occupée au dessus de B4. Est-ce ce que tu veux ? Si tu veux la dernière ligne occupée au dessous de B4 (puisque dlo vaut au minimum 5), il faut mettre :
Code :
Code :
__________________
Cordialement. Daniel Citation:
|
|||||
|
20
|
|
|
#9 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 176 ![]() |
Merci beaucoup pour ton aide !
|
|
|
00
|
|
|
#10 | ||||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 176 ![]() |
(Re) bonjour,
Le même message d'erreur apparaît pour le bout de code suivant, à la dernière ligne, au niveau du "destinationArrivee". A croire que je n'ai pas bien compris le concept d'indexation ! J'ai du mal à m'expliquer pourquoi une erreur est possible au niveau de destinationArrivee, sachant que la variable est initialisée au début du code.. Code :
Code :
Merci d'avance de votre aide
|
||||
|
|
00
|
|
|
#11 | ||||||
![]() ![]() |
Bonjour , quelques remarques :
Tout d'abord (c'est pas la solution à ton problème ...) : Il ne faut jamais utiliser Range(...) sans rien devant il faut toujours le préfixer avec la feuille concernée... par exemple : Code :
Code :
Autre règle : il faut déclarer toutes les variables (pour ne pas en oublier rajoute Toujours la ligne Option Explict en haut de toutes tes pages de codes.) Pour ton problème pour obtenir une référence à ta plage il faut que ta variable soit de type range et tu l'affecte avec l'instruction Set : Code :
Ta fonction ne renvoyant rien transforme la en procédure en remplaçant Function par Sub ... tu peu conserver ton appel avec le Call sans problèmes..
__________________
page à bbil : dernières entrées : Débuter en VB6 Mes contributions en téléchargement Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI Impératif "A LIRE AVANT DE POSTER"
|
||||||
|
10
|
|
|
#12 | |||
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
Bonjour,
Tu as défini le troisième argument de ta fonction en tant que Range, or : renvoie la valeur de H11 dans destinationArrivee. D'autre part, tu appelles la fonction comme une macro et tu ne récupères nulle part le résultat. Un exemple d'utilisation est le suivant : Code :
__________________
Cordialement. Daniel Citation:
|
|||
|
10
|
|
|
#13 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 176 ![]() |
Génial merci à vous 2, mon code fonctionne déjà mieux, et remplit désormais les règles principales décrites par bbil
Merci encore
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com