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

Fermé
robert.perrin8 Messages postés 4 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 10 janvier 2013 - 8 janv. 2013 à 13:18
robert.perrin8 Messages postés 4 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 10 janvier 2013 - 10 janv. 2013 à 17:06
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
A voir également:

4 réponses

Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
9 janv. 2013 à 08:14
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
robert.perrin8 Messages postés 4 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 10 janvier 2013
9 janv. 2013 à 12:06
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
f894009 Messages postés 17267 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 23 mars 2025 1 713
9 janv. 2013 à 08:15
Bonjour,

Cette fonction est appelee comment: en partant d'une cellule, d'un code VBA????
0
robert.perrin8 Messages postés 4 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 10 janvier 2013
9 janv. 2013 à 10:43
Bonjour,
Cette fonction est appelée à partir d'une cellule.
Merci
Robert PERRIN
0
f894009 Messages postés 17267 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 23 mars 2025 1 713
9 janv. 2013 à 11:00
Re,
Avez-vous mis le nom de la feuille devant la plage de cellules,

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

A+
0
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
10 janv. 2013 à 14:08
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
robert.perrin8 Messages postés 4 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 10 janvier 2013
10 janv. 2013 à 17:06
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