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

Bug dans VBA Excel 2007?

13 réponses
Avatar
Jo
Bonjour,

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

Le code ci-dessous met en =E9vidence le probl=E8me.

Public Sub Test ()
Dim i As Long
On Error Resume Next
With ActiveSheet
For i =3D 1 To 100
. Cells (i, "A"). Value =3D i
If Err.Number =3D 0 Then
. Cells (i, "B"). Value =3D "OK"
Else
. Cells (i, "B"). Value =3D "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=E9lire, mais
alors pourquoi fonctionne-t-il sous 2003?
Quelqu'un a-t-il d=E9j=E0 rencontr=E9 le probl=E8me?
Y-a-t-il une solution?

Merci pour votre aide et bonne journ=E9e.

10 réponses

1 2
Avatar
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


"Jo" a écrit dans le message de news:
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.
Avatar
Jo
On 12 fév, 09:17, "Tatanka" wrote:
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...
@+
Avatar
Daniel.C
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" wrote:
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...
@+


Avatar
Jo
On 12 fév, 13:46, Daniel.C wrote:
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
Avatar
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

"Jo" a écrit dans le message de news:
On 12 fév, 13:46, Daniel.C wrote:
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
Avatar
michdenis
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" a écrit dans le message de groupe de discussion :

On 12 fév, 13:46, Daniel.C wrote:
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
Avatar
Jo
On 12 fév, 16:29, "michdenis" wrote:
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://&quot;
& 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.
@+
Avatar
Jo
On 12 fév, 16:18, "Tatanka" wrote:
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.
@+
Avatar
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

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" a écrit dans le message de groupe de discussion :

On 12 fév, 16:29, "michdenis" wrote:
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://&quot;
& 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.
@+
Avatar
Jo
On 12 fév, 22:18, "michdenis" wrote:
À 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
@+
1 2