Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

(vba) Erreur 2015 !!

10 réponses
Avatar
j-pascal
Bonsoir,

J'ai un code qui fonctionne bien lorsqu'il est lancé (à partir d'un
bouton de contrôle) depuis une feuille. Si je le lance depuis une autre
feuille, j'ai l'erreur suivante :

n°ColSign me renvoit "Erreur 2015" !

'-- le code ---

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")

'--------------

PS : Débogage - CompilerVBAProject - n'indique aucune erreur !

Merci pour votre aide,

JP

10 réponses

Avatar
Daniel.C
Bonsoir.
Je ne sais pas pourquoi, il faudrait voir ton classeur. Je n'ai pas
d'erreur chez moi. Ce qu'il y a de sûr, c'est que, si tu exécutes le
code depuis une autre feuille, comme le nom de la feuille n'est pas
spécifié, le calcul se fera sur les cellules de la feuille qui contient
la macro, pas la feuille active. Il convient donc de mettre la macro
dans un module standard.
Daniel

Bonsoir,

J'ai un code qui fonctionne bien lorsqu'il est lancé (à partir d'un bouton de
contrôle) depuis une feuille. Si je le lance depuis une autre feuille, j'ai
l'erreur suivante :

n°ColSign me renvoit "Erreur 2015" !

'-- le code ---

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")

'--------------

PS : Débogage - CompilerVBAProject - n'indique aucune erreur !

Merci pour votre aide,

JP


Avatar
j-pascal
Bonjour Daniel,

Merci pour ton aide.

Le code est bien placé dans un module standard.
'------
Sub MasqueEtImprime()

Dim PlageImprimée As Variant
Dim NombresDeDates As Integer
Dim z As Integer
Dim y As Integer
Dim i As Integer
Dim activeSheets
Dim LigneDeDates As Integer
Dim n°LignSign As Integer
Dim n°ColSign As Integer
Dim PremLign As Integer
Dim DernLign As Integer
Dim DécalageGauche As Integer
Dim DécalageDroite As Integer
Dim LargeurThéoriqueDuTableau As Integer

Application.ScreenUpdating = False

'-- Calcul des coordonnées de "Signature" >>

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")
n°LignSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*row(" & Range("A1:Z200").Address & "))")


'-- Evaluation des cellules vides de la zone à traiter + masquage si
VRAI >>

PremLign = n°LignSign + 1 'première ligne de la
zone à évaluer
DernLign = Range("A65536").End(xlUp).Row 'dernière ligne de la
zone à évaluer

DécalageGauche = 1 'bord gauche de la zone
à traiter
DécalageDroite = 3 'bord droit de la zone à
traiter

LargeurThéoriqueDuTableau = n°ColSign - DécalageGauche -
DécalageDroite

For i = DernLign To PremLign Step -1

If Application.CountBlank(Range _
(Cells(i, DécalageGauche + 1), _
Cells(i, n°ColSign - DécalageDroite))) _
= LargeurThéoriqueDuTableau Then Rows(i).Hidden = True

Next


'--- Calculer la plage à imprimer >>


y = Evaluate("MAX((" & Range("7:7").Address &
"=""Signature"")*column(" & Range("7:7").Address & "))")

PlageImprimée = Range(Cells(1, 1), Cells(DernLign,
n°ColSign)).Address

ActiveSheet.PageSetup.PrintArea = PlageImprimée
ActiveWindow.SelectedSheets.PrintPreview
'----------------

Rows("1:200").Hidden = False

End Sub
'------

Puis, dans chaque module de feuille, j'ai :

'------
Private Sub MaMacro_Click()
MasqueEtImprime
End Sub
'------

Ca fonctionne avec la première feuille, puis "n°ColSign" me renvoit
"Erreur 2015" sur les autres ...

JP

Bonsoir.
Je ne sais pas pourquoi, il faudrait voir ton classeur. Je n'ai pas d'erreur
chez moi. Ce qu'il y a de sûr, c'est que, si tu exécutes le code depuis une
autre feuille, comme le nom de la feuille n'est pas spécifié, le calcul se
fera sur les cellules de la feuille qui contient la macro, pas la feuille
active. Il convient donc de mettre la macro dans un module standard.
Daniel

Bonsoir,

J'ai un code qui fonctionne bien lorsqu'il est lancé (à partir d'un bouton
de contrôle) depuis une feuille. Si je le lance depuis une autre feuille,
j'ai l'erreur suivante :

n°ColSign me renvoit "Erreur 2015" !

'-- le code ---

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")

'--------------

PS : Débogage - CompilerVBAProject - n'indique aucune erreur !

Merci pour votre aide,

JP




Avatar
Daniel.C
Bonjour.
Je viens de faire un test. Ca fonctionne sans problème. Peux-tu mettre
ton classeur, en effaçant les données confidentielles sur
www.cjoint.com et poster ici l'adresse générée ?
Daniel

Bonjour Daniel,

Merci pour ton aide.

Le code est bien placé dans un module standard.
'------
Sub MasqueEtImprime()

Dim PlageImprimée As Variant
Dim NombresDeDates As Integer
Dim z As Integer
Dim y As Integer
Dim i As Integer
Dim activeSheets
Dim LigneDeDates As Integer
Dim n°LignSign As Integer
Dim n°ColSign As Integer
Dim PremLign As Integer
Dim DernLign As Integer
Dim DécalageGauche As Integer
Dim DécalageDroite As Integer
Dim LargeurThéoriqueDuTableau As Integer

Application.ScreenUpdating = False

'-- Calcul des coordonnées de "Signature" >>

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")
n°LignSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*row(" & Range("A1:Z200").Address & "))")


'-- Evaluation des cellules vides de la zone à traiter + masquage si VRAI >>

PremLign = n°LignSign + 1 'première ligne de la zone à
évaluer
DernLign = Range("A65536").End(xlUp).Row 'dernière ligne de la zone à
évaluer

DécalageGauche = 1 'bord gauche de la zone à
traiter
DécalageDroite = 3 'bord droit de la zone à
traiter

LargeurThéoriqueDuTableau = n°ColSign - DécalageGauche - DécalageDroite

For i = DernLign To PremLign Step -1

If Application.CountBlank(Range _
(Cells(i, DécalageGauche + 1), _
Cells(i, n°ColSign - DécalageDroite))) _
= LargeurThéoriqueDuTableau Then Rows(i).Hidden = True

Next


'--- Calculer la plage à imprimer >>


y = Evaluate("MAX((" & Range("7:7").Address & "=""Signature"")*column(" &
Range("7:7").Address & "))")

PlageImprimée = Range(Cells(1, 1), Cells(DernLign, n°ColSign)).Address

ActiveSheet.PageSetup.PrintArea = PlageImprimée
ActiveWindow.SelectedSheets.PrintPreview
'----------------

Rows("1:200").Hidden = False

End Sub
'------

Puis, dans chaque module de feuille, j'ai :

'------
Private Sub MaMacro_Click()
MasqueEtImprime
End Sub
'------

Ca fonctionne avec la première feuille, puis "n°ColSign" me renvoit "Erreur
2015" sur les autres ...

JP

Bonsoir.
Je ne sais pas pourquoi, il faudrait voir ton classeur. Je n'ai pas
d'erreur chez moi. Ce qu'il y a de sûr, c'est que, si tu exécutes le code
depuis une autre feuille, comme le nom de la feuille n'est pas spécifié, le
calcul se fera sur les cellules de la feuille qui contient la macro, pas la
feuille active. Il convient donc de mettre la macro dans un module
standard.
Daniel

Bonsoir,

J'ai un code qui fonctionne bien lorsqu'il est lancé (à partir d'un bouton
de contrôle) depuis une feuille. Si je le lance depuis une autre feuille,
j'ai l'erreur suivante :

n°ColSign me renvoit "Erreur 2015" !

'-- le code ---

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")

'--------------

PS : Débogage - CompilerVBAProject - n'indique aucune erreur !

Merci pour votre aide,

JP






Avatar
j-pascal
Bonsoir Daniel,

Merci pour ta sollicitude.

Le fichier est là : http://cjoint.com/?lktTGNinG5

Il s'agit du classeur d'un collègue ... L'idée est de masquer les
lignes sur lesquelles il ni a pas de saisie(s).
J'ai volontairement détaillé les explications du code pour que mon
collègue puisse se l'approprier le cas échéant. Je sais, c'est un peu
lourd, mais ça me permet d'apprendre ;-)

Bon courage, et encore merci !

JP

PS : ça fonctionne avec la première feuille, mais pas les suivantes (en
tout cas, chez moi !)


Bonjour.
Je viens de faire un test. Ca fonctionne sans problème. Peux-tu mettre ton
classeur, en effaçant les données confidentielles sur www.cjoint.com et
poster ici l'adresse générée ?
Daniel

Bonjour Daniel,

Merci pour ton aide.

Le code est bien placé dans un module standard.
'------
Sub MasqueEtImprime()

Dim PlageImprimée As Variant
Dim NombresDeDates As Integer
Dim z As Integer
Dim y As Integer
Dim i As Integer
Dim activeSheets
Dim LigneDeDates As Integer
Dim n°LignSign As Integer
Dim n°ColSign As Integer
Dim PremLign As Integer
Dim DernLign As Integer
Dim DécalageGauche As Integer
Dim DécalageDroite As Integer
Dim LargeurThéoriqueDuTableau As Integer

Application.ScreenUpdating = False

'-- Calcul des coordonnées de "Signature" >>

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")
n°LignSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*row(" & Range("A1:Z200").Address & "))")


'-- Evaluation des cellules vides de la zone à traiter + masquage si VRAI
>>

PremLign = n°LignSign + 1 'première ligne de la zone à
évaluer
DernLign = Range("A65536").End(xlUp).Row 'dernière ligne de la zone à
évaluer

DécalageGauche = 1 'bord gauche de la zone à
traiter
DécalageDroite = 3 'bord droit de la zone à
traiter

LargeurThéoriqueDuTableau = n°ColSign - DécalageGauche - DécalageDroite

For i = DernLign To PremLign Step -1

If Application.CountBlank(Range _
(Cells(i, DécalageGauche + 1), _
Cells(i, n°ColSign - DécalageDroite))) _
= LargeurThéoriqueDuTableau Then Rows(i).Hidden = True

Next


'--- Calculer la plage à imprimer >>


y = Evaluate("MAX((" & Range("7:7").Address & "=""Signature"")*column("
& Range("7:7").Address & "))")

PlageImprimée = Range(Cells(1, 1), Cells(DernLign, n°ColSign)).Address

ActiveSheet.PageSetup.PrintArea = PlageImprimée
ActiveWindow.SelectedSheets.PrintPreview
'----------------

Rows("1:200").Hidden = False

End Sub
'------

Puis, dans chaque module de feuille, j'ai :

'------
Private Sub MaMacro_Click()
MasqueEtImprime
End Sub
'------

Ca fonctionne avec la première feuille, puis "n°ColSign" me renvoit "Erreur
2015" sur les autres ...

JP

Bonsoir.
Je ne sais pas pourquoi, il faudrait voir ton classeur. Je n'ai pas
d'erreur chez moi. Ce qu'il y a de sûr, c'est que, si tu exécutes le code
depuis une autre feuille, comme le nom de la feuille n'est pas spécifié,
le calcul se fera sur les cellules de la feuille qui contient la macro,
pas la feuille active. Il convient donc de mettre la macro dans un module
standard.
Daniel

Bonsoir,

J'ai un code qui fonctionne bien lorsqu'il est lancé (à partir d'un
bouton de contrôle) depuis une feuille. Si je le lance depuis une autre
feuille, j'ai l'erreur suivante :

n°ColSign me renvoit "Erreur 2015" !

'-- le code ---

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")

'--------------

PS : Débogage - CompilerVBAProject - n'indique aucune erreur !

Merci pour votre aide,

JP








Avatar
Daniel.C
Sans comprendre, j'ai mis :
n°ColSign = Range("A1:Z200").Find("Signature", [Z200], , ,
xlByColumns, xlPrevious).Column
n°LignSign = Range("A1:Z200").Find("Signature", [Z200], , ,
xlByRows, xlPrevious).Row
qui semble fonctionner.
Daniel

Bonsoir Daniel,

Merci pour ta sollicitude.

Le fichier est là : http://cjoint.com/?lktTGNinG5

Il s'agit du classeur d'un collègue ... L'idée est de masquer les lignes sur
lesquelles il ni a pas de saisie(s).
J'ai volontairement détaillé les explications du code pour que mon collègue
puisse se l'approprier le cas échéant. Je sais, c'est un peu lourd, mais ça
me permet d'apprendre ;-)

Bon courage, et encore merci !

JP

PS : ça fonctionne avec la première feuille, mais pas les suivantes (en tout
cas, chez moi !)


Bonjour.
Je viens de faire un test. Ca fonctionne sans problème. Peux-tu mettre ton
classeur, en effaçant les données confidentielles sur www.cjoint.com et
poster ici l'adresse générée ?
Daniel

Bonjour Daniel,

Merci pour ton aide.

Le code est bien placé dans un module standard.
'------
Sub MasqueEtImprime()

Dim PlageImprimée As Variant
Dim NombresDeDates As Integer
Dim z As Integer
Dim y As Integer
Dim i As Integer
Dim activeSheets
Dim LigneDeDates As Integer
Dim n°LignSign As Integer
Dim n°ColSign As Integer
Dim PremLign As Integer
Dim DernLign As Integer
Dim DécalageGauche As Integer
Dim DécalageDroite As Integer
Dim LargeurThéoriqueDuTableau As Integer

Application.ScreenUpdating = False

'-- Calcul des coordonnées de "Signature" >>

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")
n°LignSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*row(" & Range("A1:Z200").Address & "))")


'-- Evaluation des cellules vides de la zone à traiter + masquage si VRAI
>>

PremLign = n°LignSign + 1 'première ligne de la zone
à évaluer
DernLign = Range("A65536").End(xlUp).Row 'dernière ligne de la zone
à évaluer

DécalageGauche = 1 'bord gauche de la zone à
traiter
DécalageDroite = 3 'bord droit de la zone à
traiter

LargeurThéoriqueDuTableau = n°ColSign - DécalageGauche -
DécalageDroite

For i = DernLign To PremLign Step -1

If Application.CountBlank(Range _
(Cells(i, DécalageGauche + 1), _
Cells(i, n°ColSign - DécalageDroite))) _
= LargeurThéoriqueDuTableau Then Rows(i).Hidden = True

Next


'--- Calculer la plage à imprimer >>


y = Evaluate("MAX((" & Range("7:7").Address &
"=""Signature"")*column(" & Range("7:7").Address & "))")

PlageImprimée = Range(Cells(1, 1), Cells(DernLign, n°ColSign)).Address

ActiveSheet.PageSetup.PrintArea = PlageImprimée
ActiveWindow.SelectedSheets.PrintPreview
'----------------

Rows("1:200").Hidden = False

End Sub
'------

Puis, dans chaque module de feuille, j'ai :

'------
Private Sub MaMacro_Click()
MasqueEtImprime
End Sub
'------

Ca fonctionne avec la première feuille, puis "n°ColSign" me renvoit
"Erreur 2015" sur les autres ...

JP

Bonsoir.
Je ne sais pas pourquoi, il faudrait voir ton classeur. Je n'ai pas
d'erreur chez moi. Ce qu'il y a de sûr, c'est que, si tu exécutes le code
depuis une autre feuille, comme le nom de la feuille n'est pas spécifié,
le calcul se fera sur les cellules de la feuille qui contient la macro,
pas la feuille active. Il convient donc de mettre la macro dans un module
standard.
Daniel

Bonsoir,

J'ai un code qui fonctionne bien lorsqu'il est lancé (à partir d'un
bouton de contrôle) depuis une feuille. Si je le lance depuis une autre
feuille, j'ai l'erreur suivante :

n°ColSign me renvoit "Erreur 2015" !

'-- le code ---

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")

'--------------

PS : Débogage - CompilerVBAProject - n'indique aucune erreur !

Merci pour votre aide,

JP










Avatar
j-pascal
Merci Daniel,

Etrange, non ? Je sens que ça va me travailler ... !
En attendant, j'essaye ta proposition.

Encore merci,

JP

Sans comprendre, j'ai mis :
n°ColSign = Range("A1:Z200").Find("Signature", [Z200], , , xlByColumns,
xlPrevious).Column
n°LignSign = Range("A1:Z200").Find("Signature", [Z200], , , xlByRows,
xlPrevious).Row
qui semble fonctionner.
Daniel

Bonsoir Daniel,

Merci pour ta sollicitude.

Le fichier est là : http://cjoint.com/?lktTGNinG5

Il s'agit du classeur d'un collègue ... L'idée est de masquer les lignes
sur lesquelles il ni a pas de saisie(s).
J'ai volontairement détaillé les explications du code pour que mon collègue
puisse se l'approprier le cas échéant. Je sais, c'est un peu lourd, mais ça
me permet d'apprendre ;-)

Bon courage, et encore merci !

JP

PS : ça fonctionne avec la première feuille, mais pas les suivantes (en
tout cas, chez moi !)


Bonjour.
Je viens de faire un test. Ca fonctionne sans problème. Peux-tu mettre ton
classeur, en effaçant les données confidentielles sur www.cjoint.com et
poster ici l'adresse générée ?
Daniel

Bonjour Daniel,

Merci pour ton aide.

Le code est bien placé dans un module standard.
'------
Sub MasqueEtImprime()

Dim PlageImprimée As Variant
Dim NombresDeDates As Integer
Dim z As Integer
Dim y As Integer
Dim i As Integer
Dim activeSheets
Dim LigneDeDates As Integer
Dim n°LignSign As Integer
Dim n°ColSign As Integer
Dim PremLign As Integer
Dim DernLign As Integer
Dim DécalageGauche As Integer
Dim DécalageDroite As Integer
Dim LargeurThéoriqueDuTableau As Integer

Application.ScreenUpdating = False

'-- Calcul des coordonnées de "Signature" >>

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")
n°LignSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*row(" & Range("A1:Z200").Address & "))")


'-- Evaluation des cellules vides de la zone à traiter + masquage si VRAI
>>

PremLign = n°LignSign + 1 'première ligne de la zone
à évaluer
DernLign = Range("A65536").End(xlUp).Row 'dernière ligne de la zone
à évaluer

DécalageGauche = 1 'bord gauche de la zone à
traiter
DécalageDroite = 3 'bord droit de la zone à
traiter

LargeurThéoriqueDuTableau = n°ColSign - DécalageGauche -
DécalageDroite

For i = DernLign To PremLign Step -1

If Application.CountBlank(Range _
(Cells(i, DécalageGauche + 1), _
Cells(i, n°ColSign - DécalageDroite))) _
= LargeurThéoriqueDuTableau Then Rows(i).Hidden = True

Next


'--- Calculer la plage à imprimer >>


y = Evaluate("MAX((" & Range("7:7").Address &
"=""Signature"")*column(" & Range("7:7").Address & "))")

PlageImprimée = Range(Cells(1, 1), Cells(DernLign,
n°ColSign)).Address

ActiveSheet.PageSetup.PrintArea = PlageImprimée
ActiveWindow.SelectedSheets.PrintPreview
'----------------

Rows("1:200").Hidden = False

End Sub
'------

Puis, dans chaque module de feuille, j'ai :

'------
Private Sub MaMacro_Click()
MasqueEtImprime
End Sub
'------

Ca fonctionne avec la première feuille, puis "n°ColSign" me renvoit
"Erreur 2015" sur les autres ...

JP

Bonsoir.
Je ne sais pas pourquoi, il faudrait voir ton classeur. Je n'ai pas
d'erreur chez moi. Ce qu'il y a de sûr, c'est que, si tu exécutes le
code depuis une autre feuille, comme le nom de la feuille n'est pas
spécifié, le calcul se fera sur les cellules de la feuille qui contient
la macro, pas la feuille active. Il convient donc de mettre la macro
dans un module standard.
Daniel

Bonsoir,

J'ai un code qui fonctionne bien lorsqu'il est lancé (à partir d'un
bouton de contrôle) depuis une feuille. Si je le lance depuis une autre
feuille, j'ai l'erreur suivante :

n°ColSign me renvoit "Erreur 2015" !

'-- le code ---

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")

'--------------

PS : Débogage - CompilerVBAProject - n'indique aucune erreur !

Merci pour votre aide,

JP












Avatar
Daniel.C
Explication :
Il y a quelque part une valeur incorrecte dans la plage A1:Z200
Si en AA1, tu entrers la formule matricielle :
=SOMME(N(A1:Z200="signature"))
tu obtiens "#VALEUR!" pour la feuuille "Février".
Daniel
j-pascal avait écrit le 10/11/2008 :
Merci Daniel,

Etrange, non ? Je sens que ça va me travailler ... !
En attendant, j'essaye ta proposition.

Encore merci,

JP

Sans comprendre, j'ai mis :
n°ColSign = Range("A1:Z200").Find("Signature", [Z200], , , xlByColumns,
xlPrevious).Column
n°LignSign = Range("A1:Z200").Find("Signature", [Z200], , , xlByRows,
xlPrevious).Row
qui semble fonctionner.
Daniel

Bonsoir Daniel,

Merci pour ta sollicitude.

Le fichier est là : http://cjoint.com/?lktTGNinG5

Il s'agit du classeur d'un collègue ... L'idée est de masquer les lignes
sur lesquelles il ni a pas de saisie(s).
J'ai volontairement détaillé les explications du code pour que mon
collègue puisse se l'approprier le cas échéant. Je sais, c'est un peu
lourd, mais ça me permet d'apprendre ;-)

Bon courage, et encore merci !

JP

PS : ça fonctionne avec la première feuille, mais pas les suivantes (en
tout cas, chez moi !)


Bonjour.
Je viens de faire un test. Ca fonctionne sans problème. Peux-tu mettre
ton classeur, en effaçant les données confidentielles sur www.cjoint.com
et poster ici l'adresse générée ?
Daniel

Bonjour Daniel,

Merci pour ton aide.

Le code est bien placé dans un module standard.
'------
Sub MasqueEtImprime()

Dim PlageImprimée As Variant
Dim NombresDeDates As Integer
Dim z As Integer
Dim y As Integer
Dim i As Integer
Dim activeSheets
Dim LigneDeDates As Integer
Dim n°LignSign As Integer
Dim n°ColSign As Integer
Dim PremLign As Integer
Dim DernLign As Integer
Dim DécalageGauche As Integer
Dim DécalageDroite As Integer
Dim LargeurThéoriqueDuTableau As Integer

Application.ScreenUpdating = False

'-- Calcul des coordonnées de "Signature" >>

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")
n°LignSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*row(" & Range("A1:Z200").Address & "))")


'-- Evaluation des cellules vides de la zone à traiter + masquage si
VRAI
>>

PremLign = n°LignSign + 1 'première ligne de la
zone à évaluer
DernLign = Range("A65536").End(xlUp).Row 'dernière ligne de la
zone à évaluer

DécalageGauche = 1 'bord gauche de la zone à
traiter
DécalageDroite = 3 'bord droit de la zone à
traiter

LargeurThéoriqueDuTableau = n°ColSign - DécalageGauche -
DécalageDroite

For i = DernLign To PremLign Step -1

If Application.CountBlank(Range _
(Cells(i, DécalageGauche + 1), _
Cells(i, n°ColSign - DécalageDroite))) _
= LargeurThéoriqueDuTableau Then Rows(i).Hidden = True

Next


'--- Calculer la plage à imprimer >>


y = Evaluate("MAX((" & Range("7:7").Address &
"=""Signature"")*column(" & Range("7:7").Address & "))")

PlageImprimée = Range(Cells(1, 1), Cells(DernLign,
n°ColSign)).Address

ActiveSheet.PageSetup.PrintArea = PlageImprimée
ActiveWindow.SelectedSheets.PrintPreview
'----------------

Rows("1:200").Hidden = False

End Sub
'------

Puis, dans chaque module de feuille, j'ai :

'------
Private Sub MaMacro_Click()
MasqueEtImprime
End Sub
'------

Ca fonctionne avec la première feuille, puis "n°ColSign" me renvoit
"Erreur 2015" sur les autres ...

JP

Bonsoir.
Je ne sais pas pourquoi, il faudrait voir ton classeur. Je n'ai pas
d'erreur chez moi. Ce qu'il y a de sûr, c'est que, si tu exécutes le
code depuis une autre feuille, comme le nom de la feuille n'est pas
spécifié, le calcul se fera sur les cellules de la feuille qui contient
la macro, pas la feuille active. Il convient donc de mettre la macro
dans un module standard.
Daniel

Bonsoir,

J'ai un code qui fonctionne bien lorsqu'il est lancé (à partir d'un
bouton de contrôle) depuis une feuille. Si je le lance depuis une
autre feuille, j'ai l'erreur suivante :

n°ColSign me renvoit "Erreur 2015" !

'-- le code ---

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")

'--------------

PS : Débogage - CompilerVBAProject - n'indique aucune erreur !

Merci pour votre aide,

JP














Avatar
j-pascal
Encore Merci !
Tu as raison, "mon" code ne fonctionne pas dès lors qu'une cellule de
la dite plage contient une erreur. Je n'aurais pas construit le tableau
comme ça, mais bon ...
Y-a-t'il un moyen de détecter toutes les erreurs d'une feuille ?
J'imagine qu'il faut passer par un "on error resume next ..." et
indiquer à l'utilisateur qu'il doit traiter ses erreurs ... et sortir
du code proprement.
@+
JP
PS : je lance un nouveau fil sur la série qui pose pb.

Explication :
Il y a quelque part une valeur incorrecte dans la plage A1:Z200
Si en AA1, tu entrers la formule matricielle :
=SOMME(N(A1:Z200="signature"))
tu obtiens "#VALEUR!" pour la feuuille "Février".
Daniel
j-pascal avait écrit le 10/11/2008 :
Merci Daniel,

Etrange, non ? Je sens que ça va me travailler ... !
En attendant, j'essaye ta proposition.

Encore merci,

JP

Sans comprendre, j'ai mis :
n°ColSign = Range("A1:Z200").Find("Signature", [Z200], , ,
xlByColumns, xlPrevious).Column
n°LignSign = Range("A1:Z200").Find("Signature", [Z200], , , xlByRows,
xlPrevious).Row
qui semble fonctionner.
Daniel

Bonsoir Daniel,

Merci pour ta sollicitude.

Le fichier est là : http://cjoint.com/?lktTGNinG5

Il s'agit du classeur d'un collègue ... L'idée est de masquer les lignes
sur lesquelles il ni a pas de saisie(s).
J'ai volontairement détaillé les explications du code pour que mon
collègue puisse se l'approprier le cas échéant. Je sais, c'est un peu
lourd, mais ça me permet d'apprendre ;-)

Bon courage, et encore merci !

JP

PS : ça fonctionne avec la première feuille, mais pas les suivantes (en
tout cas, chez moi !)


Bonjour.
Je viens de faire un test. Ca fonctionne sans problème. Peux-tu mettre
ton classeur, en effaçant les données confidentielles sur www.cjoint.com
et poster ici l'adresse générée ?
Daniel

Bonjour Daniel,

Merci pour ton aide.

Le code est bien placé dans un module standard.
'------
Sub MasqueEtImprime()

Dim PlageImprimée As Variant
Dim NombresDeDates As Integer
Dim z As Integer
Dim y As Integer
Dim i As Integer
Dim activeSheets
Dim LigneDeDates As Integer
Dim n°LignSign As Integer
Dim n°ColSign As Integer
Dim PremLign As Integer
Dim DernLign As Integer
Dim DécalageGauche As Integer
Dim DécalageDroite As Integer
Dim LargeurThéoriqueDuTableau As Integer

Application.ScreenUpdating = False

'-- Calcul des coordonnées de "Signature" >>

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")
n°LignSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*row(" & Range("A1:Z200").Address & "))")


'-- Evaluation des cellules vides de la zone à traiter + masquage si
VRAI
>>

PremLign = n°LignSign + 1 'première ligne de la
zone à évaluer
DernLign = Range("A65536").End(xlUp).Row 'dernière ligne de la
zone à évaluer

DécalageGauche = 1 'bord gauche de la zone
à traiter
DécalageDroite = 3 'bord droit de la zone à
traiter

LargeurThéoriqueDuTableau = n°ColSign - DécalageGauche -
DécalageDroite

For i = DernLign To PremLign Step -1

If Application.CountBlank(Range _
(Cells(i, DécalageGauche + 1), _
Cells(i, n°ColSign - DécalageDroite))) _
= LargeurThéoriqueDuTableau Then Rows(i).Hidden = True

Next


'--- Calculer la plage à imprimer >>


y = Evaluate("MAX((" & Range("7:7").Address &
"=""Signature"")*column(" & Range("7:7").Address & "))")

PlageImprimée = Range(Cells(1, 1), Cells(DernLign,
n°ColSign)).Address

ActiveSheet.PageSetup.PrintArea = PlageImprimée
ActiveWindow.SelectedSheets.PrintPreview
'----------------

Rows("1:200").Hidden = False

End Sub
'------

Puis, dans chaque module de feuille, j'ai :

'------
Private Sub MaMacro_Click()
MasqueEtImprime
End Sub
'------

Ca fonctionne avec la première feuille, puis "n°ColSign" me renvoit
"Erreur 2015" sur les autres ...

JP

Bonsoir.
Je ne sais pas pourquoi, il faudrait voir ton classeur. Je n'ai pas
d'erreur chez moi. Ce qu'il y a de sûr, c'est que, si tu exécutes le
code depuis une autre feuille, comme le nom de la feuille n'est pas
spécifié, le calcul se fera sur les cellules de la feuille qui
contient la macro, pas la feuille active. Il convient donc de mettre
la macro dans un module standard.
Daniel

Bonsoir,

J'ai un code qui fonctionne bien lorsqu'il est lancé (à partir d'un
bouton de contrôle) depuis une feuille. Si je le lance depuis une
autre feuille, j'ai l'erreur suivante :

n°ColSign me renvoit "Erreur 2015" !

'-- le code ---

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")

'--------------

PS : Débogage - CompilerVBAProject - n'indique aucune erreur !

Merci pour votre aide,

JP
















Avatar
Daniel.C
Si tu es là, essaie la macro suivante qui liste les cellules en erreur
:

Sub test()
Dim c As Range
For Each c In [A1:Z200]
If IsError(c) Then
MsgBox c.Address
End If
Next c
End Sub

Daniel
j-pascal vient de nous annoncer :
Encore Merci !
Tu as raison, "mon" code ne fonctionne pas dès lors qu'une cellule de la dite
plage contient une erreur. Je n'aurais pas construit le tableau comme ça,
mais bon ...
Y-a-t'il un moyen de détecter toutes les erreurs d'une feuille ? J'imagine
qu'il faut passer par un "on error resume next ..." et indiquer à
l'utilisateur qu'il doit traiter ses erreurs ... et sortir du code
proprement.
@+
JP
PS : je lance un nouveau fil sur la série qui pose pb.

Explication :
Il y a quelque part une valeur incorrecte dans la plage A1:Z200
Si en AA1, tu entrers la formule matricielle :
=SOMME(N(A1:Z200="signature"))
tu obtiens "#VALEUR!" pour la feuuille "Février".
Daniel
j-pascal avait écrit le 10/11/2008 :
Merci Daniel,

Etrange, non ? Je sens que ça va me travailler ... !
En attendant, j'essaye ta proposition.

Encore merci,

JP

Sans comprendre, j'ai mis :
n°ColSign = Range("A1:Z200").Find("Signature", [Z200], , ,
xlByColumns, xlPrevious).Column
n°LignSign = Range("A1:Z200").Find("Signature", [Z200], , , xlByRows,
xlPrevious).Row
qui semble fonctionner.
Daniel

Bonsoir Daniel,

Merci pour ta sollicitude.

Le fichier est là : http://cjoint.com/?lktTGNinG5

Il s'agit du classeur d'un collègue ... L'idée est de masquer les lignes
sur lesquelles il ni a pas de saisie(s).
J'ai volontairement détaillé les explications du code pour que mon
collègue puisse se l'approprier le cas échéant. Je sais, c'est un peu
lourd, mais ça me permet d'apprendre ;-)

Bon courage, et encore merci !

JP

PS : ça fonctionne avec la première feuille, mais pas les suivantes (en
tout cas, chez moi !)


Bonjour.
Je viens de faire un test. Ca fonctionne sans problème. Peux-tu mettre
ton classeur, en effaçant les données confidentielles sur
www.cjoint.com et poster ici l'adresse générée ?
Daniel

Bonjour Daniel,

Merci pour ton aide.

Le code est bien placé dans un module standard.
'------
Sub MasqueEtImprime()

Dim PlageImprimée As Variant
Dim NombresDeDates As Integer
Dim z As Integer
Dim y As Integer
Dim i As Integer
Dim activeSheets
Dim LigneDeDates As Integer
Dim n°LignSign As Integer
Dim n°ColSign As Integer
Dim PremLign As Integer
Dim DernLign As Integer
Dim DécalageGauche As Integer
Dim DécalageDroite As Integer
Dim LargeurThéoriqueDuTableau As Integer

Application.ScreenUpdating = False

'-- Calcul des coordonnées de "Signature" >>

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")
n°LignSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*row(" & Range("A1:Z200").Address & "))")


'-- Evaluation des cellules vides de la zone à traiter + masquage si
VRAI
>>

PremLign = n°LignSign + 1 'première ligne de la
zone à évaluer
DernLign = Range("A65536").End(xlUp).Row 'dernière ligne de la
zone à évaluer

DécalageGauche = 1 'bord gauche de la zone
à traiter
DécalageDroite = 3 'bord droit de la zone
à traiter

LargeurThéoriqueDuTableau = n°ColSign - DécalageGauche -
DécalageDroite

For i = DernLign To PremLign Step -1

If Application.CountBlank(Range _
(Cells(i, DécalageGauche + 1), _
Cells(i, n°ColSign - DécalageDroite))) _
= LargeurThéoriqueDuTableau Then Rows(i).Hidden = True

Next


'--- Calculer la plage à imprimer >>


y = Evaluate("MAX((" & Range("7:7").Address &
"=""Signature"")*column(" & Range("7:7").Address & "))")

PlageImprimée = Range(Cells(1, 1), Cells(DernLign,
n°ColSign)).Address

ActiveSheet.PageSetup.PrintArea = PlageImprimée
ActiveWindow.SelectedSheets.PrintPreview
'----------------

Rows("1:200").Hidden = False

End Sub
'------

Puis, dans chaque module de feuille, j'ai :

'------
Private Sub MaMacro_Click()
MasqueEtImprime
End Sub
'------

Ca fonctionne avec la première feuille, puis "n°ColSign" me renvoit
"Erreur 2015" sur les autres ...

JP

Bonsoir.
Je ne sais pas pourquoi, il faudrait voir ton classeur. Je n'ai pas
d'erreur chez moi. Ce qu'il y a de sûr, c'est que, si tu exécutes le
code depuis une autre feuille, comme le nom de la feuille n'est pas
spécifié, le calcul se fera sur les cellules de la feuille qui
contient la macro, pas la feuille active. Il convient donc de mettre
la macro dans un module standard.
Daniel

Bonsoir,

J'ai un code qui fonctionne bien lorsqu'il est lancé (à partir d'un
bouton de contrôle) depuis une feuille. Si je le lance depuis une
autre feuille, j'ai l'erreur suivante :

n°ColSign me renvoit "Erreur 2015" !

'-- le code ---

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")

'--------------

PS : Débogage - CompilerVBAProject - n'indique aucune erreur !

Merci pour votre aide,

JP


















Avatar
j-pascal
Fantastique !
Comme test préliminaire à l'exécution de "mon" code, c'est génial !
Merci.
JP

Si tu es là, essaie la macro suivante qui liste les cellules en erreur :

Sub test()
Dim c As Range
For Each c In [A1:Z200]
If IsError(c) Then
MsgBox c.Address
End If
Next c
End Sub

Daniel
j-pascal vient de nous annoncer :
Encore Merci !
Tu as raison, "mon" code ne fonctionne pas dès lors qu'une cellule de la
dite plage contient une erreur. Je n'aurais pas construit le tableau comme
ça, mais bon ...
Y-a-t'il un moyen de détecter toutes les erreurs d'une feuille ? J'imagine
qu'il faut passer par un "on error resume next ..." et indiquer à
l'utilisateur qu'il doit traiter ses erreurs ... et sortir du code
proprement.
@+
JP
PS : je lance un nouveau fil sur la série qui pose pb.

Explication :
Il y a quelque part une valeur incorrecte dans la plage A1:Z200
Si en AA1, tu entrers la formule matricielle :
=SOMME(N(A1:Z200="signature"))
tu obtiens "#VALEUR!" pour la feuuille "Février".
Daniel
j-pascal avait écrit le 10/11/2008 :
Merci Daniel,

Etrange, non ? Je sens que ça va me travailler ... !
En attendant, j'essaye ta proposition.

Encore merci,

JP

Sans comprendre, j'ai mis :
n°ColSign = Range("A1:Z200").Find("Signature", [Z200], , ,
xlByColumns, xlPrevious).Column
n°LignSign = Range("A1:Z200").Find("Signature", [Z200], , ,
xlByRows, xlPrevious).Row
qui semble fonctionner.
Daniel

Bonsoir Daniel,

Merci pour ta sollicitude.

Le fichier est là : http://cjoint.com/?lktTGNinG5

Il s'agit du classeur d'un collègue ... L'idée est de masquer les
lignes sur lesquelles il ni a pas de saisie(s).
J'ai volontairement détaillé les explications du code pour que mon
collègue puisse se l'approprier le cas échéant. Je sais, c'est un peu
lourd, mais ça me permet d'apprendre ;-)

Bon courage, et encore merci !

JP

PS : ça fonctionne avec la première feuille, mais pas les suivantes (en
tout cas, chez moi !)


Bonjour.
Je viens de faire un test. Ca fonctionne sans problème. Peux-tu mettre
ton classeur, en effaçant les données confidentielles sur
www.cjoint.com et poster ici l'adresse générée ?
Daniel

Bonjour Daniel,

Merci pour ton aide.

Le code est bien placé dans un module standard.
'------
Sub MasqueEtImprime()

Dim PlageImprimée As Variant
Dim NombresDeDates As Integer
Dim z As Integer
Dim y As Integer
Dim i As Integer
Dim activeSheets
Dim LigneDeDates As Integer
Dim n°LignSign As Integer
Dim n°ColSign As Integer
Dim PremLign As Integer
Dim DernLign As Integer
Dim DécalageGauche As Integer
Dim DécalageDroite As Integer
Dim LargeurThéoriqueDuTableau As Integer

Application.ScreenUpdating = False

'-- Calcul des coordonnées de "Signature" >>

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")
n°LignSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*row(" & Range("A1:Z200").Address & "))")


'-- Evaluation des cellules vides de la zone à traiter + masquage si
VRAI
>>

PremLign = n°LignSign + 1 'première ligne de la
zone à évaluer
DernLign = Range("A65536").End(xlUp).Row 'dernière ligne de la
zone à évaluer

DécalageGauche = 1 'bord gauche de la
zone à traiter
DécalageDroite = 3 'bord droit de la zone
à traiter

LargeurThéoriqueDuTableau = n°ColSign - DécalageGauche -
DécalageDroite

For i = DernLign To PremLign Step -1

If Application.CountBlank(Range _
(Cells(i, DécalageGauche + 1), _
Cells(i, n°ColSign - DécalageDroite))) _
= LargeurThéoriqueDuTableau Then Rows(i).Hidden = True

Next


'--- Calculer la plage à imprimer >>


y = Evaluate("MAX((" & Range("7:7").Address &
"=""Signature"")*column(" & Range("7:7").Address & "))")

PlageImprimée = Range(Cells(1, 1), Cells(DernLign,
n°ColSign)).Address

ActiveSheet.PageSetup.PrintArea = PlageImprimée
ActiveWindow.SelectedSheets.PrintPreview
'----------------

Rows("1:200").Hidden = False

End Sub
'------

Puis, dans chaque module de feuille, j'ai :

'------
Private Sub MaMacro_Click()
MasqueEtImprime
End Sub
'------

Ca fonctionne avec la première feuille, puis "n°ColSign" me renvoit
"Erreur 2015" sur les autres ...

JP

Bonsoir.
Je ne sais pas pourquoi, il faudrait voir ton classeur. Je n'ai pas
d'erreur chez moi. Ce qu'il y a de sûr, c'est que, si tu exécutes le
code depuis une autre feuille, comme le nom de la feuille n'est pas
spécifié, le calcul se fera sur les cellules de la feuille qui
contient la macro, pas la feuille active. Il convient donc de mettre
la macro dans un module standard.
Daniel

Bonsoir,

J'ai un code qui fonctionne bien lorsqu'il est lancé (à partir d'un
bouton de contrôle) depuis une feuille. Si je le lance depuis une
autre feuille, j'ai l'erreur suivante :

n°ColSign me renvoit "Erreur 2015" !

'-- le code ---

n°ColSign = Evaluate("MAX((" & Range("A1:Z200").Address &
"=""Signature"")*column(" & Range("A1:Z200").Address & "))")

'--------------

PS : Débogage - CompilerVBAProject - n'indique aucune erreur !

Merci pour votre aide,

JP