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

Le
ElXav
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 bie=
n
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #20662951
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"
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.
ElXav
Le #20663591
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"
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"
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 + vb OKOnly,
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électi onne 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
Le #20664021
| 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"
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"
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"
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.


ElXav
Le #20664231
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 d u
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"
| 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"
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"


> Bonjour,

> Le nom du contrôle défini par ("TbxProPvc1" & Format(CStr(intL), "0 0")
> 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" >
> 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élec tionne 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
Le #20664411
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"
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"
| 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"
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"


> 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" >
> 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
Le #20664871
> 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"
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"
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 feuil le
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"


> | 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" >
> 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"
> > 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" > >
> > 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.Contro ls
> > ("TbxProPvc1" & Format(CStr(intL), "00")))  <<--- Génère l'erre ur
> >           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él ectionne 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
Le #20664861
| 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
Le #20665021
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"
| 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
Le #20665861
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"
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"
| 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.


Publicité
Poster une réponse
Anonyme