VBA fonction reference cellule

sebgacs

XLDnaute Nouveau
Bonjour,

Je cherche à créer une fonction VBA à appeler dans excel, qui, à partir d'une cellule argument, renvoie la valeur de la bonne cellule correspondante. c'est à dire celle sur la même ligne et sur la bonne colonne.

J'ai un peu de mal à expliquer le mon problème, j'espère être suffisamment explicite.
J'ai détaillé le problème dans le doc ci-joint.

étant novice vba, je ne vais pas détailler, je n'ai rien d'abouti, juste des essais tous ratés sur des petits bouts du problème.
Je pense juste qu'il faut démarrer avec une structure de ce type:
______________________
Function Bonneref (imput As Range) As Range
'...........
'là je n'arrive pas à rechercher la bonne colonne par rapport à la cellule de l'imput
'..........
End function
____________________

Je vous remercie pour vos réponses.

ps: je travaille en 2010

ps: j'ai parcouru plusieurs postes un petit peu en lien avec mon sujet mais partiellement. Je me suis donc permis de créer un nouveau poste, merci de m'indiquer si il faut le déplacer, changer l'intitulé ou autre

à bientot
Seb
 

Pièces jointes

  • bonref_mois_semaine.xls
    51 KB · Affichages: 54
  • bonref_mois_semaine.xlsm
    15.4 KB · Affichages: 68

kjin

XLDnaute Barbatruc
Re : VBA fonction reference cellule

Bonjour,
Salut Pierrejean :), tu as mis le décodeur en route ?! :D

Function Bonneref (imput As Range) As Range
Je vois 1 argument...
fichier joint à dit:
si je me place en G14: j'aurais une formule quelconque (ici évolution du nb de stylos) (notée f) dont les arguments sont :
=>la valeur en G13
=>et la valeur en ?13
...et là 2...Mystère...
fichier joint à dit:
(? étant la période précédente similaire (ici S24) donc F)
...et il s'épaissi encore
Merci de reformuler en langage simple en indiquant clairement dans le fichier le résultat attendu
Note qu'il existe la fonction DECALER native dans excel
A+
kjin
 

sebgacs

XLDnaute Nouveau
Re : VBA fonction reference cellule

Bonjour,
merci à tous les deux pour vos réponses,
bien vu que je n'ai pas été clair du tout!
J'ai un petit peu avancé, mon code de base fonctionne: celui ci renvoi le bon numéro de colonne:
Function Bonneref(Imput As Range) As Double

Dim numcol As Double
Dim parcourt As Double

numcol = Imput.Column

If (Len(Cells(1, numcol)) = 10) Then
parcourt = numcol
Do
parcourt = parcourt - 1
Loop While Len(Cells(1, (parcourt))) <> 10
Bonneref = parcourt
Else
If (Len(Cells(1, (numcol - 1))) = 10) Then
Bonneref = numcol - 2
Else
Bonneref = numcol - 1
End If
End If
End Function


maintenant je voudrai qu'il renvoi la cellule associé à la ligne de "imput" avec la colonne "bonneref"

J'essaye de partir d'un exemple plus simple, pour l'intégrer à mon code principal:
Renvoyer la cellule située à droite et en bas de la cellule d'entrée. par exemple si je mets: =test(A1)
il faudrait que le résultat soit: B2


Function test(entree As Range) As Range
test = entree.Offset(1, 1).Cells
End Function

je ne comprends pas pourquoi ces lignes ne marchent pas.
merci pour votre aide et vos conseils
j'espère que mon explication est plus précise...

sincères remerciements
 

sebgacs

XLDnaute Nouveau
Re : VBA fonction reference cellule

Je cherche à faire une formule personnalisée qui fasse:

Renvoyer la cellule située à droite et en bas de la cellule d'entrée.

par exemple en D4 si je mets: =test(A1)
il faudrait que le résultat soit: B2

je pense que c'est plus clair. fichier joint
 

Pièces jointes

  • renvoi cellule.xlsm
    13 KB · Affichages: 46
  • renvoi cellule.xlsm
    13 KB · Affichages: 49
  • renvoi cellule.xlsm
    13 KB · Affichages: 49

kjin

XLDnaute Barbatruc
Re : VBA fonction reference cellule

Re,
Function test(entree As Range) As Range
test = entree.Offset(1, 1).Cells
End Function
C'est un gag puisque la fonction dois renvoyer du texte !
Code:
Function renvoi$(c As Range, x&, y&)
renvoi = c.Offset(x, y).Address(0, 0)
End Function
ce qui donne dans ta feuille
Code:
=renvoi(A1;1;1)
Tu peux te passer des arguments x et y si le décalage est toujours le même et l'indiquer directement dans le code de ta fonction
Note que...
Code:
ADRESSE(LIGNE(A1)+1;COLONNE(A1)+1;4)
...renvoie la même chose
A+
kjin
 

sebgacs

XLDnaute Nouveau
Re : VBA fonction reference cellule

Aaah oui d'accord
merci Kjin :)

je crois que je confonds les types
et c'est toujours flou pour moi...

J'ai reformulé l'ensemble de mon problème dans le fichier ci-joint
je pense être arrivé à quelque chose de plus explicite.

(je pense que Bonneref doit renvoyer une cellule quand Bonneref est utilisé à l'intérieur d'une formule mais faut-il renvoyer une adresse ou la valeur contenue dans la cellule?)

merci pour ta patience Kjin
 

Pièces jointes

  • Bonneref_evolution.xlsm
    21.8 KB · Affichages: 49
  • Bonneref_evolution.xlsm
    21.8 KB · Affichages: 54
  • Bonneref_evolution.xlsm
    21.8 KB · Affichages: 52

sebgacs

XLDnaute Nouveau
Re : VBA fonction reference cellule

ça y est j'y suis arrivé !! :) :D

il fallait que j'utilise Set et cells.

ça parait pas mais rien que de formuler mon problème m'a aidé ^^

voici le résultat

merci pour votre aide
A +
 

Pièces jointes

  • Bonneref_evolution.xlsm
    21.7 KB · Affichages: 59
  • Bonneref_evolution.xlsm
    21.7 KB · Affichages: 61
  • Bonneref_evolution.xlsm
    21.7 KB · Affichages: 65

sebgacs

XLDnaute Nouveau
Re : VBA fonction reference cellule

je peux même le faire en une seule fonction
Function evolution(Imput As Range) As Double

Dim Bonneref As Range
Dim numcol As Double
Dim parcourt As Double

numcol = Imput.Column

If (Len(Cells(1, numcol)) = 10) Then
parcourt = numcol
Do
parcourt = parcourt - 1
Loop While Len(Cells(1, (parcourt))) <> 10

Set Bonneref = Cells(Imput.Row, parcourt)

Else
If (Len(Cells(1, (numcol - 1))) = 10) Then
Set Bonneref = Cells(Imput.Row, (numcol - 2))
Else
Set Bonneref = Cells(Imput.Row, (numcol - 1))
End If
End If

Dim maxi As Double
Dim mini As Double

maxi = Application.WorksheetFunction.Max(Imput, Bonneref)
mini = Application.WorksheetFunction.Min(Imput, Bonneref)

If (Imput > Bonneref) Then
evolution = (1 - (mini / maxi))
Else
evolution = ((mini / maxi) - 1)
End If

End Function

Extase solitaire ... :)
hehehe
 

Discussions similaires

Réponses
12
Affichages
576

Statistiques des forums

Discussions
312 555
Messages
2 089 557
Membres
104 211
dernier inscrit
clubdesjeunesdela7