Bug dans VBA Excel 2007?

Le
Jo
Bonjour,

Je suis en train de migrer des macros VBA Excel 2003 vers 2007 et je
rencontre le problème suivant.
Lorsque j'affecte une valeur quelconque à une cellule avec le code
ActiveSheet.Cells(xx,yy).Value="Quelque Chose", Err.Number retourne
systématiquement 9 sous 2007 alors que sous 2003 il renvoi 0.

Le code ci-dessous met en évidence le problème.

Public Sub Test ()
Dim i As Long
On Error Resume Next
With ActiveSheet
For i = 1 To 100
. Cells (i, "A"). Value = i
If Err.Number = 0 Then
. Cells (i, "B"). Value = "OK"
Else
. Cells (i, "B"). Value = "KB (" & Err.Number & "-" &
Err.Description & ")"
End If
Err.Clear
Next
End With
End Sub

Est-ce un bug dans VBA 2007 ou bien est-ce mon code qui délire, mais
alors pourquoi fonctionne-t-il sous 2003?
Quelqu'un a-t-il déjà rencontré le problème?
Y-a-t-il une solution?

Merci pour votre aide et bonne journée.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Tatanka
Le #21180641
Bonjour Jo,

Je viens d'essayer ta macro sous 2007 et aucune erreur.
1 à 100 de A1 à A100 et OK de B1 à B100.
Bizz!
Et si tu copies ta macro dans un nouveau classeur,
tu obtiens toujours une erreur ?

Serge


"Jo" Bonjour,

Je suis en train de migrer des macros VBA Excel 2003 vers 2007 et je
rencontre le problème suivant.
Lorsque j'affecte une valeur quelconque à une cellule avec le code
ActiveSheet.Cells(xx,yy).Value="Quelque Chose", Err.Number retourne
systématiquement 9 sous 2007 alors que sous 2003 il renvoi 0.

Le code ci-dessous met en évidence le problème.

Public Sub Test ()
Dim i As Long
On Error Resume Next
With ActiveSheet
For i = 1 To 100
. Cells (i, "A"). Value = i
If Err.Number = 0 Then
. Cells (i, "B"). Value = "OK"
Else
. Cells (i, "B"). Value = "KB (" & Err.Number & "-" &
Err.Description & ")"
End If
Err.Clear
Next
End With
End Sub

Est-ce un bug dans VBA 2007 ou bien est-ce mon code qui délire, mais
alors pourquoi fonctionne-t-il sous 2003?
Quelqu'un a-t-il déjà rencontré le problème?
Y-a-t-il une solution?

Merci pour votre aide et bonne journée.
Jo
Le #21182601
On 12 fév, 09:17, "Tatanka"
Bonjour Jo,

Je viens d'essayer ta macro sous 2007 et aucune erreur.
1 à 100 de A1 à A100 et OK de B1 à B100.
Bizz!
Et si tu copies ta macro dans un nouveau classeur,
tu obtiens toujours une erreur ?

Serge



Bonjour,

Merci pour ta réponse.
Je viens de refaire le test à partir de 0, PC rebooté, nouveau
classeur, copié/collé de la macro à partir de ce fil de discussion et
j'ai toujours le problème:
1 à 100 de A1 à A100 et KB (9-L'indice n'appartient pas à la
sélection) de B1 à B100.

Ma version d'Excel: 12.0.6425.1000 SP2 MSO (12.0.6520.5000)

J'y comprends rien...
@+
Daniel.C
Le #21182671
Bonjour.
Peux-tu mettre ton classeur sur www.cjoint.com et pposter ici l'adresse
générée ?
Daniel

On 12 fév, 09:17, "Tatanka"
Bonjour Jo,

Je viens d'essayer ta macro sous 2007 et aucune erreur.
1 à 100 de A1 à A100 et OK de B1 à B100.
Bizz!
Et si tu copies ta macro dans un nouveau classeur,
tu obtiens toujours une erreur ?

Serge



Bonjour,

Merci pour ta réponse.
Je viens de refaire le test à partir de 0, PC rebooté, nouveau
classeur, copié/collé de la macro à partir de ce fil de discussion et
j'ai toujours le problème:
1 à 100 de A1 à A100 et KB (9-L'indice n'appartient pas à la
sélection) de B1 à B100.

Ma version d'Excel: 12.0.6425.1000 SP2 MSO (12.0.6520.5000)

J'y comprends rien...
@+


Jo
Le #21183431
On 12 fév, 13:46, Daniel.C
Bonjour.
Peux-tu mettre ton classeur surwww.cjoint.comet pposter ici l'adresse
générée ?
Daniel




Voici le classeur épuré de tout le code sauf celui qui pose problème.
Il suffit de cliquer sur TEST
J'ai testé sur 3 PC différents, le problème se reproduit sur chacun
d'eux.

Merci

http://www.cijoint.fr/cjlink.php?file=cj201002/cijJfUeQ88.xls
Tatanka
Le #21183761
Salut Jo,

Je viens de cliquer sur ton bouton « Test » et aucune erreur.
Pourquoi ça fonctionne au Québec et pas chez vous ;-)
je n'en sais trop rien. Bizz!

Serge

"Jo" On 12 fév, 13:46, Daniel.C
Bonjour.
Peux-tu mettre ton classeur surwww.cjoint.comet pposter ici l'adresse
générée ?
Daniel




Voici le classeur épuré de tout le code sauf celui qui pose problème.
Il suffit de cliquer sur TEST
J'ai testé sur 3 PC différents, le problème se reproduit sur chacun
d'eux.

Merci

http://www.cijoint.fr/cjlink.php?file=cj201002/cijJfUeQ88.xls
michdenis
Le #21183901
Bonjour,

Je ne comprends pas pourquoi tu utilises
'------------------------------
On error resume next ...et le test :
If Err.Number = 0 Then


End if
'------------------------------

Si cela provoque une erreur, dans la fenêtre de l'éditeur de code,
barre des menus / outils / références / regarde et décoche la case
si une référence est marquée "Manquante".



"Jo"
On 12 fév, 13:46, Daniel.C
Bonjour.
Peux-tu mettre ton classeur surwww.cjoint.comet pposter ici l'adresse
générée ?
Daniel




Voici le classeur épuré de tout le code sauf celui qui pose problème.
Il suffit de cliquer sur TEST
J'ai testé sur 3 PC différents, le problème se reproduit sur chacun
d'eux.

Merci

http://www.cijoint.fr/cjlink.php?file=cj201002/cijJfUeQ88.xls
Jo
Le #21184151
On 12 fév, 16:29, "michdenis"
Bonjour,

Je ne comprends pas pourquoi tu utilises
'------------------------------
On error resume next ...et le test :
If Err.Number = 0 Then

End if
'------------------------------



Il est vrai que dans l'exemple fourni cela parait débile. Voici la
partie du code réel qui pose problème:

For iRow = lngFirstRow + 1 To lngLastRow
If .Cells(iRow, "A").Value <> "" Then
.Cells(iRow, "A").Select
If GetPortInfos(.Cells(iRow, "A").Value, .Cells(iRow,
"F").Value, strData, Param.DomainName(DomainIndex),
Param.User(DomainIndex), Param.Password(DomainIndex)) = 0 Then
On Error Resume Next
.Cells(iRow, "G").Value = strData(1)
If Err.Number = 0 Then
.Cells(iRow, "G").Select
.Hyperlinks.Add Anchor:=Selection, Address:="http://"
& strData(1), TextToDisplay:=strData(1)
If Ping(.Cells(iRow, "G").Value, myECHO) = False Then
.Cells(iRow, "G").Select
Selection.Font.ColorIndex = 3 ' Rouge
End If
End If
On Error GoTo 0
End If
End If
Next

En fait strData(1) peut exister ou non suivant le résultat de la
fonction GetPortInfos, donc plutôt que me prendre la tête à tester si
strData est bien un tableau et que l'indice 1 existe il me semble plus
simple de tester l'erreur eventuelle renvoyée lors de l'affectation de
strData(1) à la cellule.


Si cela provoque une erreur, dans la fenêtre de l'éditeur de code,
barre des menus / outils / références / regarde et décoche la case
si une référence est marquée "Manquante"


.
Aucune référence est marquée "Manquante".

Est-ce que tu reproduit le problème sur ton PC?

Merci pour ton aide.
@+
Jo
Le #21184261
On 12 fév, 16:18, "Tatanka"
Salut Jo,

Je viens de cliquer sur ton bouton « Test » et aucune erreur.
Pourquoi ça fonctionne au Québec et pas chez vous ;-)
je n'en sais trop rien. Bizz!

Serge



j'aimerais bien venir vous voir au Québec, mais je pense pas que ma
boite veuille bien déménager pour que la macro fonctionne ;-)

Merci tout de même pour ton aide.
@+
michdenis
Le #21186401
À partir de ton code, c'est difficile de savoir ...
mais une erreur 9 est générée à chaque fois
que la référence à un objet est inadéquate

Exemple :
le message d'erreur si je n'ai pas 5 feuilles au moins dans le classeur
x = Sheets(5).Name
Ce pourrait être le nom de la feuille
Sheets("MonNom").range(...) qui est inexistant ou a une faute
d'orthographe.
Cela s'applique aussi au nom des objets dans une feuille dont
on fait une référence inadéquate.

Cela devrait orienter ta recherche pour trouver le pépin de ta procédure !



"Jo"
On 12 fév, 16:29, "michdenis"
Bonjour,

Je ne comprends pas pourquoi tu utilises
'------------------------------
On error resume next ...et le test :
If Err.Number = 0 Then

End if
'------------------------------



Il est vrai que dans l'exemple fourni cela parait débile. Voici la
partie du code réel qui pose problème:

For iRow = lngFirstRow + 1 To lngLastRow
If .Cells(iRow, "A").Value <> "" Then
.Cells(iRow, "A").Select
If GetPortInfos(.Cells(iRow, "A").Value, .Cells(iRow,
"F").Value, strData, Param.DomainName(DomainIndex),
Param.User(DomainIndex), Param.Password(DomainIndex)) = 0 Then
On Error Resume Next
.Cells(iRow, "G").Value = strData(1)
If Err.Number = 0 Then
.Cells(iRow, "G").Select
.Hyperlinks.Add Anchor:=Selection, Address:="http://"
& strData(1), TextToDisplay:=strData(1)
If Ping(.Cells(iRow, "G").Value, myECHO) = False Then
.Cells(iRow, "G").Select
Selection.Font.ColorIndex = 3 ' Rouge
End If
End If
On Error GoTo 0
End If
End If
Next

En fait strData(1) peut exister ou non suivant le résultat de la
fonction GetPortInfos, donc plutôt que me prendre la tête à tester si
strData est bien un tableau et que l'indice 1 existe il me semble plus
simple de tester l'erreur eventuelle renvoyée lors de l'affectation de
strData(1) à la cellule.


Si cela provoque une erreur, dans la fenêtre de l'éditeur de code,
barre des menus / outils / références / regarde et décoche la case
si une référence est marquée "Manquante"


.
Aucune référence est marquée "Manquante".

Est-ce que tu reproduit le problème sur ton PC?

Merci pour ton aide.
@+
Jo
Le #21187771
On 12 fév, 22:18, "michdenis"
À partir de ton code, c'est difficile de savoir ...
mais une erreur 9 est générée à chaque fois
que la référence à un objet est inadéquate




Salut,

Je ne pense pas que mon code soit en cause car il fonctionne depuis
plusieurs mois sous Excel 2003.
Depuis que nous avons migré quelques postes en 2007, on a constaté des
comportement anormaux des macros. Quand je dis comportement anormaux,
il ne s'agit d'erreur signalée par un popup, mais de résultats
incohérents et SURTOUT différents du même code exécuté sur un pos te
ayant Office 2003.
En analysant et traçant le code, j'ai cerné la parti de code en
question.
C'est pour cela que j'ai posté au début de ce fil un exemple mettant
en évidence ce problème.

Bon WE
@+
Publicité
Poster une réponse
Anonyme