Indice n'appartient pas à la sélection (VB XP vers 2007)

3 views
Skip to first unread message

ElXav

unread,
Nov 30, 2009, 5:37:38 AM11/30/09
to
Bonjour la Communauté,

En cours de migration d'Office XP vers 2007, je teste mes diverses
applications (surtout Access).
Ma seule application développée sous Excel XP se plante avec le
message d'erreur cité en objet.

Voici la portion de code:

On Error Resume Next
For intL = 3 To 15 Step 3
Err.Clear
.Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls
("TbxProPvc1" & Format(CStr(intL), "00"))) <<--- Génère l'erreur
If Err.Number <> 0 Then
MsgBox "Donnée incorrecte.", vbExclamation + vbOKOnly,
ETPP_NomApplication
Me.Controls("TbxProPvc1" & Format(CStr(intL),
"00")).SetFocus
GoTo Restituer_Fin
End If
Next intL

L'erreur 9 survient, alors que la valeur est bien placée dans la
cellule destination.

En debug, la feuille de destination est bien active.
Dans la fenêtre de debug, les actions suivantes sont valides:
.Cells(RngFind.Row, 33 + intL).Select ===> me sélectionne bien
la cellule destination
? CDbl(Me.Controls("TbxProPvc1" & Format(CStr(intL), "00"))) ===>
me renvoie bien la valeur numérique

Et en allant au plus simple et plus précis:
err.clear
.Cells(3, 36).value = "test"
? err.description => me renvoie le texte de l'erreur 9!!!

Les mêmes commandes dans un nouveau classeur passent bien.

D'avance merci pour vos suggestions.

Cordialement.

michdenis

unread,
Nov 30, 2009, 6:21:28 AM11/30/09
to
Bonjour,

Le nom du contr�le d�fini par ("TbxProPvc1" & Format(CStr(intL), "00")
Existe-t-il r�ellement ? pour chacun des chiffres dans ta boucle


For intL = 3 To 15 Step 3

C'est la signification de ton message d'erreur !

"ElXav" <el...@free.fr> a �crit dans le message de groupe de discussion :
8ca2e6d1-3a35-4af1...@m26g2000yqb.googlegroups.com...
Bonjour la Communaut�,

En cours de migration d'Office XP vers 2007, je teste mes diverses
applications (surtout Access).

Ma seule application d�velopp�e sous Excel XP se plante avec le
message d'erreur cit� en objet.

Voici la portion de code:

On Error Resume Next
For intL = 3 To 15 Step 3
Err.Clear
.Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls

("TbxProPvc1" & Format(CStr(intL), "00"))) <<--- G�n�re l'erreur
If Err.Number <> 0 Then
MsgBox "Donn�e incorrecte.", vbExclamation + vbOKOnly,


ETPP_NomApplication
Me.Controls("TbxProPvc1" & Format(CStr(intL),
"00")).SetFocus
GoTo Restituer_Fin
End If
Next intL

L'erreur 9 survient, alors que la valeur est bien plac�e dans la
cellule destination.

En debug, la feuille de destination est bien active.

Dans la fen�tre de debug, les actions suivantes sont valides:
.Cells(RngFind.Row, 33 + intL).Select ===> me s�lectionne bien


la cellule destination
? CDbl(Me.Controls("TbxProPvc1" & Format(CStr(intL), "00"))) ===>

me renvoie bien la valeur num�rique

Et en allant au plus simple et plus pr�cis:


err.clear
.Cells(3, 36).value = "test"
? err.description => me renvoie le texte de l'erreur 9!!!

Les m�mes commandes dans un nouveau classeur passent bien.

ElXav

unread,
Nov 30, 2009, 8:04:36 AM11/30/09
to
Bonjour,

Merci, mais ce n'est pas ça.
Comme je le dis dans mon message.
En XP ca camrche sans soucis, c'est une appli qui tourne depuis plus
de 2 ans.
Sous 2007. Le contenu des controles est bien mis en place dans les
cellules de destination, mais le message d'erreur sort tout de même.
Dans mon code, si je désactive l'instruction de sortie de ma boucle
(GoTo Restituer_Fin), le résultat est correct, mes 5 controles sont
bien traités.
Je m'interroge donc sur la sortie de ce message.

Cordialement.


On 30 nov, 12:21, "michdenis" <michde...@hotmail.com> wrote:
> Bonjour,
>
> Le nom du contrôle défini par ("TbxProPvc1" & Format(CStr(intL), "00")
> Existe-t-il réellement ? pour chacun des chiffres dans ta boucle


>  For intL = 3 To 15 Step 3
>
> C'est la signification de  ton message d'erreur !
>

> "ElXav" <el...@free.fr> a écrit dans le message de groupe de discussion :
> 8ca2e6d1-3a35-4af1-b8ae-b0844b3a3...@m26g2000yqb.googlegroups.com...
> Bonjour la Communauté,


>
> En cours de migration d'Office XP vers 2007, je teste mes diverses
> applications (surtout Access).

> Ma seule application développée sous Excel XP se plante avec le
> message d'erreur cité en objet.


>
> Voici la portion de code:
>
>         On Error Resume Next
>         For intL = 3 To 15 Step 3
>           Err.Clear
>           .Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls

> ("TbxProPvc1" & Format(CStr(intL), "00")))  <<--- Génère l'erreur
>           If Err.Number <> 0 Then
>             MsgBox "Donnée incorrecte.", vbExclamation + vbOKOnly,


> ETPP_NomApplication
>             Me.Controls("TbxProPvc1" & Format(CStr(intL),
> "00")).SetFocus
>             GoTo Restituer_Fin
>           End If
>         Next intL
>

> L'erreur 9 survient, alors que la valeur est bien placée dans la


> cellule destination.
>
> En debug, la feuille de destination est bien active.

> Dans la fenêtre de debug, les actions suivantes sont valides:
>   .Cells(RngFind.Row, 33 + intL).Select     ===> me sélectionne bien


> la cellule destination
>   ? CDbl(Me.Controls("TbxProPvc1" & Format(CStr(intL), "00")))    ===>

> me renvoie bien la valeur numérique
>
> Et en allant au plus simple et plus précis:


>   err.clear
>   .Cells(3, 36).value = "test"
>   ? err.description => me renvoie le texte de l'erreur 9!!!
>

> Les mêmes commandes dans un nouveau classeur passent bien.

michdenis

unread,
Nov 30, 2009, 8:27:17 AM11/30/09
to

| Le contenu des controles est bien mis en place

Je ne parlais pas du contenu mais de leur NOM.

D�sactive ta gestion d'erreur
"On error resume next" et "Err.Clear" et fait
rouler... D'ailleurs je ne comprends pas en quoi
c'est ligne de code peut g�n�rer une erreur :


For intL = 3 To 15 Step 3

Mais au del� de ces commentaires, ton message d'erreur est li�
au fait qu'excel ne trouve pas (mal orthographier - inexistant)
le nom du contr�le ou la feuille cit�s dans la proc�dure !


"ElXav" <el...@free.fr> a �crit dans le message de groupe de discussion :
af7b2623-91aa-4505...@p8g2000yqb.googlegroups.com...
Bonjour,

Merci, mais ce n'est pas �a.


Comme je le dis dans mon message.
En XP ca camrche sans soucis, c'est une appli qui tourne depuis plus
de 2 ans.
Sous 2007. Le contenu des controles est bien mis en place dans les

cellules de destination, mais le message d'erreur sort tout de m�me.
Dans mon code, si je d�sactive l'instruction de sortie de ma boucle
(GoTo Restituer_Fin), le r�sultat est correct, mes 5 controles sont
bien trait�s.


Je m'interroge donc sur la sortie de ce message.

Cordialement.


On 30 nov, 12:21, "michdenis" <michde...@hotmail.com> wrote:
> Bonjour,
>

> Le nom du contr�le d�fini par ("TbxProPvc1" & Format(CStr(intL), "00")
> Existe-t-il r�ellement ? pour chacun des chiffres dans ta boucle


> For intL = 3 To 15 Step 3
>
> C'est la signification de ton message d'erreur !
>

> "ElXav" <el...@free.fr> a �crit dans le message de groupe de discussion :
> 8ca2e6d1-3a35-4af1-b8ae-b0844b3a3...@m26g2000yqb.googlegroups.com...
> Bonjour la Communaut�,


>
> En cours de migration d'Office XP vers 2007, je teste mes diverses
> applications (surtout Access).

> Ma seule application d�velopp�e sous Excel XP se plante avec le
> message d'erreur cit� en objet.


>
> Voici la portion de code:
>
> On Error Resume Next
> For intL = 3 To 15 Step 3
> Err.Clear
> .Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls

> ("TbxProPvc1" & Format(CStr(intL), "00"))) <<--- G�n�re l'erreur
> If Err.Number <> 0 Then
> MsgBox "Donn�e incorrecte.", vbExclamation + vbOKOnly,


> ETPP_NomApplication
> Me.Controls("TbxProPvc1" & Format(CStr(intL),
> "00")).SetFocus
> GoTo Restituer_Fin
> End If
> Next intL
>

> L'erreur 9 survient, alors que la valeur est bien plac�e dans la


> cellule destination.
>
> En debug, la feuille de destination est bien active.

> Dans la fen�tre de debug, les actions suivantes sont valides:
> .Cells(RngFind.Row, 33 + intL).Select ===> me s�lectionne bien


> la cellule destination
> ? CDbl(Me.Controls("TbxProPvc1" & Format(CStr(intL), "00"))) ===>

> me renvoie bien la valeur num�rique
>
> Et en allant au plus simple et plus pr�cis:


> err.clear
> .Cells(3, 36).value = "test"
> ? err.description => me renvoie le texte de l'erreur 9!!!
>

> Les m�mes commandes dans un nouveau classeur passent bien.

ElXav

unread,
Nov 30, 2009, 8:52:55 AM11/30/09
to
Michdenis,

J'ai fait tourner le code suivant, comme tu me le suggères.

For intL = 3 To 15 Step 3

.Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls
("TbxProPvc1" & Format(CStr(intL), "00")))

Next intL

Il ne plante pas.
Le résultat dans la feuille excel est correct.

Alors pourquoi l'objet Err ans mon code original prend la valeur
9??!!??
J'ai placé ces lignes (On error et Err.Number) pour éviter un arrêt du
programme en cas d'anomalie lors de la mise à jour de la feuille
excel.

Pour info, des détails su mon code:

>> On Error Resume Next
J'active l'interception d'erreur pour toutes les lignes suivantes, Le
contrôle d'erreur ayant lieu juste après la mise à jour de la feuille
excel (transfert de mes données de ma boite de dialogue contenant mes
controles vers la feuille excel (pas pour gérer le For Next ;-) ))

>> For intL = 3 To 15 Step 3

Pour chaque controle à gérer

>> Err.Clear
Raz de l'objet Err. La ligne à monitorer est la suivante

>> .Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls("TbxProPvc1" & Format(CStr(intL), "00")))
Cette ligne transfert dans une cellule de la feuille active, le
contenu d'un controle de ma boite de dialogue. Les controles a traiter
sont nommés TbxProPvc103, TbxProPvc106, TbxProPvc109, TbxProPvc112 et
TbxProPvc115.

>> If Err.Number <> 0 Then
Je vérifie que la valeur mise dans la cellule ne provoque pas
d'erreur!
Normalement ca ne devrait pas. En tout cas, sous XP, Err.Number est
toujours à 0.

Le reste est la fin de la boucle, avec un saut à la fin de la
procédure en cas d'erreur.

Si tu as une idée...
Cordialement.


On 30 nov, 14:27, "michdenis" <michde...@hotmail.com> wrote:
> | Le contenu des controles est bien mis en place
>
> Je ne parlais pas du contenu mais de leur NOM.
>

> Désactive ta gestion d'erreur


> "On error resume next" et   "Err.Clear" et fait
> rouler... D'ailleurs je ne comprends pas en quoi

> c'est ligne de code peut générer une erreur :


>  For intL = 3 To 15 Step 3
>

> Mais au delà de ces commentaires, ton message d'erreur est lié


> au fait qu'excel ne trouve pas (mal orthographier - inexistant)

> le nom du contrôle ou la feuille cités dans la procédure !
>
> "ElXav" <el...@free.fr> a écrit dans le message de groupe de discussion :
> af7b2623-91aa-4505-93cc-5277c4788...@p8g2000yqb.googlegroups.com...
> Bonjour,
>
> Merci, mais ce n'est pas ça.


> Comme je le dis dans mon message.
> En XP ca camrche sans soucis, c'est une appli qui tourne depuis plus
> de 2 ans.
> Sous 2007. Le contenu des controles est bien mis en place dans les

> cellules de destination, mais le message d'erreur sort tout de même.
> Dans mon code, si je désactive l'instruction de sortie de ma boucle
> (GoTo Restituer_Fin), le résultat est correct, mes 5 controles sont
> bien traités.


> Je m'interroge donc sur la sortie de ce message.
>
> Cordialement.
>
> On 30 nov, 12:21, "michdenis" <michde...@hotmail.com> wrote:
>
>
>
> > Bonjour,
>

> > Le nom du contrôle défini par ("TbxProPvc1" & Format(CStr(intL), "00")
> > Existe-t-il réellement ? pour chacun des chiffres dans ta boucle


> >  For intL = 3 To 15 Step 3
>
> > C'est la signification de  ton message d'erreur !
>

> > "ElXav" <el...@free.fr> a écrit dans le message de groupe de discussion :
> > 8ca2e6d1-3a35-4af1-b8ae-b0844b3a3...@m26g2000yqb.googlegroups.com...
> > Bonjour la Communauté,


>
> > En cours de migration d'Office XP vers 2007, je teste mes diverses
> > applications (surtout Access).

> > Ma seule application développée sous Excel XP se plante avec le
> > message d'erreur cité en objet.


>
> > Voici la portion de code:
>
> >         On Error Resume Next
> >         For intL = 3 To 15 Step 3
> >           Err.Clear
> >           .Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls

> > ("TbxProPvc1" & Format(CStr(intL), "00")))  <<--- Génère l'erreur
> >           If Err.Number <> 0 Then
> >             MsgBox "Donnée incorrecte.", vbExclamation + vbOKOnly,


> > ETPP_NomApplication
> >             Me.Controls("TbxProPvc1" & Format(CStr(intL),
> > "00")).SetFocus
> >             GoTo Restituer_Fin
> >           End If
> >         Next intL
>

> > L'erreur 9 survient, alors que la valeur est bien placée dans la


> > cellule destination.
>
> > En debug, la feuille de destination est bien active.

> > Dans la fenêtre de debug, les actions suivantes sont valides:
> >   .Cells(RngFind.Row, 33 + intL).Select     ===> me sélectionne bien


> > la cellule destination
> >   ? CDbl(Me.Controls("TbxProPvc1" & Format(CStr(intL), "00")))    ===>

> > me renvoie bien la valeur numérique
>
> > Et en allant au plus simple et plus précis:


> >   err.clear
> >   .Cells(3, 36).value = "test"
> >   ? err.description => me renvoie le texte de l'erreur 9!!!
>

> > Les mêmes commandes dans un nouveau classeur passent bien.


>
> > D'avance merci pour vos suggestions.
>

> > Cordialement.- Masquer le texte des messages précédents -
>
> - Afficher le texte des messages précédents -

michdenis

unread,
Nov 30, 2009, 9:09:27 AM11/30/09
to
Je n'ai pas ton application sous les yeux...

L'erreur 9, �a fait d�j� 2 fois que je t'explique que c'est une
question de "nom" d'objet qu'excel ne trouve pas que ce
soit une feuille ou autre objet!

L'utilisation de "On Error Resume Next" doit �tre utilis�
parcimonieusement ! On doit savoir pourquoi on l'utilise...
et dans plusieurs cas, elle ne fait aucun sens si elle permet
de continuer l'ex�cution d'une proc�dure alors que la
feuille sur laquelle la proc�dure doit travailler est absente
du classeur... (ce n'est qu'un exemple)

Vaut mieux utiliser :
'-------------------------------
sub test()
Dim Gestion_Erreur as string

On error goto Gestion_Erreur
'Le code

Exit sub
Gestion_Erreur:
Msgbox Err.Number & ", " & Err.Description
'Et si on veut que le code se poursuivre � ligne
'suivante dans le code...
Resume next
End sub
'-------------------------------

Je ne peux t'en dire plus avec l'information que je dispose!

"ElXav" <el...@free.fr> a �crit dans le message de groupe de discussion :
51d68855-c2a8-4d50...@m20g2000vbp.googlegroups.com...
Michdenis,

J'ai fait tourner le code suivant, comme tu me le sugg�res.

For intL = 3 To 15 Step 3
.Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls
("TbxProPvc1" & Format(CStr(intL), "00")))
Next intL

Il ne plante pas.
Le r�sultat dans la feuille excel est correct.

Alors pourquoi l'objet Err ans mon code original prend la valeur
9??!!??

J'ai plac� ces lignes (On error et Err.Number) pour �viter un arr�t du
programme en cas d'anomalie lors de la mise � jour de la feuille
excel.

Pour info, des d�tails su mon code:

>> On Error Resume Next
J'active l'interception d'erreur pour toutes les lignes suivantes, Le

contr�le d'erreur ayant lieu juste apr�s la mise � jour de la feuille
excel (transfert de mes donn�es de ma boite de dialogue contenant mes
controles vers la feuille excel (pas pour g�rer le For Next ;-) ))

>> For intL = 3 To 15 Step 3

Pour chaque controle � g�rer

>> Err.Clear
Raz de l'objet Err. La ligne � monitorer est la suivante

>> .Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls("TbxProPvc1" &
>> Format(CStr(intL), "00")))
Cette ligne transfert dans une cellule de la feuille active, le
contenu d'un controle de ma boite de dialogue. Les controles a traiter

sont nomm�s TbxProPvc103, TbxProPvc106, TbxProPvc109, TbxProPvc112 et
TbxProPvc115.

>> If Err.Number <> 0 Then
Je v�rifie que la valeur mise dans la cellule ne provoque pas


d'erreur!
Normalement ca ne devrait pas. En tout cas, sous XP, Err.Number est

toujours � 0.

Le reste est la fin de la boucle, avec un saut � la fin de la
proc�dure en cas d'erreur.

Si tu as une id�e...
Cordialement.


On 30 nov, 14:27, "michdenis" <michde...@hotmail.com> wrote:
> | Le contenu des controles est bien mis en place
>
> Je ne parlais pas du contenu mais de leur NOM.
>

> D�sactive ta gestion d'erreur


> "On error resume next" et "Err.Clear" et fait
> rouler... D'ailleurs je ne comprends pas en quoi

> c'est ligne de code peut g�n�rer une erreur :


> For intL = 3 To 15 Step 3
>

> Mais au del� de ces commentaires, ton message d'erreur est li�


> au fait qu'excel ne trouve pas (mal orthographier - inexistant)

> le nom du contr�le ou la feuille cit�s dans la proc�dure !
>

> "ElXav" <el...@free.fr> a �crit dans le message de groupe de discussion :
> af7b2623-91aa-4505-93cc-5277c4788...@p8g2000yqb.googlegroups.com...
> Bonjour,
>
> Merci, mais ce n'est pas �a.


> Comme je le dis dans mon message.
> En XP ca camrche sans soucis, c'est une appli qui tourne depuis plus
> de 2 ans.
> Sous 2007. Le contenu des controles est bien mis en place dans les

> cellules de destination, mais le message d'erreur sort tout de m�me.
> Dans mon code, si je d�sactive l'instruction de sortie de ma boucle
> (GoTo Restituer_Fin), le r�sultat est correct, mes 5 controles sont
> bien trait�s.


> Je m'interroge donc sur la sortie de ce message.
>
> Cordialement.
>
> On 30 nov, 12:21, "michdenis" <michde...@hotmail.com> wrote:
>
>
>
> > Bonjour,
>

> > Le nom du contr�le d�fini par ("TbxProPvc1" & Format(CStr(intL), "00")
> > Existe-t-il r�ellement ? pour chacun des chiffres dans ta boucle


> > For intL = 3 To 15 Step 3
>
> > C'est la signification de ton message d'erreur !
>

> > "ElXav" <el...@free.fr> a �crit dans le message de groupe de discussion :
> > 8ca2e6d1-3a35-4af1-b8ae-b0844b3a3...@m26g2000yqb.googlegroups.com...
> > Bonjour la Communaut�,


>
> > En cours de migration d'Office XP vers 2007, je teste mes diverses
> > applications (surtout Access).

> > Ma seule application d�velopp�e sous Excel XP se plante avec le
> > message d'erreur cit� en objet.


>
> > Voici la portion de code:
>
> > On Error Resume Next
> > For intL = 3 To 15 Step 3
> > Err.Clear
> > .Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls

> > ("TbxProPvc1" & Format(CStr(intL), "00"))) <<--- G�n�re l'erreur
> > If Err.Number <> 0 Then
> > MsgBox "Donn�e incorrecte.", vbExclamation + vbOKOnly,


> > ETPP_NomApplication
> > Me.Controls("TbxProPvc1" & Format(CStr(intL),
> > "00")).SetFocus
> > GoTo Restituer_Fin
> > End If
> > Next intL
>

> > L'erreur 9 survient, alors que la valeur est bien plac�e dans la


> > cellule destination.
>
> > En debug, la feuille de destination est bien active.

> > Dans la fen�tre de debug, les actions suivantes sont valides:
> > .Cells(RngFind.Row, 33 + intL).Select ===> me s�lectionne bien


> > la cellule destination
> > ? CDbl(Me.Controls("TbxProPvc1" & Format(CStr(intL), "00"))) ===>

> > me renvoie bien la valeur num�rique
>
> > Et en allant au plus simple et plus pr�cis:


> > err.clear
> > .Cells(3, 36).value = "test"
> > ? err.description => me renvoie le texte de l'erreur 9!!!
>

> > Les m�mes commandes dans un nouveau classeur passent bien.


>
> > D'avance merci pour vos suggestions.
>

> > Cordialement.- Masquer le texte des messages pr�c�dents -
>
> - Afficher le texte des messages pr�c�dents -

ElXav

unread,
Nov 30, 2009, 10:02:50 AM11/30/09
to
> L'erreur 9, ça fait déjà 2 fois que je t'explique que c'est une

> question de "nom" d'objet qu'excel ne trouve pas que ce
> soit une feuille ou autre objet!
J'ai bien compris, je t'en remercie, mais ce que je ne m'explique pas,
c'est, si effectivement excel ne trouve pas quelque chose dont il a
besoin alors pourquoi le code ne plante pas, pourquoi le résultat
attendu est correct.
Mes 3 lignes sans interception d'erreur fonctionnent.
Si j'ajoute l'interception, ca merdouille, ce dans 2007, mais pas dans
XP!!
C'est ce comportement qui m'interpelle!!

Pour le reste de tes conseils, oui, je connais le principe
d'utilisoation du On Error, Resume etc.

Serais-tu ok pour que je t'envoie mon fichier?

Cordialement.


On 30 nov, 15:09, "michdenis" <michde...@hotmail.com> wrote:
> Je n'ai pas ton application sous les yeux...
>

> L'erreur 9, ça fait déjà 2 fois que je t'explique que c'est une


> question de "nom" d'objet qu'excel ne trouve pas que ce
> soit une feuille ou autre objet!
>

> L'utilisation de "On Error Resume Next" doit être utilisé


> parcimonieusement ! On doit savoir pourquoi on l'utilise...
> et dans plusieurs cas, elle ne fait aucun sens si elle permet

> de continuer l'exécution d'une procédure alors que la
> feuille sur laquelle la procédure doit travailler est absente


> du classeur... (ce n'est qu'un exemple)
>
> Vaut mieux utiliser :
> '-------------------------------
> sub test()
> Dim Gestion_Erreur as string
>
> On error goto Gestion_Erreur
> 'Le code
>
> Exit sub
> Gestion_Erreur:
>     Msgbox Err.Number & ", " & Err.Description

>     'Et si on veut que le code se poursuivre à ligne


>     'suivante dans le code...
>     Resume next
> End sub
> '-------------------------------
>
> Je ne peux t'en dire plus avec l'information que je dispose!
>

> "ElXav" <el...@free.fr> a écrit dans le message de groupe de discussion :
> 51d68855-c2a8-4d50-9b9f-61248fd9d...@m20g2000vbp.googlegroups.com...
> Michdenis,
>
> J'ai fait tourner le code suivant, comme tu me le suggères.


>
>         For intL = 3 To 15 Step 3
>           .Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls
> ("TbxProPvc1" & Format(CStr(intL), "00")))
>         Next intL
>
> Il ne plante pas.

> Le résultat dans la feuille excel est correct.


>
> Alors pourquoi l'objet Err ans mon code original prend la valeur
> 9??!!??

> J'ai placé ces lignes (On error et Err.Number) pour éviter un arrêt du
> programme en cas d'anomalie lors de la mise à jour de la feuille
> excel.
>
> Pour info, des détails su mon code:


>
> >>        On Error Resume Next
>
> J'active l'interception d'erreur pour toutes les lignes suivantes, Le

> contrôle d'erreur ayant lieu juste après la mise à jour de la feuille
> excel (transfert de mes données de ma boite de dialogue contenant mes
> controles vers la feuille excel (pas pour gérer le For Next ;-) ))


>
> >>        For intL = 3 To 15 Step 3
>

> Pour chaque controle à gérer
>
> >>          Err.Clear
>
> Raz de l'objet Err. La ligne à monitorer est la suivante


>
> >>          .Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls("TbxProPvc1" &
> >> Format(CStr(intL), "00")))
>
> Cette ligne transfert dans une cellule de la feuille active, le
> contenu d'un controle de ma boite de dialogue. Les controles a traiter

> sont nommés TbxProPvc103, TbxProPvc106, TbxProPvc109, TbxProPvc112 et


> TbxProPvc115.
>
> >>          If Err.Number <> 0 Then
>

> Je vérifie que la valeur mise dans la cellule ne provoque pas


> d'erreur!
> Normalement ca ne devrait pas. En tout cas, sous XP, Err.Number est

> toujours à 0.
>
> Le reste est la fin de la boucle, avec un saut à la fin de la

> procédure en cas d'erreur.
>
> Si tu as une idée...


> Cordialement.
>
> On 30 nov, 14:27, "michdenis" <michde...@hotmail.com> wrote:
>
>
>
> > | Le contenu des controles est bien mis en place
>
> > Je ne parlais pas du contenu mais de leur NOM.
>

> > Désactive ta gestion d'erreur


> > "On error resume next" et   "Err.Clear" et fait
> > rouler... D'ailleurs je ne comprends pas en quoi

> > c'est ligne de code peut générer une erreur :


> >  For intL = 3 To 15 Step 3
>

> > Mais au delà de ces commentaires, ton message d'erreur est lié


> > au fait qu'excel ne trouve pas (mal orthographier - inexistant)

> > le nom du contrôle ou la feuille cités dans la procédure !
>

> > "ElXav" <el...@free.fr> a écrit dans le message de groupe de discussion :
> > af7b2623-91aa-4505-93cc-5277c4788...@p8g2000yqb.googlegroups.com...
> > Bonjour,
>
> > Merci, mais ce n'est pas ça.


> > Comme je le dis dans mon message.
> > En XP ca camrche sans soucis, c'est une appli qui tourne depuis plus
> > de 2 ans.
> > Sous 2007. Le contenu des controles est bien mis en place dans les

> > cellules de destination, mais le message d'erreur sort tout de même.
> > Dans mon code, si je désactive l'instruction de sortie de ma boucle
> > (GoTo Restituer_Fin), le résultat est correct, mes 5 controles sont
> > bien traités.


> > Je m'interroge donc sur la sortie de ce message.
>
> > Cordialement.
>
> > On 30 nov, 12:21, "michdenis" <michde...@hotmail.com> wrote:
>
> > > Bonjour,
>

> > > Le nom du contrôle défini par ("TbxProPvc1" & Format(CStr(intL), "00")
> > > Existe-t-il réellement ? pour chacun des chiffres dans ta boucle


> > >  For intL = 3 To 15 Step 3
>
> > > C'est la signification de  ton message d'erreur !
>

> > > "ElXav" <el...@free.fr> a écrit dans le message de groupe de discussion :
> > > 8ca2e6d1-3a35-4af1-b8ae-b0844b3a3...@m26g2000yqb.googlegroups.com...
> > > Bonjour la Communauté,


>
> > > En cours de migration d'Office XP vers 2007, je teste mes diverses
> > > applications (surtout Access).

> > > Ma seule application développée sous Excel XP se plante avec le
> > > message d'erreur cité en objet.


>
> > > Voici la portion de code:
>
> > >         On Error Resume Next
> > >         For intL = 3 To 15 Step 3
> > >           Err.Clear
> > >           .Cells(RngFind.Row, 33 + intL) = CDbl(Me.Controls

> > > ("TbxProPvc1" & Format(CStr(intL), "00")))  <<--- Génère l'erreur
> > >           If Err.Number <> 0 Then
> > >             MsgBox "Donnée incorrecte.", vbExclamation + vbOKOnly,


> > > ETPP_NomApplication
> > >             Me.Controls("TbxProPvc1" & Format(CStr(intL),
> > > "00")).SetFocus
> > >             GoTo Restituer_Fin
> > >           End If
> > >         Next intL
>

> > > L'erreur 9 survient, alors que la valeur est bien placée dans la


> > > cellule destination.
>
> > > En debug, la feuille de destination est bien active.

> > > Dans la fenêtre de debug, les actions suivantes sont valides:
> > >   .Cells(RngFind.Row, 33 + intL).Select     ===> me sélectionne bien


> > > la cellule destination
> > >   ? CDbl(Me.Controls("TbxProPvc1" & Format(CStr(intL), "00")))    ===>

> > > me renvoie bien la valeur numérique
>
> > > Et en allant au plus simple et plus précis:


> > >   err.clear
> > >   .Cells(3, 36).value = "test"
> > >   ? err.description => me renvoie le texte de l'erreur 9!!!
>

> > > Les mêmes commandes dans un nouveau classeur passent bien.


>
> > > D'avance merci pour vos suggestions.
>

> > > Cordialement.- Masquer le texte des messages précédents -
>
> > - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
>
> - Afficher le texte des messages précédents -

michdenis

unread,
Nov 30, 2009, 10:07:37 AM11/30/09
to
| Serais-tu ok pour que je t'envoie mon fichier?

Ok, tu peux utiliser mon adresse Hotmail.
Tu m'indique le nom de la proc�dure et du module o�
est situ� la proc�dure. Je porterai attention qu'� cette
proc�dure et non � tout le code du fichier.

ElXav

unread,
Nov 30, 2009, 10:18:52 AM11/30/09
to
J'ai essayer une chose.
Mettre un Application.EnableEvents = False au début de ma procédure.
Je réactive à la fin, le symptôme disparaît!!
J'ai bien un Worksheet_SelectionChange, mais on entre pas dans cette
procédure avant l'apparition de l'erreur.
J'y perd mon latin.

Je te poste mon fichier Excel.
A l'occasion, si tu trouves où je m'égare...

Merci.
Cordialement.


On 30 nov, 16:07, "michdenis" <michde...@hotmail.com> wrote:
> | Serais-tu ok pour que je t'envoie mon fichier?
>
> Ok, tu peux utiliser mon adresse Hotmail.

> Tu m'indique le nom de la procédure et du module où
> est situé la procédure. Je porterai attention qu'à cette
> procédure et non à tout le code du fichier.

michdenis

unread,
Nov 30, 2009, 12:00:41 PM11/30/09
to
A ) je ne peux pas faire rouler ton code, tu fais r�f�rence � une
biblioth�que que je ne poss�de pas : r�f�rence � un MainFrame IBM

Dans ta proc�dure

Sub InitWrkSh(ByRef WrkSh As Excel.Worksheet, _
ByRef WrkShCfg As Excel.Worksheet)

Tu d�finis cette variable comme �tant :
Set WrkShCfg = Excel.ActiveWorkbook.Worksheets(ShtNam_Catalog & "_Cfg")

L'onglet de la feuille "ShtNam_Catalog & "_Cfg" n'existe pas dans le classeur que tu
m'as envoy�.
Est-elle vraiment pr�sente dans le classeur complet ?

Deuxi�mement, l'usage de ActiveWorkbook signifie que si le classeur actif � l'�cran
est autre que ce classeur dans lequel la proc�dure est �crite, il y a des bonnes
chances qu'il ne trouve pas ladite feuille... � moins que tu aies un onglet
portant ce nom dans chaque classeur actif.

Si tu veux dire ce classeur, utilise l'expression :
Set WrkShCfg = ThisWorkbook.Worksheets(ShtNam_Catalog & "_Cfg")
Ou
en utilisant le nom du classeur
Set WrkShCfg = Workbooks("NomDuClasseur.xls").Worksheets(ShtNam_Catalog & "_Cfg")

Je te sugg�re de neutraliser ta gestion d'erreur, de cr�er un point d'arr�t et d'utiliser
la touche F8 pour ex�cuter la proc�dure. Tu va assister au d�roulement
de la proc�dure, et tu vas te rendre compte si la proc�dure provoque
une proc�dure �v�nementielle et enclenche une r�action que tu
n'avais pas pr�vue...
C'est probablement pour �a que cette ligne de code


Mettre un Application.EnableEvents = False

solutionne le probl�me !


"ElXav" <el...@free.fr> a �crit dans le message de groupe de discussion :
b84d68f0-28cc-4c5f...@o31g2000vbi.googlegroups.com...


J'ai essayer une chose.

Mettre un Application.EnableEvents = False au d�but de ma proc�dure.
Je r�active � la fin, le sympt�me dispara�t!!


J'ai bien un Worksheet_SelectionChange, mais on entre pas dans cette

proc�dure avant l'apparition de l'erreur.


J'y perd mon latin.

Je te poste mon fichier Excel.

A l'occasion, si tu trouves o� je m'�gare...

Merci.
Cordialement.


On 30 nov, 16:07, "michdenis" <michde...@hotmail.com> wrote:
> | Serais-tu ok pour que je t'envoie mon fichier?
>
> Ok, tu peux utiliser mon adresse Hotmail.

> Tu m'indique le nom de la proc�dure et du module o�
> est situ� la proc�dure. Je porterai attention qu'� cette

> proc�dure et non � tout le code du fichier.

Reply all
Reply to author
Forward
0 new messages