Appel plage de cellules par une fonction/feuille différente
robert.perrin8
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
robert.perrin8 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
robert.perrin8 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Appel plage de cellules par une fonction/feuille différente
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Fonction si et - Guide
- Appel privé - Guide
- Bruler feuille de laurier - Guide
- Feuille de pointage excel - Télécharger - Tableur
4 réponses
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.
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.
Re,
Avez-vous mis le nom de la feuille devant la plage de cellules,
ex:=MaxiA(Feuil2!A1:A12;.........)
A+
Avez-vous mis le nom de la feuille devant la plage de cellules,
ex:=MaxiA(Feuil2!A1:A12;.........)
A+
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
> 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
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+
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+
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+