Appel plage de cellules par une fonction/feuille différente

Bonjour,

J'ai programmé cette fonction VB EXCEL qui appelle une plage de cellules. Elle donne un mauvais résultat si cette plage n'est pas dans la feuille qui appelle la fonction, alors que je lui donne la bonne adresse de plage. Je ne sais pas s'il faut activer la feuille de la plage ni comment le faire.
Function MaxiA(plage As Range, vent, direction, angle1, angle2, polaire) As String '
Dim li
Dim chaine As String
Dim vitesse As Single
Dim anglei As Single
Dim bat As Single
Worksheets(polaire).Activate
anglei = 181
i = 0
vMax = 0
vitesse = 0
anglei = 181
For Each li In plage
i = i + 1
anglei = anglei - 1
If (anglei <= angle2) And (anglei >= angle1) Then
bat = anglei + vent - 360
vitesse = Abs(Range("A" & (li.Row)) * Cos((bat - direction) * 3.14159265359 / 180))
'chaine = chaine & "v" & Int(vitesse * 1000) / 1000
'chaine = chaine & "i" & i
If (vitesse > vMax) Then
vMax = vitesse
iMax = i
angleMax = anglei
End If
End If
Next li
vMax = Int(vMax * 1000) / 1000
bat = angleMax + vent - 360
MaxiA = "d" & bat & "v" & vMax & "a" & angleMax
'MaxiA = chaine
End Function

4 réponses

  1. Bonjour robert.perrin8,

    Deux méthodes existent pour cette situation:
    1° - Il faut ajouter le nom de la feuille:
    Worksheets(polaire).Activate, si polaire est une variable
    Worksheets("polaire").Activate, si polaire est le nom de l'onglet
    2° - Travailler avec une plage nommée. Il faut déclarer les cellules dans une plage à laquelle on donne un nom. Il suffit ensuite de nommer le nom de cette plage pour y faire référence.
    0
    1. Bonjour,

      J'ai fait les essais suivants

      p19_4 est le nom attribué à la plage de cellules
      19,4 est la feuille où se trouve la plage de cellules
      sans instruction Worksheets.Activate =maxia('19,4'!A3:A183;337;0;50;90;) résultat : accés à la plage dans la mauvaise feuille (feuille d'appel de la fonction)
      sans instruction Worksheets.Activate =maxia(p19_4;337;0;50;90;) résultat : accés à la plage dans la mauvaise feuille (feuille d'appel de la fonction)
      sans instruction Worksheets.Activate =maxia("p19_4";337;0;50;90;) résultat : #valeur
      avec instruction Worksheets.Activate =maxia(p19_4;337;0;50;90;"p19,4") résultat : #valeur
      avec instruction Worksheets.Activate =maxia(A3:A183;337;0;50;90;"p19,4") résultat : #valeur
      avec instruction Worksheets.Activate =maxia('19,4'!$A$3:$A$183;337;0;50;90;"p19,4") résultat : #valeur

      A+
      0
  2. Bonjour,

    Cette fonction est appelee comment: en partant d'une cellule, d'un code VBA????
    0
    1. Bonjour,
      Cette fonction est appelée à partir d'une cellule.
      Merci
      Robert PERRIN
      0
  3. Re,
    Avez-vous mis le nom de la feuille devant la plage de cellules,

    ex:=MaxiA(Feuil2!A1:A12;.........)

    A+
    0
    1. Bonjour à tous,

      > robert
      Peux tu envoyer ton fichier au format excel 2003 (ou une partie exploitable) sur cjoint.com et joindre le lien obtenu à ton prochain message.
      N'oublies pas d'y joindre quelques exemples (données+résultat attendu) de ce que tu veux obtenir

      Bonne suite
      0
      1. Merci pour ton aide,

        En voulant te préparer ce fichier, j'ai fait beaucoup de tests et par hasard, parce que je ne connais pas VB, j'ai trouvé une solution :

        vitesse = Abs(Worksheets(polaire).Range("A" & (li.Row)) * Cos((bat - direction) * 3.14159265359 / 180))

        où polaire est un argument de la fonction qui contient le nom de la feuille appelée.

        Merci à tous ceux qui ont pris le temps de m'aider.

        A+
        0