J'ai un probleme sur lequel je bute depuis des heures.
Je souhaite ecrire une fonction abcd dans un premier onglet A, qui doit acceder
a des donnees qui sont dans un autre onglet B.
Je commence par recopier ces donnees dans une variable tableau, pour travailler
directement avec cette variable.
Cela donne le code suivant qui ne fonctionne pas :
Function abcd(ppp As Integer) As Integer
'Selectionner dans l'onglet B toute la plage de cellules
Sheets(2).Select
valeurs = Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row, 11)).Value
'Mes traitements ici
abcd = resultat_de_mes_traitements
End Function
L'instruction sheets(2).select ne fait rien, alors que dans une procedure, elle
fonctionne.
Est-ce une limitation inherente aux fonctions, et si oui, existe-t-il un moyen
de l'eviter ?
Faire une seule instruction :
Valeurs = Sheets(2).Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row,
11)).Value
Ne donne rien ou plante : erreur 1004.
J'ai (mal ?) lu les faq et (mal ?) epluche google, mais sans succes.
Merci.
--
Ce message a ete poste via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr
remplacé avntageusement par valeurs = Sheets(2).Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row, 11)).Value
-- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel "CB" a écrit dans le message de news:
Bonjour,
J'ai un probleme sur lequel je bute depuis des heures.
Je souhaite ecrire une fonction abcd dans un premier onglet A, qui doit acceder
a des donnees qui sont dans un autre onglet B. Je commence par recopier ces donnees dans une variable tableau, pour travailler
directement avec cette variable.
Cela donne le code suivant qui ne fonctionne pas :
Function abcd(ppp As Integer) As Integer 'Selectionner dans l'onglet B toute la plage de cellules Sheets(2).Select valeurs = Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row, 11)).Value
'Mes traitements ici abcd = resultat_de_mes_traitements End Function
L'instruction sheets(2).select ne fait rien, alors que dans une procedure, elle
fonctionne. Est-ce une limitation inherente aux fonctions, et si oui, existe-t-il un moyen
de l'eviter ?
Faire une seule instruction : Valeurs = Sheets(2).Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row,
11)).Value
Ne donne rien ou plante : erreur 1004.
J'ai (mal ?) lu les faq et (mal ?) epluche google, mais sans succes.
Merci.
-- Ce message a ete poste via la plateforme Web club-Internet.fr This message has been posted by the Web platform club-Internet.fr
remplacé avntageusement par
valeurs = Sheets(2).Range(Cells(2, 1),
Cells(Range("A65356").End(xlUp).Row, 11)).Value
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"CB" <cb@cb.fr> a écrit dans le message de news:
200433-15141-922829@foorum.com...
Bonjour,
J'ai un probleme sur lequel je bute depuis des heures.
Je souhaite ecrire une fonction abcd dans un premier onglet A, qui doit
acceder
a des donnees qui sont dans un autre onglet B.
Je commence par recopier ces donnees dans une variable tableau, pour
travailler
directement avec cette variable.
Cela donne le code suivant qui ne fonctionne pas :
Function abcd(ppp As Integer) As Integer
'Selectionner dans l'onglet B toute la plage de cellules
Sheets(2).Select
valeurs = Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row,
11)).Value
'Mes traitements ici
abcd = resultat_de_mes_traitements
End Function
L'instruction sheets(2).select ne fait rien, alors que dans une procedure,
elle
fonctionne.
Est-ce une limitation inherente aux fonctions, et si oui, existe-t-il un
moyen
de l'eviter ?
Faire une seule instruction :
Valeurs = Sheets(2).Range(Cells(2, 1),
Cells(Range("A65356").End(xlUp).Row,
11)).Value
Ne donne rien ou plante : erreur 1004.
J'ai (mal ?) lu les faq et (mal ?) epluche google, mais sans succes.
Merci.
--
Ce message a ete poste via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr
remplacé avntageusement par valeurs = Sheets(2).Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row, 11)).Value
-- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel "CB" a écrit dans le message de news:
Bonjour,
J'ai un probleme sur lequel je bute depuis des heures.
Je souhaite ecrire une fonction abcd dans un premier onglet A, qui doit acceder
a des donnees qui sont dans un autre onglet B. Je commence par recopier ces donnees dans une variable tableau, pour travailler
directement avec cette variable.
Cela donne le code suivant qui ne fonctionne pas :
Function abcd(ppp As Integer) As Integer 'Selectionner dans l'onglet B toute la plage de cellules Sheets(2).Select valeurs = Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row, 11)).Value
'Mes traitements ici abcd = resultat_de_mes_traitements End Function
L'instruction sheets(2).select ne fait rien, alors que dans une procedure, elle
fonctionne. Est-ce une limitation inherente aux fonctions, et si oui, existe-t-il un moyen
de l'eviter ?
Faire une seule instruction : Valeurs = Sheets(2).Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row,
11)).Value
Ne donne rien ou plante : erreur 1004.
J'ai (mal ?) lu les faq et (mal ?) epluche google, mais sans succes.
Merci.
-- Ce message a ete poste via la plateforme Web club-Internet.fr This message has been posted by the Web platform club-Internet.fr
http://forums.club-internet.fr/
CB
Merci pour votre reponse. J'ai deja teste cette solution, sans succes (voir le bas de mon premier message).
Meme dans les procedures (Sub...End Sub) cela ne marche pas (excel 2000), sauf en activant d'abord l'onglet.
J'ai l'impression que les fonctions VBA (function...end function) ne peuvent pas manipuler les onglets s'ils ne sont pas ceux ou elles sont situees.
Est-ce exact ?
Merci. -- Ce message a ete poste via la plateforme Web club-Internet.fr This message has been posted by the Web platform club-Internet.fr
http://forums.club-internet.fr/
Merci pour votre reponse.
J'ai deja teste cette solution, sans succes (voir le bas de mon premier message).
Meme dans les procedures (Sub...End Sub) cela ne marche pas (excel 2000), sauf
en activant d'abord l'onglet.
J'ai l'impression que les fonctions VBA (function...end function) ne peuvent pas
manipuler les onglets s'ils ne sont pas ceux ou elles sont situees.
Est-ce exact ?
Merci.
--
Ce message a ete poste via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr
Bon, je me reponds a moi meme : Voila comment faire : Function aaa(a As Range) valeurs = a.Resize(a.End(xlDown), a.End(xlToRight)).Value End Function
-- Ce message a ete poste via la plateforme Web club-Internet.fr This message has been posted by the Web platform club-Internet.fr
http://forums.club-internet.fr/
Pascal Engelmajer
Salut, on sait pas trop la réponses à quoi !!! car Function b() Dim i As Integer, j As Integer Dim valeurs Dim bb As String '======================================================== Sheets(2).Select valeurs = Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row, 11)).Value '======================================================== For i = 1 To UBound(valeurs) For j = 1 To UBound(valeurs, 2) bb = bb & valeurs(i, j) & "/" Next j, i b = bb End Function
Sub bid() MsgBox b() End Sub fonctionne parfaitement -- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel "CB" a écrit dans le message de news:
Bon, je me reponds a moi meme : Voila comment faire : Function aaa(a As Range) valeurs = a.Resize(a.End(xlDown), a.End(xlToRight)).Value End Function
-- Ce message a ete poste via la plateforme Web club-Internet.fr This message has been posted by the Web platform club-Internet.fr
http://forums.club-internet.fr/
Salut,
on sait pas trop la réponses à quoi !!!
car
Function b()
Dim i As Integer, j As Integer
Dim valeurs
Dim bb As String
'======================================================== Sheets(2).Select
valeurs = Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row,
11)).Value
'======================================================== For i = 1 To UBound(valeurs)
For j = 1 To UBound(valeurs, 2)
bb = bb & valeurs(i, j) & "/"
Next j, i
b = bb
End Function
Sub bid()
MsgBox b()
End Sub
fonctionne parfaitement
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"CB" <cb@cb.fr> a écrit dans le message de news:
200433-211511-478111@foorum.com...
Bon, je me reponds a moi meme :
Voila comment faire :
Function aaa(a As Range)
valeurs = a.Resize(a.End(xlDown), a.End(xlToRight)).Value
End Function
--
Ce message a ete poste via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr
Salut, on sait pas trop la réponses à quoi !!! car Function b() Dim i As Integer, j As Integer Dim valeurs Dim bb As String '======================================================== Sheets(2).Select valeurs = Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row, 11)).Value '======================================================== For i = 1 To UBound(valeurs) For j = 1 To UBound(valeurs, 2) bb = bb & valeurs(i, j) & "/" Next j, i b = bb End Function
Sub bid() MsgBox b() End Sub fonctionne parfaitement -- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel "CB" a écrit dans le message de news:
Bon, je me reponds a moi meme : Voila comment faire : Function aaa(a As Range) valeurs = a.Resize(a.End(xlDown), a.End(xlToRight)).Value End Function
-- Ce message a ete poste via la plateforme Web club-Internet.fr This message has been posted by the Web platform club-Internet.fr
http://forums.club-internet.fr/
xx
Bonjour,
La difficulté que je rencontrais était d'écrire une fonction VBA pouvant être appelée à travailler sur un onglet quelconque. Bien que l'exemple ci-dessous fonctionne, l'onglet est imposé [sheets(2)]. Pour généraliser à toutes les situation possibles, j'avais d'abord tenté de passer en paramètre (de type string) à la fonction le nom de l'onglet, ce qui était source d'erreurs 1004 dans le meilleur des cas, ou alors l'instruction sheet(parametre).Resize(a.End(xlDown), a.End(xlToRight)).Value était purement et simplement ignorée dans le pire des cas.
La solution qui fonctionne est de passer un paramètre de type range :
Function aaa(a As Range) valeurs = a.Resize(a.End(xlDown), a.End(xlToRight)).Value End Function Cette fonction aaa peut ainsi être appelée depuis l'onglet Feuil1, en A1,
par exemple, avec comme paramètre Feuil2!F3.
Le Resize utilisé dans ce test n'est pas l'objet de la difficulté, c'est juste une facilité pour m'éviter de sélectionner l'intégralité des (immenses) zones sur lesquelles travaille la fonction.
Merci de vos réponses.
Le même exemple "Pascal Engelmajer" a écrit dans le message de news:
Salut, on sait pas trop la réponses à quoi !!! car Function b() Dim i As Integer, j As Integer Dim valeurs Dim bb As String '======================================================== > Sheets(2).Select valeurs = Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row, 11)).Value '======================================================== > For i = 1 To UBound(valeurs) For j = 1 To UBound(valeurs, 2) bb = bb & valeurs(i, j) & "/" Next j, i b = bb End Function
Sub bid() MsgBox b() End Sub fonctionne parfaitement -- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel "CB" a écrit dans le message de news:
Bon, je me reponds a moi meme : Voila comment faire : Function aaa(a As Range) valeurs = a.Resize(a.End(xlDown), a.End(xlToRight)).Value End Function
-- Ce message a ete poste via la plateforme Web club-Internet.fr This message has been posted by the Web platform club-Internet.fr
http://forums.club-internet.fr/
Bonjour,
La difficulté que je rencontrais était d'écrire une fonction VBA pouvant
être appelée à travailler sur un onglet quelconque.
Bien que l'exemple ci-dessous fonctionne, l'onglet est imposé [sheets(2)].
Pour généraliser à toutes les situation possibles, j'avais d'abord tenté de
passer en paramètre (de type string) à la fonction le nom de l'onglet, ce
qui était source d'erreurs 1004 dans le meilleur des cas, ou alors
l'instruction
sheet(parametre).Resize(a.End(xlDown), a.End(xlToRight)).Value
était purement et simplement ignorée dans le pire des cas.
La solution qui fonctionne est de passer un paramètre de type range :
Function aaa(a As Range)
valeurs = a.Resize(a.End(xlDown), a.End(xlToRight)).Value
End Function
Cette fonction aaa peut ainsi être appelée depuis l'onglet Feuil1, en A1,
par exemple, avec comme paramètre Feuil2!F3.
Le Resize utilisé dans ce test n'est pas l'objet de la difficulté, c'est
juste une facilité pour m'éviter de sélectionner l'intégralité des
(immenses) zones sur lesquelles travaille la fonction.
Merci de vos réponses.
Le même exemple
"Pascal Engelmajer" <pascal.engelmajer@ilyapa_spam.net> a écrit dans le
message de news: uSxBbUdAEHA.1700@TK2MSFTNGP12.phx.gbl...
Salut,
on sait pas trop la réponses à quoi !!!
car
Function b()
Dim i As Integer, j As Integer
Dim valeurs
Dim bb As String
'======================================================== > Sheets(2).Select
valeurs = Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row,
11)).Value
'======================================================== > For i = 1 To UBound(valeurs)
For j = 1 To UBound(valeurs, 2)
bb = bb & valeurs(i, j) & "/"
Next j, i
b = bb
End Function
Sub bid()
MsgBox b()
End Sub
fonctionne parfaitement
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"CB" <cb@cb.fr> a écrit dans le message de news:
200433-211511-478111@foorum.com...
Bon, je me reponds a moi meme :
Voila comment faire :
Function aaa(a As Range)
valeurs = a.Resize(a.End(xlDown), a.End(xlToRight)).Value
End Function
--
Ce message a ete poste via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr
La difficulté que je rencontrais était d'écrire une fonction VBA pouvant être appelée à travailler sur un onglet quelconque. Bien que l'exemple ci-dessous fonctionne, l'onglet est imposé [sheets(2)]. Pour généraliser à toutes les situation possibles, j'avais d'abord tenté de passer en paramètre (de type string) à la fonction le nom de l'onglet, ce qui était source d'erreurs 1004 dans le meilleur des cas, ou alors l'instruction sheet(parametre).Resize(a.End(xlDown), a.End(xlToRight)).Value était purement et simplement ignorée dans le pire des cas.
La solution qui fonctionne est de passer un paramètre de type range :
Function aaa(a As Range) valeurs = a.Resize(a.End(xlDown), a.End(xlToRight)).Value End Function Cette fonction aaa peut ainsi être appelée depuis l'onglet Feuil1, en A1,
par exemple, avec comme paramètre Feuil2!F3.
Le Resize utilisé dans ce test n'est pas l'objet de la difficulté, c'est juste une facilité pour m'éviter de sélectionner l'intégralité des (immenses) zones sur lesquelles travaille la fonction.
Merci de vos réponses.
Le même exemple "Pascal Engelmajer" a écrit dans le message de news:
Salut, on sait pas trop la réponses à quoi !!! car Function b() Dim i As Integer, j As Integer Dim valeurs Dim bb As String '======================================================== > Sheets(2).Select valeurs = Range(Cells(2, 1), Cells(Range("A65356").End(xlUp).Row, 11)).Value '======================================================== > For i = 1 To UBound(valeurs) For j = 1 To UBound(valeurs, 2) bb = bb & valeurs(i, j) & "/" Next j, i b = bb End Function
Sub bid() MsgBox b() End Sub fonctionne parfaitement -- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel "CB" a écrit dans le message de news:
Bon, je me reponds a moi meme : Voila comment faire : Function aaa(a As Range) valeurs = a.Resize(a.End(xlDown), a.End(xlToRight)).Value End Function
-- Ce message a ete poste via la plateforme Web club-Internet.fr This message has been posted by the Web platform club-Internet.fr