Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Dranreb

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

Bonjour
Set essai = Range(i, j)
ou alors
essai = Range(i, j).Value
mais dans ce cas il ne faut pas déclarer la valeur rendue par la fonction As Range.
Cordialement
 

JNP

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

Bonjour Milou44 et bienvenue, Bernard ,
Euh, belle salade de saison ...
On ne mets pas une Sub dans une Function ...
C'est Cells(1, 1) mais Range("A1") ...
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
Bises
 

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.
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…