Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichDenis
Exemple simple : Suppose que tu as 2 mots dans une cellule que tu veux répartir dans 2 cellules et que ces 2 mots sont séparés par un espace..
Ta fonction personnalisée dans un module standard : Split requiert Excel 2000 ou plus récent. '------------------------ Function LeSplit(Rg As Range) s = Split(Rg, " ") LeSplit = s End Function '-------------------------
Dans ta feuille de calcul, tu sélectionnes par exemple B1:B2 tu entres ta fonction en B1 : = LeSplit(A1) et tu valides par Maj + Ctrl + Enter
"Luc Voeltzel" a écrit dans le message de news: % Bonjour à tous,
Voilà une question d'ordre général : Il est possible en VBA de créer des fonctions personnalisées qui renvoient une seule valeur
par ex : Function inf(arg1#, arg2#) As Boolean inf = False If arg1 < arg2 Then inf = True End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient une plage de valeurs en sortie ?
Merci pour vos réponses
Exemple simple : Suppose que tu as 2 mots dans une cellule que tu veux répartir dans 2 cellules et
que ces 2 mots sont séparés par un espace..
Ta fonction personnalisée dans un module standard :
Split requiert Excel 2000 ou plus récent.
'------------------------
Function LeSplit(Rg As Range)
s = Split(Rg, " ")
LeSplit = s
End Function
'-------------------------
Dans ta feuille de calcul, tu sélectionnes par exemple B1:B2
tu entres ta fonction en B1 : = LeSplit(A1) et tu valides par Maj + Ctrl + Enter
"Luc Voeltzel" <ltzel@free.fr> a écrit dans le message de news:
%23inaIgYMHHA.4384@TK2MSFTNGP03.phx.gbl...
Bonjour à tous,
Voilà une question d'ordre général :
Il est possible en VBA de créer des fonctions personnalisées qui renvoient
une seule valeur
par ex :
Function inf(arg1#, arg2#) As Boolean
inf = False
If arg1 < arg2 Then inf = True
End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient
une plage de valeurs en sortie ?
Exemple simple : Suppose que tu as 2 mots dans une cellule que tu veux répartir dans 2 cellules et que ces 2 mots sont séparés par un espace..
Ta fonction personnalisée dans un module standard : Split requiert Excel 2000 ou plus récent. '------------------------ Function LeSplit(Rg As Range) s = Split(Rg, " ") LeSplit = s End Function '-------------------------
Dans ta feuille de calcul, tu sélectionnes par exemple B1:B2 tu entres ta fonction en B1 : = LeSplit(A1) et tu valides par Maj + Ctrl + Enter
"Luc Voeltzel" a écrit dans le message de news: % Bonjour à tous,
Voilà une question d'ordre général : Il est possible en VBA de créer des fonctions personnalisées qui renvoient une seule valeur
par ex : Function inf(arg1#, arg2#) As Boolean inf = False If arg1 < arg2 Then inf = True End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient une plage de valeurs en sortie ?
Merci pour vos réponses
JB
Bonjour,
Exemple de fonction qui retourne une liste des valeurs:
Function SansDoublonsTrié(champ As Range) Set MonDico = CreateObject("Scripting.Dictionary") temp = champ For i = 1 To UBound(temp, 1) If Not MonDico.Exists(temp(i, 1)) Then MonDico.Add temp(i, 1), temp(i, 1) Next i a = MonDico.items j = UBound(a) Call tri(a, 0, j) SansDoublonsTrié = Application.Transpose(a) End Function
Sub tri(a, gauc, droi) ' Quick sort ref = a((gauc + droi) 2) g = gauc: d = droi Do Do While a(g) < ref: g = g + 1: Loop Do While ref < a(d): d = d - 1: Loop If g <= d Then temp = a(g): a(g) = a(d): a(d) = temp g = g + 1: d = d - 1 End If Loop While g <= d If g < droi Then Call tri(a, g, droi) If gauc < d Then Call tri(a, gauc, d) End Sub
Dans le tableur, pour obtenir une liste triée de A2:A11: -Sélectionner C2:C11 =sansdoublonstrié(A2:A11) -valider avec maj+Ctrl+Entrée
Voilà une question d'ordre général : Il est possible en VBA de créer des fonctions personnalisées qui renv oient une seule valeur
par ex : Function inf(arg1#, arg2#) As Boolean inf = False If arg1 < arg2 Then inf = True End Function
, mais est-il possible de créer des fonctions personnalisées qui renv oient une plage de valeurs en sortie ?
Merci pour vos réponses
Bonjour,
Exemple de fonction qui retourne une liste des valeurs:
Function SansDoublonsTrié(champ As Range)
Set MonDico = CreateObject("Scripting.Dictionary")
temp = champ
For i = 1 To UBound(temp, 1)
If Not MonDico.Exists(temp(i, 1)) Then MonDico.Add temp(i, 1),
temp(i, 1)
Next i
a = MonDico.items
j = UBound(a)
Call tri(a, 0, j)
SansDoublonsTrié = Application.Transpose(a)
End Function
Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
Dans le tableur, pour obtenir une liste triée de A2:A11:
-Sélectionner C2:C11
=sansdoublonstrié(A2:A11)
-valider avec maj+Ctrl+Entrée
Exemple de fonction qui retourne une liste des valeurs:
Function SansDoublonsTrié(champ As Range) Set MonDico = CreateObject("Scripting.Dictionary") temp = champ For i = 1 To UBound(temp, 1) If Not MonDico.Exists(temp(i, 1)) Then MonDico.Add temp(i, 1), temp(i, 1) Next i a = MonDico.items j = UBound(a) Call tri(a, 0, j) SansDoublonsTrié = Application.Transpose(a) End Function
Sub tri(a, gauc, droi) ' Quick sort ref = a((gauc + droi) 2) g = gauc: d = droi Do Do While a(g) < ref: g = g + 1: Loop Do While ref < a(d): d = d - 1: Loop If g <= d Then temp = a(g): a(g) = a(d): a(d) = temp g = g + 1: d = d - 1 End If Loop While g <= d If g < droi Then Call tri(a, g, droi) If gauc < d Then Call tri(a, gauc, d) End Sub
Dans le tableur, pour obtenir une liste triée de A2:A11: -Sélectionner C2:C11 =sansdoublonstrié(A2:A11) -valider avec maj+Ctrl+Entrée
Voilà une question d'ordre général : Il est possible en VBA de créer des fonctions personnalisées qui renv oient une seule valeur
par ex : Function inf(arg1#, arg2#) As Boolean inf = False If arg1 < arg2 Then inf = True End Function
, mais est-il possible de créer des fonctions personnalisées qui renv oient une plage de valeurs en sortie ?
Merci pour vos réponses
MichDenis
La plage sélectionnée devrait être B1:C1 par que le tableau "S" de la fonction est un tableau à une dimension... en conséquence le résultat s'affiche en ligne...
"MichDenis" a écrit dans le message de news:
Exemple simple : Suppose que tu as 2 mots dans une cellule que tu veux répartir dans 2 cellules et que ces 2 mots sont séparés par un espace..
Ta fonction personnalisée dans un module standard : Split requiert Excel 2000 ou plus récent. '------------------------ Function LeSplit(Rg As Range) s = Split(Rg, " ") LeSplit = s End Function '-------------------------
Dans ta feuille de calcul, tu sélectionnes par exemple B1:B2 tu entres ta fonction en B1 : = LeSplit(A1) et tu valides par Maj + Ctrl + Enter
"Luc Voeltzel" a écrit dans le message de news: % Bonjour à tous,
Voilà une question d'ordre général : Il est possible en VBA de créer des fonctions personnalisées qui renvoient une seule valeur
par ex : Function inf(arg1#, arg2#) As Boolean inf = False If arg1 < arg2 Then inf = True End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient une plage de valeurs en sortie ?
Merci pour vos réponses
La plage sélectionnée devrait être B1:C1 par que le tableau "S" de la fonction
est un tableau à une dimension... en conséquence le résultat s'affiche en ligne...
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de news:
eIQIKrYMHHA.2456@TK2MSFTNGP06.phx.gbl...
Exemple simple : Suppose que tu as 2 mots dans une cellule que tu veux répartir dans 2 cellules et
que ces 2 mots sont séparés par un espace..
Ta fonction personnalisée dans un module standard :
Split requiert Excel 2000 ou plus récent.
'------------------------
Function LeSplit(Rg As Range)
s = Split(Rg, " ")
LeSplit = s
End Function
'-------------------------
Dans ta feuille de calcul, tu sélectionnes par exemple B1:B2
tu entres ta fonction en B1 : = LeSplit(A1) et tu valides par Maj + Ctrl + Enter
"Luc Voeltzel" <ltzel@free.fr> a écrit dans le message de news:
%23inaIgYMHHA.4384@TK2MSFTNGP03.phx.gbl...
Bonjour à tous,
Voilà une question d'ordre général :
Il est possible en VBA de créer des fonctions personnalisées qui renvoient
une seule valeur
par ex :
Function inf(arg1#, arg2#) As Boolean
inf = False
If arg1 < arg2 Then inf = True
End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient
une plage de valeurs en sortie ?
La plage sélectionnée devrait être B1:C1 par que le tableau "S" de la fonction est un tableau à une dimension... en conséquence le résultat s'affiche en ligne...
"MichDenis" a écrit dans le message de news:
Exemple simple : Suppose que tu as 2 mots dans une cellule que tu veux répartir dans 2 cellules et que ces 2 mots sont séparés par un espace..
Ta fonction personnalisée dans un module standard : Split requiert Excel 2000 ou plus récent. '------------------------ Function LeSplit(Rg As Range) s = Split(Rg, " ") LeSplit = s End Function '-------------------------
Dans ta feuille de calcul, tu sélectionnes par exemple B1:B2 tu entres ta fonction en B1 : = LeSplit(A1) et tu valides par Maj + Ctrl + Enter
"Luc Voeltzel" a écrit dans le message de news: % Bonjour à tous,
Voilà une question d'ordre général : Il est possible en VBA de créer des fonctions personnalisées qui renvoient une seule valeur
par ex : Function inf(arg1#, arg2#) As Boolean inf = False If arg1 < arg2 Then inf = True End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient une plage de valeurs en sortie ?
Merci pour vos réponses
Luc Voeltzel
Merci pour vos réponses.
Si j'ai bien compris pour renvoyer une plage de valeur il faut obligatoirement passer par une matrice. Mais je suis étonné que personne ne déclare le type de sortie de la fonction.
Faut-il déclarer ? - function (entree as range) as RANGE blabla end function
-ou function (entree as variant) as VARIANT blabla end function
- a moins que la declaration n'aie aucune importance ? Dans ce cas, (comme dans vos exemples ) on a juste : function (entree as range) blabla end function
? :-)
"Luc Voeltzel" a écrit dans le message de news:%
Bonjour à tous,
Voilà une question d'ordre général : Il est possible en VBA de créer des fonctions personnalisées qui renvoient une seule valeur
par ex : Function inf(arg1#, arg2#) As Boolean inf = False If arg1 < arg2 Then inf = True End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient une plage de valeurs en sortie ?
Merci pour vos réponses
Merci pour vos réponses.
Si j'ai bien compris pour renvoyer une plage de valeur il faut
obligatoirement passer par une matrice.
Mais je suis étonné que personne ne déclare le type de sortie de la
fonction.
Faut-il déclarer ?
- function (entree as range) as RANGE
blabla
end function
-ou function (entree as variant) as VARIANT
blabla
end function
- a moins que la declaration n'aie aucune importance ?
Dans ce cas, (comme dans vos exemples ) on a juste :
function (entree as range)
blabla
end function
?
:-)
"Luc Voeltzel" <ltzel@free.fr> a écrit dans le message de
news:%23inaIgYMHHA.4384@TK2MSFTNGP03.phx.gbl...
Bonjour à tous,
Voilà une question d'ordre général :
Il est possible en VBA de créer des fonctions personnalisées qui renvoient
une seule valeur
par ex :
Function inf(arg1#, arg2#) As Boolean
inf = False
If arg1 < arg2 Then inf = True
End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient
une plage de valeurs en sortie ?
Si j'ai bien compris pour renvoyer une plage de valeur il faut obligatoirement passer par une matrice. Mais je suis étonné que personne ne déclare le type de sortie de la fonction.
Faut-il déclarer ? - function (entree as range) as RANGE blabla end function
-ou function (entree as variant) as VARIANT blabla end function
- a moins que la declaration n'aie aucune importance ? Dans ce cas, (comme dans vos exemples ) on a juste : function (entree as range) blabla end function
? :-)
"Luc Voeltzel" a écrit dans le message de news:%
Bonjour à tous,
Voilà une question d'ordre général : Il est possible en VBA de créer des fonctions personnalisées qui renvoient une seule valeur
par ex : Function inf(arg1#, arg2#) As Boolean inf = False If arg1 < arg2 Then inf = True End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient une plage de valeurs en sortie ?
Merci pour vos réponses
Ange Ounis
Une fonction VBA matricielle doit obligatoirement être déclarée en Variant et le tableau intermédiaire qui lui est affecté comme résultat également. En l'absence de déclaration explicite, VBA considère automatiquement une variable comme déclarée implicitement en Variant. D'où la fréquente habitude de ne pas déclarer ses variables, ce qui équivaut à les déclarer toutes en Variant. Mauvaise habitude de mon point de vue, mais c'est un autre débat.
---------- Ange Ounis ----------
Merci pour vos réponses.
Si j'ai bien compris pour renvoyer une plage de valeur il faut obligatoirement passer par une matrice. Mais je suis étonné que personne ne déclare le type de sortie de la fonction.
Faut-il déclarer ? - function (entree as range) as RANGE blabla end function
-ou function (entree as variant) as VARIANT blabla end function
- a moins que la declaration n'aie aucune importance ? Dans ce cas, (comme dans vos exemples ) on a juste : function (entree as range) blabla end function
? :-)
"Luc Voeltzel" a écrit dans le message de news:%
Bonjour à tous,
Voilà une question d'ordre général : Il est possible en VBA de créer des fonctions personnalisées qui renvoient une seule valeur
par ex : Function inf(arg1#, arg2#) As Boolean inf = False If arg1 < arg2 Then inf = True End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient une plage de valeurs en sortie ?
Merci pour vos réponses
Une fonction VBA matricielle doit obligatoirement être déclarée en Variant et le
tableau intermédiaire qui lui est affecté comme résultat également.
En l'absence de déclaration explicite, VBA considère automatiquement une
variable comme déclarée implicitement en Variant.
D'où la fréquente habitude de ne pas déclarer ses variables, ce qui équivaut à
les déclarer toutes en Variant.
Mauvaise habitude de mon point de vue, mais c'est un autre débat.
----------
Ange Ounis
----------
Merci pour vos réponses.
Si j'ai bien compris pour renvoyer une plage de valeur il faut
obligatoirement passer par une matrice.
Mais je suis étonné que personne ne déclare le type de sortie de la
fonction.
Faut-il déclarer ?
- function (entree as range) as RANGE
blabla
end function
-ou function (entree as variant) as VARIANT
blabla
end function
- a moins que la declaration n'aie aucune importance ?
Dans ce cas, (comme dans vos exemples ) on a juste :
function (entree as range)
blabla
end function
?
:-)
"Luc Voeltzel" <ltzel@free.fr> a écrit dans le message de
news:%23inaIgYMHHA.4384@TK2MSFTNGP03.phx.gbl...
Bonjour à tous,
Voilà une question d'ordre général :
Il est possible en VBA de créer des fonctions personnalisées qui renvoient
une seule valeur
par ex :
Function inf(arg1#, arg2#) As Boolean
inf = False
If arg1 < arg2 Then inf = True
End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient
une plage de valeurs en sortie ?
Une fonction VBA matricielle doit obligatoirement être déclarée en Variant et le tableau intermédiaire qui lui est affecté comme résultat également. En l'absence de déclaration explicite, VBA considère automatiquement une variable comme déclarée implicitement en Variant. D'où la fréquente habitude de ne pas déclarer ses variables, ce qui équivaut à les déclarer toutes en Variant. Mauvaise habitude de mon point de vue, mais c'est un autre débat.
---------- Ange Ounis ----------
Merci pour vos réponses.
Si j'ai bien compris pour renvoyer une plage de valeur il faut obligatoirement passer par une matrice. Mais je suis étonné que personne ne déclare le type de sortie de la fonction.
Faut-il déclarer ? - function (entree as range) as RANGE blabla end function
-ou function (entree as variant) as VARIANT blabla end function
- a moins que la declaration n'aie aucune importance ? Dans ce cas, (comme dans vos exemples ) on a juste : function (entree as range) blabla end function
? :-)
"Luc Voeltzel" a écrit dans le message de news:%
Bonjour à tous,
Voilà une question d'ordre général : Il est possible en VBA de créer des fonctions personnalisées qui renvoient une seule valeur
par ex : Function inf(arg1#, arg2#) As Boolean inf = False If arg1 < arg2 Then inf = True End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient une plage de valeurs en sortie ?
Merci pour vos réponses
Luc Voeltzel
Je ne comprenais pas pourquoi je n'arrivais pas à déclarer la fonction comme un type Range. J'ai enfin les idées un peu plus claires.
Merci !
"Ange Ounis" a écrit dans le message de news:
Une fonction VBA matricielle doit obligatoirement être déclarée en Variant et le
tableau intermédiaire qui lui est affecté comme résultat également. En l'absence de déclaration explicite, VBA considère automatiquement une variable comme déclarée implicitement en Variant. D'où la fréquente habitude de ne pas déclarer ses variables, ce qui équivaut à
les déclarer toutes en Variant. Mauvaise habitude de mon point de vue, mais c'est un autre débat.
---------- Ange Ounis ----------
Merci pour vos réponses.
Si j'ai bien compris pour renvoyer une plage de valeur il faut obligatoirement passer par une matrice. Mais je suis étonné que personne ne déclare le type de sortie de la fonction.
Faut-il déclarer ? - function (entree as range) as RANGE blabla end function
-ou function (entree as variant) as VARIANT blabla end function
- a moins que la declaration n'aie aucune importance ? Dans ce cas, (comme dans vos exemples ) on a juste : function (entree as range) blabla end function
? :-)
"Luc Voeltzel" a écrit dans le message de news:%
Bonjour à tous,
Voilà une question d'ordre général : Il est possible en VBA de créer des fonctions personnalisées qui renvoient
une seule valeur
par ex : Function inf(arg1#, arg2#) As Boolean inf = False If arg1 < arg2 Then inf = True End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient
une plage de valeurs en sortie ?
Merci pour vos réponses
Je ne comprenais pas pourquoi je n'arrivais pas à déclarer
la fonction comme un type Range.
J'ai enfin les idées un peu plus claires.
Merci !
"Ange Ounis" <nospam@nospam> a écrit dans le message de
news:urknaZZMHHA.3556@TK2MSFTNGP03.phx.gbl...
Une fonction VBA matricielle doit obligatoirement être déclarée en Variant
et le
tableau intermédiaire qui lui est affecté comme résultat également.
En l'absence de déclaration explicite, VBA considère automatiquement une
variable comme déclarée implicitement en Variant.
D'où la fréquente habitude de ne pas déclarer ses variables, ce qui
équivaut à
les déclarer toutes en Variant.
Mauvaise habitude de mon point de vue, mais c'est un autre débat.
----------
Ange Ounis
----------
Merci pour vos réponses.
Si j'ai bien compris pour renvoyer une plage de valeur il faut
obligatoirement passer par une matrice.
Mais je suis étonné que personne ne déclare le type de sortie de la
fonction.
Faut-il déclarer ?
- function (entree as range) as RANGE
blabla
end function
-ou function (entree as variant) as VARIANT
blabla
end function
- a moins que la declaration n'aie aucune importance ?
Dans ce cas, (comme dans vos exemples ) on a juste :
function (entree as range)
blabla
end function
?
:-)
"Luc Voeltzel" <ltzel@free.fr> a écrit dans le message de
news:%23inaIgYMHHA.4384@TK2MSFTNGP03.phx.gbl...
Bonjour à tous,
Voilà une question d'ordre général :
Il est possible en VBA de créer des fonctions personnalisées qui
renvoient
une seule valeur
par ex :
Function inf(arg1#, arg2#) As Boolean
inf = False
If arg1 < arg2 Then inf = True
End Function
, mais est-il possible de créer des fonctions personnalisées qui
renvoient
Je ne comprenais pas pourquoi je n'arrivais pas à déclarer la fonction comme un type Range. J'ai enfin les idées un peu plus claires.
Merci !
"Ange Ounis" a écrit dans le message de news:
Une fonction VBA matricielle doit obligatoirement être déclarée en Variant et le
tableau intermédiaire qui lui est affecté comme résultat également. En l'absence de déclaration explicite, VBA considère automatiquement une variable comme déclarée implicitement en Variant. D'où la fréquente habitude de ne pas déclarer ses variables, ce qui équivaut à
les déclarer toutes en Variant. Mauvaise habitude de mon point de vue, mais c'est un autre débat.
---------- Ange Ounis ----------
Merci pour vos réponses.
Si j'ai bien compris pour renvoyer une plage de valeur il faut obligatoirement passer par une matrice. Mais je suis étonné que personne ne déclare le type de sortie de la fonction.
Faut-il déclarer ? - function (entree as range) as RANGE blabla end function
-ou function (entree as variant) as VARIANT blabla end function
- a moins que la declaration n'aie aucune importance ? Dans ce cas, (comme dans vos exemples ) on a juste : function (entree as range) blabla end function
? :-)
"Luc Voeltzel" a écrit dans le message de news:%
Bonjour à tous,
Voilà une question d'ordre général : Il est possible en VBA de créer des fonctions personnalisées qui renvoient
une seule valeur
par ex : Function inf(arg1#, arg2#) As Boolean inf = False If arg1 < arg2 Then inf = True End Function
, mais est-il possible de créer des fonctions personnalisées qui renvoient