Fonction personnalisée avec boucle "tant que"

Milou44

XLDnaute Nouveau
Bonjour à tous,

Je rencontre la problématique suivante :
Dans un tableau composé de 4 colonnes et de x lignes, je souhaite récuperer dans la 4 colonne une valeur contenue dans la seconde colonne.
On peut résumer l'algorythme ainsi (je vous joins deux tableaux exemple pour illustrer cela):
- la cellule colonne B sur la même ligne que la cellule dans la colonne D et où est calculée la fonction personnalisée soit vide ou égale à 0 soit pleine
- je souhaite que dans ma cellule colonne D s'incrive la dernière valeur d'un bloc de cellule pleine en colonne B

Je pense que les deux tableaux sont assez parlants.

En débutante que je suis et après plusieurs visites dans les différentes discussions de ce forum et l'aide excel, j'ai donc tapé le code VBA suivant :

Public Function essai(toto As Range) As Range

Application.Volatile

Sub test()
'
' test Macro
Dim i As Integer
Dim j As Integer
i = toto.Row
j = toto.Column

Do While Range(i, j - 3).Value <= 0
i = i + 1
Loop 'descend jusqu'à trouver une cellule non vide
Do While Range(i, j - 3).Value > 0
i = i + 1
Loop 'descend jusqu'à retomber sur une cellule vide
essai = Range(i, j).Value

End Sub
End Function


Bon j'imagine que certains doivent trouver ça ridicule mais bon c'est en forgeant qu'on devient forgeron.
Lorsque je teste l'exécution dans le VBA, j'ai la fenêtre "erreur compilation argument non facultatif" qui apparaît avec "essai =" surligné en bleu.

Je vous remercie tous par avance pour vos conseils et votre aide,
 

Pièces jointes

  • Exemple tableau Milou44.xlsx
    10 KB · Affichages: 54

JNP

XLDnaute Barbatruc
Re : Fonction personnalisée avec boucle "tant que"

Bonjour Milou44 et bienvenue, Bernard :),
Euh, belle salade de saison :p...
On ne mets pas une Sub dans une Function :rolleyes:...
C'est Cells(1, 1) mais Range("A1") :eek:...
Bref, une correction de ton code pour que tu essaie de mieux comprendre ;)
Code:
Public Function essai(toto As Range) As Range
Application.Volatile
'
' test Macro
Dim i As Integer
Dim j As Integer
i = toto.Row
j = toto.Column
Do While Cells(i, j - 3).Value <= 0
i = i + 1
Loop 'descend jusqu'à trouver une cellule non vide
Do While Cells(i, j - 3).Value > 0
i = i + 1
Loop 'descend jusqu'à retomber sur une cellule vide
Set essai = Range("i" & j)
End Function
Sub test()
Range("j1") = essai(Range("i3")).Value
End Sub
Mais bon, c'est juste pour t'aider à forger :D
Bises :cool:
 

Milou44

XLDnaute Nouveau
Re : Fonction personnalisée avec boucle "tant que"

Bonjour JNP,

Et merci pour tous tes conseils qui m'ont bien éclairé sur toutes les erreurs!
Comme on dit chez moi, je me coucherai bien moins bête ce soir!
Sinon, comme on est censé arriver dans les beaux jours, j'ai trouvé très à propos ta métaphore comparant mon "semblant" de code à une salade!
J'adore!
Encore merci!
 

Milou44

XLDnaute Nouveau
Re : Fonction personnalisée avec boucle "tant que"

Bonjour Hervé62,

Je viens de finir de comprendre la macro que tu m'as si gentiment fait parvenir.
en fait je ne connaissais pas la notion de End(xlUp).Row pour définir quand sortir de la boucle.
C'est pour ça que j'avais essayé avec une boucle type "tant que".
Merci beaucoup pour ton aide très précieuse.
 

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 016
dernier inscrit
Mokson