OVH Cloud OVH Cloud

fonction qui fait réf à la cellule sur laquelle elle se trouve

3 réponses
Avatar
Bob le retour
Bonjour,
Je dois créer une fonction VBA qui calcule le nombre de fois où la
chaîne "toto" est utilisée sur la ligne sur laquelle se trouve cette
fonction. Mais impossible de trouver la commande qui correspond à la
cellule sur laquelle est la fonction.

Exemple :


en (3,3), je place ma fonction. Elle me donne le nombre de fois où on
trouve toto sur la plage (3,4)-(3,30)


Merci !

3 réponses

Avatar
Alain CROS
Bonjour

Function Nbtoto()
Dim Base$
Application.Volatile
Base = Application.Caller.Address
'Si les cellules contiennent seulement "toto"
'Nbtoto = Application.WorksheetFunction.CountIf(Range(Range(Base).Offset(, 1).Address & _
":" & Range(Base).Offset(, 27).Address), "=toto")
'Si les cellules contiennent une phrase contenant "toto"
Nbtoto = Application.WorksheetFunction.CountIf(Range(Range(Base).Offset(, 1).Address & _
":" & Range(Base).Offset(, 27).Address), "=*toto*")
End Function

Alain CROS

"Bob le retour" a écrit dans le message de news:
Bonjour,
Je dois créer une fonction VBA qui calcule le nombre de fois où la
chaîne "toto" est utilisée sur la ligne sur laquelle se trouve cette
fonction. Mais impossible de trouver la commande qui correspond à la
cellule sur laquelle est la fonction.

Exemple :


en (3,3), je place ma fonction. Elle me donne le nombre de fois où on
trouve toto sur la plage (3,4)-(3,30)


Merci !



Avatar
michdenis
Bonjour Bob le retour,

Voici une fonction, elle a 2 limites :

A ) elle ne peut être utilisé plus d'une fois sur la même ligne

B ) Tu ne peux l'utiliser en colonne A à moins de modifier la procédure afin d'éviter les références circulaires

Texte = la chaîne de caractères que tu recherches sur la ligne
Tu peux utiliser les Jokers * et ? si tu le désires.
Cette fonction n'est pas sensible à la case

Dans la cellule tu l'appelles de cette façon : =Nombre("Toto")


'-----------------------------
Function Nombre(Texte As String)

Application.Volatile
Dim Adr As String, Rg1 As Range, Rg2 As Range
Dim C As Variant, Rg3 As Range, A As Double
Adr = Application.Caller.Address

If Range(Adr).Column > 1 Then
C = Range(Adr).Column - 1
End If
lig = Range(Adr).Row
Set Rg1 = Range(Cells(lig, 1), Cells(lig, C))
Set Rg2 = Range(Cells(lig, C + 2), Cells(lig, 256))

Set Rg3 = Union(Rg1, Rg2)
For Each C In Rg3
If UCase(C.Value) Like UCase(Texte) = True Then
A = A + 1
End If
Next

Nombre = A
Set Rg1 = Nothing: Set Rg2 = Nothing: Set Rg3 = Nothing

End Function
'-----------------------------


Salutations!


"Bob le retour" a écrit dans le message de news:
Bonjour,
Je dois créer une fonction VBA qui calcule le nombre de fois où la
chaîne "toto" est utilisée sur la ligne sur laquelle se trouve cette
fonction. Mais impossible de trouver la commande qui correspond à la
cellule sur laquelle est la fonction.

Exemple :


en (3,3), je place ma fonction. Elle me donne le nombre de fois où on
trouve toto sur la plage (3,4)-(3,30)


Merci !
Avatar
Daniel.M
Hello Bob,

Je crois que les Noms relatifs sont la solution qui te convient.

Tu te places sur C3
Ctrl-F3
Nom: ADroite
Ref à : ÞCALER(C3;0;1;1;27)
OK

Note l'absence de $ dans l'adresse C3.

Désormais, à toutes les fois où tu utilises le nom ADroite, cela te donnera la
plage de 27 cellules à droite de celle dans laquelle tu invoques le nom.

Ensuite, en C3 la formule:
=NB.SI(ADroite;"toto")

Salutations,

Daniel M.


"Bob le retour" wrote in message
news:
Bonjour,
Je dois créer une fonction VBA qui calcule le nombre de fois où la
chaîne "toto" est utilisée sur la ligne sur laquelle se trouve cette
fonction. Mais impossible de trouver la commande qui correspond à la
cellule sur laquelle est la fonction.

Exemple :


en (3,3), je place ma fonction. Elle me donne le nombre de fois où on
trouve toto sur la plage (3,4)-(3,30)


Merci !