OVH Cloud OVH Cloud

Passage de Excel VBA 2002 à 2000

7 réponses
Avatar
Cath
Bonjour =E0 tous,=20
j'ai un code qui fonctionne avec 2002 mais me pose des=20
soucis avec 2000.
Je n'arrive pas =E0 trouver l'erreur.

Merci pour votre aide
Cath

Voici le message :
Variable objet ou variable de bloc With non d=E9fini=20
Poisition sur la ligne L5..........

Voici le code

Private Sub Workbook_Open()

Dim C, F As Integer
Dim L, L1, L2, L3, L4, L5 As Range
Dim D, D1 As Range

Worksheets("Liste").Activate
C =3D 1
For F =3D 1 To [b564].End(3).Row
L1 =3D Cells(F, "A").Value=20
L2 =3D Cells(F, "G").Value=20
L3 =3D Cells(F, "I").Value=20
L4 =3D Cells(F, "B").Value=20
L5 =3D Cells(F, "D").Value=20
L =3D L & L5 & " - " & Cells(F, "J") & Chr(10)=20
If Cells(F, "B") =3D Cells(F + 1, "B") Then
Else: Cells(C, "K") =3D L1
Cells(C, "L") =3D L2
Cells(C, "N") =3D L3
Cells(C, "M") =3D L4 & Chr(10) & Left(L, Len(L) -
1): C =3D C + 1
L =3D ""
End If
Next
End sub

7 réponses

Avatar
Michel Pierron
Bonjour Cath;
Dim L, L1, L2, L3, L4, L5 As Range
L5 = Cells(F, "D").Value
Manifestement, L5 n'est pas une variable de type Range; puisque pratiquement tout
est défini comme variant, tu n'es pas à une variable près. Modifie:
Dim L, L1, L2, L3, L4, L5

MP

"Cath" a écrit dans le message de
news:312501c42907$3ad7fd40$
Bonjour à tous,
j'ai un code qui fonctionne avec 2002 mais me pose des
soucis avec 2000.
Je n'arrive pas à trouver l'erreur.

Merci pour votre aide
Cath

Voici le message :
Variable objet ou variable de bloc With non défini
Poisition sur la ligne L5..........

Voici le code

Private Sub Workbook_Open()

Dim C, F As Integer
Dim L, L1, L2, L3, L4, L5 As Range
Dim D, D1 As Range

Worksheets("Liste").Activate
C = 1
For F = 1 To [b564].End(3).Row
L1 = Cells(F, "A").Value
L2 = Cells(F, "G").Value
L3 = Cells(F, "I").Value
L4 = Cells(F, "B").Value
L5 = Cells(F, "D").Value
L = L & L5 & " - " & Cells(F, "J") & Chr(10)
If Cells(F, "B") = Cells(F + 1, "B") Then
Else: Cells(C, "K") = L1
Cells(C, "L") = L2
Cells(C, "N") = L3
Cells(C, "M") = L4 & Chr(10) & Left(L, Len(L) -
1): C = C + 1
L = ""
End If
Next
End sub
Avatar
cath
Bonjour,

merci pour la réponse.
Comment modifié.
Car si je modifie L5 c'est L4 qui pose un PB et ainsi de
suite.
Je ne pense pas qu'il faut mettre
Dim L, L1, L2, L3, L4, L5 sans rien.
L1 à L5 sont bien des plage de cellules.

Et question toujours bete, pourquoi cela ne fonctionne pas
en 2000 mais sans pb dans 2002.

Merci pour les explications.

-----Message d'origine-----
Bonjour Cath;
Dim L, L1, L2, L3, L4, L5 As Range
L5 = Cells(F, "D").Value
Manifestement, L5 n'est pas une variable de type Range;
puisque pratiquement tout

est défini comme variant, tu n'es pas à une variable
près. Modifie:

Dim L, L1, L2, L3, L4, L5

MP

"Cath" a écrit dans
le message de

news:312501c42907$3ad7fd40$
Bonjour à tous,
j'ai un code qui fonctionne avec 2002 mais me pose des
soucis avec 2000.
Je n'arrive pas à trouver l'erreur.

Merci pour votre aide
Cath

Voici le message :
Variable objet ou variable de bloc With non défini
Poisition sur la ligne L5..........

Voici le code

Private Sub Workbook_Open()

Dim C, F As Integer
Dim L, L1, L2, L3, L4, L5 As Range
Dim D, D1 As Range

Worksheets("Liste").Activate
C = 1
For F = 1 To [b564].End(3).Row
L1 = Cells(F, "A").Value
L2 = Cells(F, "G").Value
L3 = Cells(F, "I").Value
L4 = Cells(F, "B").Value
L5 = Cells(F, "D").Value
L = L & L5 & " - " & Cells(F, "J") & Chr(10)
If Cells(F, "B") = Cells(F + 1, "B") Then
Else: Cells(C, "K") = L1
Cells(C, "L") = L2
Cells(C, "N") = L3
Cells(C, "M") = L4 & Chr(10) & Left(L, Len
(L) -

1): C = C + 1
L = ""
End If
Next
End sub


.



Avatar
Paul V.
Bonjour,

Tu as pu être été trompé par des habitudes héritées d'autres langages mais
la déclaration de variable en VBA et VB doit être totalement complète.
Quand tu mets :
Dim L, L1, L2, L3, L4, L5 As Range
Tu déclares L, L1, L2, L3 et L4 comme variant (variable par défaut sans
autre spécifications) et uniquement L5 comme range
Si tu veux tout déclarer comme range tu es obligé d'écrire :
dim L as range, L1 as range, L2 as range, etc......

Mais dans ton cas tes variables ne peuvent pas être déclarées comme range
car elles recoivent des valeurs (ce qu'une variable Range ne peut pas) par :
L5 = Cells(F, "D").Value
Tu dois donc les déclarer plus explicitement comme String, date, byte,
integer, etc... ou comme le suggérait Michel, ne rien mettre (par parresse
;-) ) et laisser alors Excel définir la variable comme variant.

Je te suggère de te reporter à l'aide ou à un bon livre pour approfondir tes
infos sur les variables car c'est essentiel.
--
HTH

Paul V.

Cath wrote:
Bonjour à tous,
j'ai un code qui fonctionne avec 2002 mais me pose des
soucis avec 2000.
Je n'arrive pas à trouver l'erreur.

Merci pour votre aide
Cath

Voici le message :
Variable objet ou variable de bloc With non défini
Poisition sur la ligne L5..........

Voici le code

Private Sub Workbook_Open()

Dim C, F As Integer
Dim L, L1, L2, L3, L4, L5 As Range
Dim D, D1 As Range

Worksheets("Liste").Activate
C = 1
For F = 1 To [b564].End(3).Row
L1 = Cells(F, "A").Value
L2 = Cells(F, "G").Value
L3 = Cells(F, "I").Value
L4 = Cells(F, "B").Value
L5 = Cells(F, "D").Value
L = L & L5 & " - " & Cells(F, "J") & Chr(10)
If Cells(F, "B") = Cells(F + 1, "B") Then
Else: Cells(C, "K") = L1
Cells(C, "L") = L2
Cells(C, "N") = L3
Cells(C, "M") = L4 & Chr(10) & Left(L, Len(L) -
1): C = C + 1
L = ""
End If
Next
End sub


Avatar
Bonjour,

Merci pour la réponse
Mais alors pourquoi en faisant ce programme en 2002, je
n'ai pas de souci de déclaration.
Et quand je veux l'utiliser en 2000, je suis bloquée.
J'ai essayé de ne rien mettre est là c'est tout qui ne
fonctionne plus.
Merci pour votre aide.

-----Message d'origine-----
Bonjour,

Tu as pu être été trompé par des habitudes héritées
d'autres langages mais

la déclaration de variable en VBA et VB doit être
totalement complète.

Quand tu mets :
Dim L, L1, L2, L3, L4, L5 As Range
Tu déclares L, L1, L2, L3 et L4 comme variant (variable
par défaut sans

autre spécifications) et uniquement L5 comme range
Si tu veux tout déclarer comme range tu es obligé
d'écrire :

dim L as range, L1 as range, L2 as range, etc......

Mais dans ton cas tes variables ne peuvent pas être
déclarées comme range

car elles recoivent des valeurs (ce qu'une variable Range
ne peut pas) par :

L5 = Cells(F, "D").Value
Tu dois donc les déclarer plus explicitement comme
String, date, byte,

integer, etc... ou comme le suggérait Michel, ne rien
mettre (par parresse

;-) ) et laisser alors Excel définir la variable comme
variant.


Je te suggère de te reporter à l'aide ou à un bon livre
pour approfondir tes

infos sur les variables car c'est essentiel.
--
HTH

Paul V.

Cath wrote:
Bonjour à tous,
j'ai un code qui fonctionne avec 2002 mais me pose des
soucis avec 2000.
Je n'arrive pas à trouver l'erreur.

Merci pour votre aide
Cath

Voici le message :
Variable objet ou variable de bloc With non défini
Poisition sur la ligne L5..........

Voici le code

Private Sub Workbook_Open()

Dim C, F As Integer
Dim L, L1, L2, L3, L4, L5 As Range
Dim D, D1 As Range

Worksheets("Liste").Activate
C = 1
For F = 1 To [b564].End(3).Row
L1 = Cells(F, "A").Value
L2 = Cells(F, "G").Value
L3 = Cells(F, "I").Value
L4 = Cells(F, "B").Value
L5 = Cells(F, "D").Value
L = L & L5 & " - " & Cells(F, "J") & Chr(10)
If Cells(F, "B") = Cells(F + 1, "B") Then
Else: Cells(C, "K") = L1
Cells(C, "L") = L2
Cells(C, "N") = L3
Cells(C, "M") = L4 & Chr(10) & Left(L, Len
(L) -


1): C = C + 1
L = ""
End If
Next
End sub



.




Avatar
Paul V.
Bonjour,

Je peux t'assurer que la procédure comme tu l'as mise sur ce forum ne peut
pas fonctionner sur 2002. J'ai testé par simple vérification mais je suis
formel. Même erreur en 2000 et en 2002.

Il doit y avoir une différence soit dans le code, soit dans le niveau de
sécurité des macros.
Ou peut être avec l'option de déclaration explicite des variables.
A toi de voir

--
HTH

Paul V.

wrote:
Bonjour,

Merci pour la réponse
Mais alors pourquoi en faisant ce programme en 2002, je
n'ai pas de souci de déclaration.
Et quand je veux l'utiliser en 2000, je suis bloquée.
J'ai essayé de ne rien mettre est là c'est tout qui ne
fonctionne plus.
Merci pour votre aide.

-----Message d'origine-----
Bonjour,

Tu as pu être été trompé par des habitudes héritées d'autres
langages mais la déclaration de variable en VBA et VB doit être
totalement complète. Quand tu mets :
Dim L, L1, L2, L3, L4, L5 As Range
Tu déclares L, L1, L2, L3 et L4 comme variant (variable par défaut
sans autre spécifications) et uniquement L5 comme range
Si tu veux tout déclarer comme range tu es obligé d'écrire :
dim L as range, L1 as range, L2 as range, etc......

Mais dans ton cas tes variables ne peuvent pas être déclarées comme
range car elles recoivent des valeurs (ce qu'une variable Range ne
peut pas) par : L5 = Cells(F, "D").Value
Tu dois donc les déclarer plus explicitement comme String, date,
byte, integer, etc... ou comme le suggérait Michel, ne rien mettre
(par parresse ;-) ) et laisser alors Excel définir la variable comme
variant.

Je te suggère de te reporter à l'aide ou à un bon livre pour
approfondir tes infos sur les variables car c'est essentiel.
--
HTH

Paul V.

Cath wrote:
Bonjour à tous,
j'ai un code qui fonctionne avec 2002 mais me pose des
soucis avec 2000.
Je n'arrive pas à trouver l'erreur.

Merci pour votre aide
Cath

Voici le message :
Variable objet ou variable de bloc With non défini
Poisition sur la ligne L5..........

Voici le code

Private Sub Workbook_Open()

Dim C, F As Integer
Dim L, L1, L2, L3, L4, L5 As Range
Dim D, D1 As Range

Worksheets("Liste").Activate
C = 1
For F = 1 To [b564].End(3).Row
L1 = Cells(F, "A").Value
L2 = Cells(F, "G").Value
L3 = Cells(F, "I").Value
L4 = Cells(F, "B").Value
L5 = Cells(F, "D").Value
L = L & L5 & " - " & Cells(F, "J") & Chr(10)
If Cells(F, "B") = Cells(F + 1, "B") Then
Else: Cells(C, "K") = L1
Cells(C, "L") = L2
Cells(C, "N") = L3
Cells(C, "M") = L4 & Chr(10) & Left(L, Len (L) -
1): C = C + 1
L = ""
End If
Next
End sub



.





Avatar
cath
Bonjour,
Mais je vous crois
Mais comme j'ai développé d'abord en 2002 puis essai en
2000 et 2003. seulement 2000 ne fonctionne pas.

Je suis assez paresseuse d'où mon erreur dans 2000.
N'ayant pas 2002 sous la main je vérife plus tard si
déclaration explicite est cochée
J'ai refait mes déclarations et tous est oK.

Merci beaucoup. A vous 2.
cath
-----Message d'origine-----
Bonjour,

Je peux t'assurer que la procédure comme tu l'as mise sur
ce forum ne peut

pas fonctionner sur 2002. J'ai testé par simple
vérification mais je suis

formel. Même erreur en 2000 et en 2002.

Il doit y avoir une différence soit dans le code, soit
dans le niveau de

sécurité des macros.
Ou peut être avec l'option de déclaration explicite des
variables.

A toi de voir

--
HTH

Paul V.

wrote:
Bonjour,

Merci pour la réponse
Mais alors pourquoi en faisant ce programme en 2002, je
n'ai pas de souci de déclaration.
Et quand je veux l'utiliser en 2000, je suis bloquée.
J'ai essayé de ne rien mettre est là c'est tout qui ne
fonctionne plus.
Merci pour votre aide.

-----Message d'origine-----
Bonjour,

Tu as pu être été trompé par des habitudes héritées
d'autres



langages mais la déclaration de variable en VBA et VB
doit être



totalement complète. Quand tu mets :
Dim L, L1, L2, L3, L4, L5 As Range
Tu déclares L, L1, L2, L3 et L4 comme variant
(variable par défaut



sans autre spécifications) et uniquement L5 comme range
Si tu veux tout déclarer comme range tu es obligé
d'écrire :



dim L as range, L1 as range, L2 as range, etc......

Mais dans ton cas tes variables ne peuvent pas être
déclarées comme



range car elles recoivent des valeurs (ce qu'une
variable Range ne



peut pas) par : L5 = Cells(F, "D").Value
Tu dois donc les déclarer plus explicitement comme
String, date,



byte, integer, etc... ou comme le suggérait Michel, ne
rien mettre



(par parresse ;-) ) et laisser alors Excel définir la
variable comme



variant.

Je te suggère de te reporter à l'aide ou à un bon
livre pour



approfondir tes infos sur les variables car c'est
essentiel.



--
HTH

Paul V.

Cath wrote:
Bonjour à tous,
j'ai un code qui fonctionne avec 2002 mais me pose des
soucis avec 2000.
Je n'arrive pas à trouver l'erreur.

Merci pour votre aide
Cath

Voici le message :
Variable objet ou variable de bloc With non défini
Poisition sur la ligne L5..........

Voici le code

Private Sub Workbook_Open()

Dim C, F As Integer
Dim L, L1, L2, L3, L4, L5 As Range
Dim D, D1 As Range

Worksheets("Liste").Activate
C = 1
For F = 1 To [b564].End(3).Row
L1 = Cells(F, "A").Value
L2 = Cells(F, "G").Value
L3 = Cells(F, "I").Value
L4 = Cells(F, "B").Value
L5 = Cells(F, "D").Value
L = L & L5 & " - " & Cells(F, "J") & Chr(10)
If Cells(F, "B") = Cells(F + 1, "B") Then
Else: Cells(C, "K") = L1
Cells(C, "L") = L2
Cells(C, "N") = L3
Cells(C, "M") = L4 & Chr(10) & Left(L,
Len (L) -




1): C = C + 1
L = ""
End If
Next
End sub



.




.






Avatar
Michel Pierron
Re Cath;
Essaie avec ça:

Option Explicit

Private Sub Test_Open()
Dim C As Integer, F As Integer
Dim L(6) As Variant

Worksheets("Liste").Activate
C = 1
For F = 1 To [B564].End(3).Row
L(1) = Cells(F, "A").Value
L(2) = Cells(F, "G").Value
L(3) = Cells(F, "I").Value
L(4) = Cells(F, "B").Value
L(5) = Cells(F, "D").Value
L(0) = L(0) & L(5) & " - " & Cells(F, "J") & Chr(10)
If Cells(F, "B") <> Cells(F + 1, "B") Then
Cells(C, "K") = L(1)
Cells(C, "L") = L(2)
Cells(C, "N") = L(3)
Cells(C, "M") = L(4) & Chr(10) & Left(L(0), Len(L(0)) - 1)
C = C + 1: L(0) = ""
End If
Next
End Sub

NB: Il est fortement déconseillé d'utiliser L et C (symbole des lignes et
colonnes) comme variables qui peuvent éventuellement faire partie de la liste des
mots réservés ou engendrer des dysfonctionnements.
L'instruction Option Explicit t'oblige à déclarer les variables, ce qui présente
un énorme avantage. A l'issue de l'écriture de ton code, tu cliques Menu /
Debogage / Compiler VBA Project et tu corriges l'origine des erreurs signalées. Tu
refais l'opération jusquà l'absence d'erreur et il est probable alors que ton code
fonctionnera quelque soit la version d'Excel utilisée.

MP

a écrit dans le message de
news:332f01c42918$21e07a90$
Bonjour,

Merci pour la réponse
Mais alors pourquoi en faisant ce programme en 2002, je
n'ai pas de souci de déclaration.
Et quand je veux l'utiliser en 2000, je suis bloquée.
J'ai essayé de ne rien mettre est là c'est tout qui ne
fonctionne plus.
Merci pour votre aide.

-----Message d'origine-----
Bonjour,

Tu as pu être été trompé par des habitudes héritées
d'autres langages mais

la déclaration de variable en VBA et VB doit être
totalement complète.

Quand tu mets :
Dim L, L1, L2, L3, L4, L5 As Range
Tu déclares L, L1, L2, L3 et L4 comme variant (variable
par défaut sans

autre spécifications) et uniquement L5 comme range
Si tu veux tout déclarer comme range tu es obligé
d'écrire :

dim L as range, L1 as range, L2 as range, etc......

Mais dans ton cas tes variables ne peuvent pas être
déclarées comme range

car elles recoivent des valeurs (ce qu'une variable Range
ne peut pas) par :

L5 = Cells(F, "D").Value
Tu dois donc les déclarer plus explicitement comme
String, date, byte,

integer, etc... ou comme le suggérait Michel, ne rien
mettre (par parresse

;-) ) et laisser alors Excel définir la variable comme
variant.


Je te suggère de te reporter à l'aide ou à un bon livre
pour approfondir tes

infos sur les variables car c'est essentiel.
--
HTH

Paul V.

Cath wrote:
Bonjour à tous,
j'ai un code qui fonctionne avec 2002 mais me pose des
soucis avec 2000.
Je n'arrive pas à trouver l'erreur.

Merci pour votre aide
Cath

Voici le message :
Variable objet ou variable de bloc With non défini
Poisition sur la ligne L5..........

Voici le code

Private Sub Workbook_Open()

Dim C, F As Integer
Dim L, L1, L2, L3, L4, L5 As Range
Dim D, D1 As Range

Worksheets("Liste").Activate
C = 1
For F = 1 To [b564].End(3).Row
L1 = Cells(F, "A").Value
L2 = Cells(F, "G").Value
L3 = Cells(F, "I").Value
L4 = Cells(F, "B").Value
L5 = Cells(F, "D").Value
L = L & L5 & " - " & Cells(F, "J") & Chr(10)
If Cells(F, "B") = Cells(F + 1, "B") Then
Else: Cells(C, "K") = L1
Cells(C, "L") = L2
Cells(C, "N") = L3
Cells(C, "M") = L4 & Chr(10) & Left(L, Len
(L) -


1): C = C + 1
L = ""
End If
Next
End sub



.