OVH Cloud OVH Cloud

Erreur #valeur! par endroit en appliquant une formule

19 réponses
Avatar
Phenix21
Bonjour,

Dans mon code VBA, j'appelle une fonction numeropage() de Laurent
Longre.

Jusque ce matin tout marchait bien, il affichait les num=E9ros de pages.
Et puis depuis ce matin et une de mes manips (je ne l'ai fait
num=E9roter que les cellules qui m'int=E9resse, je gagnais du temps), la
formule s'applique bien sur les premi=E8res valeurs, puis m'affiche
#valeur!, puis refonctionne sur les derni=E8res valeurs.
Lorsque le d=E9roulement de ma macro est termin=E9, j'ai laiss=E9 les
formules dans les cases. En faisant un double clic sur les #valeur!,
certaines cellules se recalculent, d'autres continuent d'afficher
#valeur!.

Toutes les cellules ont le m=EAme format, je comprends pas... Est-ce un
probl=E8me de recalcul automatique ? Quelqu'un a-t-il une solution ?

Merci d'avance pour vos r=E9ponses

10 réponses

1 2
Avatar
Ardus Petus
Bonjour Phenisque,

Peux-tu publier la formule?

--
AP

"Phenix21" a écrit dans le message de news:

Bonjour,

Dans mon code VBA, j'appelle une fonction numeropage() de Laurent
Longre.

Jusque ce matin tout marchait bien, il affichait les numéros de pages.
Et puis depuis ce matin et une de mes manips (je ne l'ai fait
numéroter que les cellules qui m'intéresse, je gagnais du temps), la
formule s'applique bien sur les premières valeurs, puis m'affiche
#valeur!, puis refonctionne sur les dernières valeurs.
Lorsque le déroulement de ma macro est terminé, j'ai laissé les
formules dans les cases. En faisant un double clic sur les #valeur!,
certaines cellules se recalculent, d'autres continuent d'afficher
#valeur!.

Toutes les cellules ont le même format, je comprends pas... Est-ce un
problème de recalcul automatique ? Quelqu'un a-t-il une solution ?

Merci d'avance pour vos réponses
Avatar
Phenix21
Ma macro lance la fonction de cette façon :

Sheets("BPU").Select
plageBPU_fin.Select
For i = 1 To nb_val_fin
Cells(i, 1).Select
If Selection.Style = "Titre1" Then
Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])"
ElseIf Selection.Style = "Titre2" Then
Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])"
End If
Next



et la fonction est la suivante :

Function NumeroPage(Cellule As Range) As Integer
'L Longre, mpfe

Dim VPC As Integer, HPC As Integer
Dim VPB As VPageBreak, HPB As HPageBreak
Dim Wksht As Worksheet
Dim Col As Integer, Ligne As Long

Set Wksht = Cellule.Worksheet
Ligne = Cellule.Row
Col = Cellule.Column
If Wksht.PageSetup.Order = xlDownThenOver Then
HPC = Wksht.HPageBreaks.Count + 1
VPC = 1
Else
VPC = Wksht.VPageBreaks.Count + 1
HPC = 1
End If
NumeroPage = 1
For Each VPB In Wksht.VPageBreaks
If VPB.Location.Column > Col Then Exit For
NumeroPage = NumeroPage + HPC
Next VPB
For Each HPB In Wksht.HPageBreaks
If HPB.Location.Row > Ligne Then Exit For
NumeroPage = NumeroPage + VPC
Next HPB

End Function


Ce qui m'étonne, c'est que ca marche pour une partie et pas pour
l'autre. Encore ca n'aurait fonctionné que pour le début, j'aurais pu
comprendre, mais là ! Le résultat obtenu est le suivant (j'ai
supprimé les lignes blanches pour que cà soit moins long...) :

1
1
1
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
6
6
6
6
7
7
7
7
8


Sur ce, bon appétit !
Avatar
Ardus Petus
Ca marche bien chez moi...

Peux-tu mettre ton classeur sur http://cjoint.com ?

Bon appétit,
--
AP

"Phenix21" a écrit dans le message de news:

Ma macro lance la fonction de cette façon :

Sheets("BPU").Select
plageBPU_fin.Select
For i = 1 To nb_val_fin
Cells(i, 1).Select
If Selection.Style = "Titre1" Then
Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])"
ElseIf Selection.Style = "Titre2" Then
Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])"
End If
Next



et la fonction est la suivante :

Function NumeroPage(Cellule As Range) As Integer
'L Longre, mpfe

Dim VPC As Integer, HPC As Integer
Dim VPB As VPageBreak, HPB As HPageBreak
Dim Wksht As Worksheet
Dim Col As Integer, Ligne As Long

Set Wksht = Cellule.Worksheet
Ligne = Cellule.Row
Col = Cellule.Column
If Wksht.PageSetup.Order = xlDownThenOver Then
HPC = Wksht.HPageBreaks.Count + 1
VPC = 1
Else
VPC = Wksht.VPageBreaks.Count + 1
HPC = 1
End If
NumeroPage = 1
For Each VPB In Wksht.VPageBreaks
If VPB.Location.Column > Col Then Exit For
NumeroPage = NumeroPage + HPC
Next VPB
For Each HPB In Wksht.HPageBreaks
If HPB.Location.Row > Ligne Then Exit For
NumeroPage = NumeroPage + VPC
Next HPB

End Function


Ce qui m'étonne, c'est que ca marche pour une partie et pas pour
l'autre. Encore ca n'aurait fonctionné que pour le début, j'aurais pu
comprendre, mais là ! Le résultat obtenu est le suivant (j'ai
supprimé les lignes blanches pour que cà soit moins long...) :

1
1
1
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
#VALEUR!
6
6
6
6
7
7
7
7
8


Sur ce, bon appétit !
Avatar
Phenix21
http://cjoint.com/data/ftonZ0d450.htm

et voilà ! Merci pour ton aide ;)

en lançant la même fonction à partir d'une autre macro ca marche
également sans problème chez moi !

PS : je suis ouvert à toute proposition pour l'amélioration de mon
fichier ! lol
Avatar
Ardus Petus
Il se plante sur:
For Each HPB In Wksht.HPageBreaks
à la fin de la proc NumeroPage

J'ai essayé de contourner: pas moyen!

Je continue à chercher

Cordialement,
--
AP

"Phenix21" a écrit dans le message de news:

http://cjoint.com/data/ftonZ0d450.htm

et voilà ! Merci pour ton aide ;)

en lançant la même fonction à partir d'une autre macro ca marche
également sans problème chez moi !

PS : je suis ouvert à toute proposition pour l'amélioration de mon
fichier ! lol
Avatar
Phenix21
Merci beaucoup de t'investir ;)

Au risque de me répéter, as-tu une idée sur pourquoi ca marche au
début, à la fin, mais pas au milieu ? si il plante sur cette ligne,
normalement il devrait le faire sur toutes non ?
Avatar
Phenix21
Pour info, je viens de créer une macro "sommaire" qui reprend une
partie de la grande : cette macro sommaire numérote puis réalise le
sommaire.

Je lance d'abord la grande => pb de numérotation toujours présent.
Je lance la macro "sommaire" => la numérotation redevient OK ! Par
contre pour que ça marche il faut que les numéros de page aient été
effacés dans la feuille BPU...

Je te joins tout çà, mais j'avoue ne pas tout comprendre, voire même
rien comprendre ! lol

http://cjoint.com/?ftp6L74C58
Avatar
Ardus Petus
Petite variante.
Ca ne résoud pas le pb, mais c'est plus propre:

'Numérotation des pages
Sheets("BPU").Select
plageBPU_fin.Select
For i = 1 To nb_val_fin
Cells(i, 1).Select
If Selection.Style = "Titre1" Then
Cells(i, 4).Value = NumeroPage(Cells(i, 1))
ElseIf Selection.Style = "Titre2" Then
Cells(i, 4).Value = NumeroPage(Cells(i, 1))
End If
Next

Cordialement,
--
AP

"Phenix21" a écrit dans le message de news:

Pour info, je viens de créer une macro "sommaire" qui reprend une
partie de la grande : cette macro sommaire numérote puis réalise le
sommaire.

Je lance d'abord la grande => pb de numérotation toujours présent.
Je lance la macro "sommaire" => la numérotation redevient OK ! Par
contre pour que ça marche il faut que les numéros de page aient été
effacés dans la feuille BPU...

Je te joins tout çà, mais j'avoue ne pas tout comprendre, voire même
rien comprendre ! lol

http://cjoint.com/?ftp6L74C58
Avatar
Phenix21
J'ai appliqué ta correction, et là VBA a carrément planté ! lol
Avatar
Phenix21
Je suis désolé, je pars en weekend et je n'aurais plus accès au net
(à mon grand désarroi d'ailleurs !).

Ardus Petus je te remercie encore beaucoup pour t'être penché sur mon
problème ! Je reprends le fil dès lundi matin ;)

Bon week end
1 2