Ma fonction personnalis=E9e ne fonctionne pas...toujours (je la mets
dessous pour information).
Lorsque j'ouvre un nouveau fichier excel (2007), que j'ouvre l'=E9diteur
de code vba, que j'ins=E8re un Module standard (pas un module de
feuille, un vrai module standard), et que j'y met ma fonction, tout va
bien. Je peux la tester: sur la feuille 1 je mets 1 en A1, et sur la
feuille deux je mets =3DFeuillePrecedente(A1) et j'obtiens bien 1.
Maintenant lorsque je fais la m=EAme chose dans mon vieux fichier excel
(2007), =E7a ne marche plus.
Auriez vous une id=E9e de ce qui peut interf=E9rer ? Quand je tape une
formule, il me propose bien ma fonction. Mais au lieu d'afficher le
bon r=E9sultat, j'obitens #NOM?
Merci d'avance pour votre aide,
Alexandre.
Public Function FeuillePrecedenteAAA(rng As Range)
Application.Volatile
Dim nIndex As Integer
Dim mIndex As Integer
nIndex =3D rng.Cells(1).Parent.Index
If (nIndex > 1) Then
mIndex =3D nIndex - 1
Else
mIndex =3D nIndex
End If
FeuillePrecedenteAAA =3D Sheets(mIndex).Range(rng.Address)
End Function
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
MichD
Bonjour,
| Mais au lieu d'afficher le bon résultat, j'obitens #NOM?
Quand tu obtiens une erreur de type #NOM? c'est que le nom de la fonction n'est pas reconnu. Une faute d'orthographe dans le nom de la fonction ou la fonction n'est pas dans un module standard.
Question 1 : Es-tu certain de ne pas avoir fait une faut d'orthographe en tapant la formule þuillePrecedenteAAA(A1) qui représente le nom de la fonction ?
Question 2 ? Es-tu certain que la fonction est dans un véritable module "Standard". Il peut arriver par distraction d'insérer un module de classe?
Une façon de tester est d'introduire un point d'arrêt sur la ligne de déclaration de la fonction dans le module standard ou d'écrire l'instruction-Stop comme ligne de code au tout début du code. Par la suite, tu exécutes la fonction pas à pas en utilisant la touche F8. Cela te permet de voir si au moins la fonction est appelée lors de la validation de la cellule et le déroulement de la fonction.
Si tu ne trouves pas la cause, est-ce que tu as d'autres macros - fonctions dans le classeur ? Il est possible qu'il y a une interaction douteuse...mais sans voir le fichier, c'est quand même difficile!
Pour la fonction, il me semble que ceci devrait être suffisant. '---------------------------- Public Function FeuillePrecedenteAAA(rng As Range) Application.Volatile Dim nIndex As Integer
nIndex = rng.Parent.Index
If (nIndex > 1) Then nIndex = nIndex - 1 End If
FeuillePrecedenteAAA = Sheets(nIndex).Range(rng.Address) End Function '----------------------------
MichD ------------------------------------------ "AG" a écrit dans le message de groupe de discussion :
Bonjour,
Ma fonction personnalisée ne fonctionne pas...toujours (je la mets dessous pour information). Lorsque j'ouvre un nouveau fichier excel (2007), que j'ouvre l'éditeur de code vba, que j'insère un Module standard (pas un module de feuille, un vrai module standard), et que j'y met ma fonction, tout va bien. Je peux la tester: sur la feuille 1 je mets 1 en A1, et sur la feuille deux je mets þuillePrecedente(A1) et j'obtiens bien 1.
Maintenant lorsque je fais la même chose dans mon vieux fichier excel (2007), ça ne marche plus.
Auriez vous une idée de ce qui peut interférer ? Quand je tape une formule, il me propose bien ma fonction. Mais au lieu d'afficher le bon résultat, j'obitens #NOM?
Merci d'avance pour votre aide,
Alexandre.
Public Function FeuillePrecedenteAAA(rng As Range) Application.Volatile Dim nIndex As Integer Dim mIndex As Integer
nIndex = rng.Cells(1).Parent.Index
If (nIndex > 1) Then mIndex = nIndex - 1 Else mIndex = nIndex End If
FeuillePrecedenteAAA = Sheets(mIndex).Range(rng.Address) End Function
Bonjour,
| Mais au lieu d'afficher le bon résultat, j'obitens #NOM?
Quand tu obtiens une erreur de type #NOM? c'est que le nom de la fonction n'est pas reconnu. Une faute d'orthographe dans le
nom de la fonction ou la fonction n'est pas dans un module standard.
Question 1 : Es-tu certain de ne pas avoir fait une faut d'orthographe en tapant la formule þuillePrecedenteAAA(A1) qui
représente le nom de la fonction ?
Question 2 ? Es-tu certain que la fonction est dans un véritable module "Standard". Il peut arriver par distraction d'insérer
un module de classe?
Une façon de tester est d'introduire un point d'arrêt sur la ligne de déclaration de la fonction dans le module standard ou
d'écrire l'instruction-Stop comme ligne de code au tout début du code. Par la suite, tu exécutes la fonction pas à pas en
utilisant la touche F8. Cela te permet de voir si au moins la fonction est appelée lors de la validation de la cellule et le
déroulement de la fonction.
Si tu ne trouves pas la cause, est-ce que tu as d'autres macros - fonctions dans le classeur ? Il est possible qu'il y a une
interaction douteuse...mais sans voir le fichier, c'est quand même difficile!
Pour la fonction, il me semble que ceci devrait être suffisant.
'----------------------------
Public Function FeuillePrecedenteAAA(rng As Range)
Application.Volatile
Dim nIndex As Integer
nIndex = rng.Parent.Index
If (nIndex > 1) Then
nIndex = nIndex - 1
End If
FeuillePrecedenteAAA = Sheets(nIndex).Range(rng.Address)
End Function
'----------------------------
MichD
------------------------------------------
"AG" a écrit dans le message de groupe de discussion : cd099102-13f3-44e2-b0ea-098516a8cfde@hj4g2000vbb.googlegroups.com...
Bonjour,
Ma fonction personnalisée ne fonctionne pas...toujours (je la mets
dessous pour information).
Lorsque j'ouvre un nouveau fichier excel (2007), que j'ouvre l'éditeur
de code vba, que j'insère un Module standard (pas un module de
feuille, un vrai module standard), et que j'y met ma fonction, tout va
bien. Je peux la tester: sur la feuille 1 je mets 1 en A1, et sur la
feuille deux je mets þuillePrecedente(A1) et j'obtiens bien 1.
Maintenant lorsque je fais la même chose dans mon vieux fichier excel
(2007), ça ne marche plus.
Auriez vous une idée de ce qui peut interférer ? Quand je tape une
formule, il me propose bien ma fonction. Mais au lieu d'afficher le
bon résultat, j'obitens #NOM?
Merci d'avance pour votre aide,
Alexandre.
Public Function FeuillePrecedenteAAA(rng As Range)
Application.Volatile
Dim nIndex As Integer
Dim mIndex As Integer
nIndex = rng.Cells(1).Parent.Index
If (nIndex > 1) Then
mIndex = nIndex - 1
Else
mIndex = nIndex
End If
FeuillePrecedenteAAA = Sheets(mIndex).Range(rng.Address)
End Function
| Mais au lieu d'afficher le bon résultat, j'obitens #NOM?
Quand tu obtiens une erreur de type #NOM? c'est que le nom de la fonction n'est pas reconnu. Une faute d'orthographe dans le nom de la fonction ou la fonction n'est pas dans un module standard.
Question 1 : Es-tu certain de ne pas avoir fait une faut d'orthographe en tapant la formule þuillePrecedenteAAA(A1) qui représente le nom de la fonction ?
Question 2 ? Es-tu certain que la fonction est dans un véritable module "Standard". Il peut arriver par distraction d'insérer un module de classe?
Une façon de tester est d'introduire un point d'arrêt sur la ligne de déclaration de la fonction dans le module standard ou d'écrire l'instruction-Stop comme ligne de code au tout début du code. Par la suite, tu exécutes la fonction pas à pas en utilisant la touche F8. Cela te permet de voir si au moins la fonction est appelée lors de la validation de la cellule et le déroulement de la fonction.
Si tu ne trouves pas la cause, est-ce que tu as d'autres macros - fonctions dans le classeur ? Il est possible qu'il y a une interaction douteuse...mais sans voir le fichier, c'est quand même difficile!
Pour la fonction, il me semble que ceci devrait être suffisant. '---------------------------- Public Function FeuillePrecedenteAAA(rng As Range) Application.Volatile Dim nIndex As Integer
nIndex = rng.Parent.Index
If (nIndex > 1) Then nIndex = nIndex - 1 End If
FeuillePrecedenteAAA = Sheets(nIndex).Range(rng.Address) End Function '----------------------------
MichD ------------------------------------------ "AG" a écrit dans le message de groupe de discussion :
Bonjour,
Ma fonction personnalisée ne fonctionne pas...toujours (je la mets dessous pour information). Lorsque j'ouvre un nouveau fichier excel (2007), que j'ouvre l'éditeur de code vba, que j'insère un Module standard (pas un module de feuille, un vrai module standard), et que j'y met ma fonction, tout va bien. Je peux la tester: sur la feuille 1 je mets 1 en A1, et sur la feuille deux je mets þuillePrecedente(A1) et j'obtiens bien 1.
Maintenant lorsque je fais la même chose dans mon vieux fichier excel (2007), ça ne marche plus.
Auriez vous une idée de ce qui peut interférer ? Quand je tape une formule, il me propose bien ma fonction. Mais au lieu d'afficher le bon résultat, j'obitens #NOM?
Merci d'avance pour votre aide,
Alexandre.
Public Function FeuillePrecedenteAAA(rng As Range) Application.Volatile Dim nIndex As Integer Dim mIndex As Integer
nIndex = rng.Cells(1).Parent.Index
If (nIndex > 1) Then mIndex = nIndex - 1 Else mIndex = nIndex End If
FeuillePrecedenteAAA = Sheets(mIndex).Range(rng.Address) End Function
isabelle
bonjour,
tu peut le faire avec ou sans Range,
Function ShPrevious1(rng As Range) As String If Sheets(rng.Parent.Name).Index <> 1 Then ShPrevious1 = Sheets(rng.Parent.Name).Previous.Name End Function
Function ShPrevious2() As String If ActiveSheet.Index <> 1 Then ShPrevious2 = ActiveSheet.Previous.Name End Function
-- isabelle
bonjour,
tu peut le faire avec ou sans Range,
Function ShPrevious1(rng As Range) As String
If Sheets(rng.Parent.Name).Index <> 1 Then ShPrevious1 = Sheets(rng.Parent.Name).Previous.Name
End Function
Function ShPrevious2() As String
If ActiveSheet.Index <> 1 Then ShPrevious2 = ActiveSheet.Previous.Name
End Function
Function ShPrevious1(rng As Range) As String If Sheets(rng.Parent.Name).Index <> 1 Then ShPrevious1 = Sheets(rng.Parent.Name).Previous.Name End Function
Function ShPrevious2() As String If ActiveSheet.Index <> 1 Then ShPrevious2 = ActiveSheet.Previous.Name End Function
-- isabelle
MichD
Si je peux me permettre Isabelle,
| tu peut le faire avec ou sans Range,
Imagine la fonction utilisée dans plusieurs feuilles différentes, la feuille de référence serait la feuille active et non la feuille où la fonction est écrite. Peu importe la feuille où la fonction est écrite, la feuille précédente serait toujours la même soit la feuille active - 1 . Je ne crois pas que c'est ce que l'usager désire obtenir! Et au cas où ce serait le cas, il faudrait aussi ajouter Appplication.Volatile n'est-ce pas ?
Mais on pourrait améliorer la fonction par exemple comme ceci, en remplaçant Sheets pour Worksheets afin d'éviter les problèmes si la feuille précédente est une feuille graphique. '--------------------------------------------------- Public Function FeuillePrecedenteAAA(Rng As Range) Application.Volatile With Rng.Parent If .Index > 1 Then FeuillePrecedenteAAA = Worksheets(.Index - 1).Range(Rng.Address) Else FeuillePrecedenteAAA = Worksheets(.Index).Range(Rng.Address) End If End With End Function '---------------------------------------------------
Tu as effectué la pose des pneus d'hiver sur ton auto et préparé ta pelle? Le plaisir n'est pas si loin! ;-))
MichD ------------------------------------------
Si je peux me permettre Isabelle,
| tu peut le faire avec ou sans Range,
Imagine la fonction utilisée dans plusieurs feuilles différentes, la feuille de référence
serait la feuille active et non la feuille où la fonction est écrite. Peu importe la feuille
où la fonction est écrite, la feuille précédente serait toujours la même soit la feuille
active - 1 . Je ne crois pas que c'est ce que l'usager désire obtenir! Et au cas où ce
serait le cas, il faudrait aussi ajouter Appplication.Volatile n'est-ce pas ?
Mais on pourrait améliorer la fonction par exemple comme ceci, en remplaçant
Sheets pour Worksheets afin d'éviter les problèmes si la feuille précédente est
une feuille graphique.
'---------------------------------------------------
Public Function FeuillePrecedenteAAA(Rng As Range)
Application.Volatile
With Rng.Parent
If .Index > 1 Then
FeuillePrecedenteAAA = Worksheets(.Index - 1).Range(Rng.Address)
Else
FeuillePrecedenteAAA = Worksheets(.Index).Range(Rng.Address)
End If
End With
End Function
'---------------------------------------------------
Tu as effectué la pose des pneus d'hiver sur ton auto et préparé ta pelle? Le plaisir n'est pas si loin!
;-))
Imagine la fonction utilisée dans plusieurs feuilles différentes, la feuille de référence serait la feuille active et non la feuille où la fonction est écrite. Peu importe la feuille où la fonction est écrite, la feuille précédente serait toujours la même soit la feuille active - 1 . Je ne crois pas que c'est ce que l'usager désire obtenir! Et au cas où ce serait le cas, il faudrait aussi ajouter Appplication.Volatile n'est-ce pas ?
Mais on pourrait améliorer la fonction par exemple comme ceci, en remplaçant Sheets pour Worksheets afin d'éviter les problèmes si la feuille précédente est une feuille graphique. '--------------------------------------------------- Public Function FeuillePrecedenteAAA(Rng As Range) Application.Volatile With Rng.Parent If .Index > 1 Then FeuillePrecedenteAAA = Worksheets(.Index - 1).Range(Rng.Address) Else FeuillePrecedenteAAA = Worksheets(.Index).Range(Rng.Address) End If End With End Function '---------------------------------------------------
Tu as effectué la pose des pneus d'hiver sur ton auto et préparé ta pelle? Le plaisir n'est pas si loin! ;-))
MichD ------------------------------------------
isabelle
non, il fait bien trop beau pour pensé ça ;-)
-- isabelle
Le 2011-10-28 08:43, MichD a écrit :
Tu as effectué la pose des pneus d'hiver sur ton auto et préparé ta pelle? Le plaisir n'est pas si loin! ;-))
non, il fait bien trop beau pour pensé ça ;-)
--
isabelle
Le 2011-10-28 08:43, MichD a écrit :
Tu as effectué la pose des pneus d'hiver sur ton auto et préparé ta pelle? Le plaisir n'est pas si loin!
;-))
Tu as effectué la pose des pneus d'hiver sur ton auto et préparé ta pelle? Le plaisir n'est pas si loin! ;-))
MichD
Je me reprends... la procédure devrait plutôt ressembler à ceci dans le cas où il y a d'autres types de feuille (graphique par exemple) insérée dans le classeur.
S'il n'y a pas de feuille précédente, la fonction retourne la valeur de l'adresse dans la feuille active. '-------------------------------------- Public Function FeuillePrecedenteAAA(Rng As Range) Dim A As Integer Application.Volatile With Rng.Parent If .Index > 1 Then A = .Index Do A = A - 1 Loop Until TypeName(Sheets(A)) = "Worksheet" FeuillePrecedenteAAA = Sheets(A).Range(Rng.Address) Else FeuillePrecedenteAAA = Sheets(.Index).Range(Rng.Address) End If End With End Function '--------------------------------------
MichD ------------------------------------------
Je me reprends... la procédure devrait plutôt ressembler à ceci dans le cas où
il y a d'autres types de feuille (graphique par exemple) insérée dans le classeur.
S'il n'y a pas de feuille précédente, la fonction retourne la valeur de l'adresse dans la feuille active.
'--------------------------------------
Public Function FeuillePrecedenteAAA(Rng As Range)
Dim A As Integer
Application.Volatile
With Rng.Parent
If .Index > 1 Then
A = .Index
Do
A = A - 1
Loop Until TypeName(Sheets(A)) = "Worksheet"
FeuillePrecedenteAAA = Sheets(A).Range(Rng.Address)
Else
FeuillePrecedenteAAA = Sheets(.Index).Range(Rng.Address)
End If
End With
End Function
'--------------------------------------
Je me reprends... la procédure devrait plutôt ressembler à ceci dans le cas où il y a d'autres types de feuille (graphique par exemple) insérée dans le classeur.
S'il n'y a pas de feuille précédente, la fonction retourne la valeur de l'adresse dans la feuille active. '-------------------------------------- Public Function FeuillePrecedenteAAA(Rng As Range) Dim A As Integer Application.Volatile With Rng.Parent If .Index > 1 Then A = .Index Do A = A - 1 Loop Until TypeName(Sheets(A)) = "Worksheet" FeuillePrecedenteAAA = Sheets(A).Range(Rng.Address) Else FeuillePrecedenteAAA = Sheets(.Index).Range(Rng.Address) End If End With End Function '--------------------------------------
MichD ------------------------------------------
MichD
Je me reprends... la procédure devrait plutôt ressembler à ceci dans le cas où il y a d'autres types de feuille (graphique par exemple) insérée dans le classeur.
S'il n'y a pas de feuille précédente, la fonction retourne la valeur de l'adresse dans la feuille active. '-------------------------------------- Public Function FeuillePrecedenteAAA(Rng As Range) Dim A As Integer Application.Volatile With Rng.Parent If .Index > 1 Then A = .Index Do A = A - 1 Loop Until TypeName(Sheets(A)) = "Worksheet" FeuillePrecedenteAAA = Sheets(A).Range(Rng.Address) Else FeuillePrecedenteAAA = Sheets(.Index).Range(Rng.Address) End If End With End Function '--------------------------------------
MichD ------------------------------------------
Je me reprends... la procédure devrait plutôt ressembler à ceci dans le cas où
il y a d'autres types de feuille (graphique par exemple) insérée dans le classeur.
S'il n'y a pas de feuille précédente, la fonction retourne la valeur de l'adresse dans la feuille active.
'--------------------------------------
Public Function FeuillePrecedenteAAA(Rng As Range)
Dim A As Integer
Application.Volatile
With Rng.Parent
If .Index > 1 Then
A = .Index
Do
A = A - 1
Loop Until TypeName(Sheets(A)) = "Worksheet"
FeuillePrecedenteAAA = Sheets(A).Range(Rng.Address)
Else
FeuillePrecedenteAAA = Sheets(.Index).Range(Rng.Address)
End If
End With
End Function
'--------------------------------------
Je me reprends... la procédure devrait plutôt ressembler à ceci dans le cas où il y a d'autres types de feuille (graphique par exemple) insérée dans le classeur.
S'il n'y a pas de feuille précédente, la fonction retourne la valeur de l'adresse dans la feuille active. '-------------------------------------- Public Function FeuillePrecedenteAAA(Rng As Range) Dim A As Integer Application.Volatile With Rng.Parent If .Index > 1 Then A = .Index Do A = A - 1 Loop Until TypeName(Sheets(A)) = "Worksheet" FeuillePrecedenteAAA = Sheets(A).Range(Rng.Address) Else FeuillePrecedenteAAA = Sheets(.Index).Range(Rng.Address) End If End With End Function '--------------------------------------