Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/08/2011, 21h40   #1
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 200
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 200
Points : 18
Points : 18
Par défaut fonction count sur excel 2010

BOnjour

j'ai un bout de code qui marche sans souci sur excel 2003 par contre sur excel 2010 il me met l'erreur suivante :

Citation:
erreur d'éxécution 1004 erreur définie par l'application ou pas l'objet

le code est :
Code :
1
2
3
4
For k = 1 To Workbooks("clients.xls").Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
  ' code pour effectuer des calculs
 
Next k
le probleme ne se pose pas si je réecris en

Code :
1
2
3
4
5
Workbooks("clients.xls").activate
For k = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
  ' code pour effectuer des calculs
 
Next k
mais comme je travaille sur plusieurs classeur excel différent il faut que je reprenne tout le code vba pour réactiver les bons classeurs ....

n'y a-t-il un moyen de garder le code sans avtgiver le classeur auparavant?

merci
moimemessssssssss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 22h00   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
sur qu'elle ligne l'erreur ?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 22h23   #3
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 200
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 200
Points : 18
Points : 18
l'erreur se situe sur la lgine 3 cad

Code :
1
2
 
For k = 1 To Workbooks("clients.xls").Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
moimemessssssssss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 22h37   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
je n'ai pas excel 2010 sous la main peu tu voir si tu as la même erreur sur la ligne suivante :

que tu place avant le FOR ...

et si tu as l'erreur regarde si celle-ci persiste avec :

Code :
Msgbox Workbooks("clients.xls").Sheets(1).Rows.Count
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 22h42   #5
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

je pense à un conflit de formats...

le classeur incriminé doit inclure des macros, hors sous 2007 et après les formats avec et sans diffèrent xlsx ou xlsm...

Donc Excel ne sait pas retrouver ses petits...

Si tu actives le classeur, l'interprétation ne suit pas le même processus vu que le classeur est actif et que ses macros ont été ou non activées = pas de dilemme

test la même chose en sauvegardant ton classeur en xlsm sous le même code en le gardant non actif...

cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 22h48   #6
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Citation:
Envoyé par bbil Voir le message
je n'ai pas excel 2010 sous la main peu tu voir si tu as la même erreur sur la ligne suivante :

Ca devrait être OK vu qu'on aura : 1048576 donc qui rentre encore dans un Long, il en est autrement d'un :
Code :
1
2
3
4
5
Sub Dénombrer()
 
   MsgBox Worksheets(1).Cells.Count
 
End Sub
voir ce fil

cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 22h59   #7
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Ce n'est pas un problème d'entrer dans un long ...

ce que je pense c'est que Rows ... sans rien devant s'applique à la feuille active .. et si la feuille active n'est pas un feuille de calcul mais un graphique ou autre on doit avoir l'erreur 1004 ...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 23h03   #8
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 200
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 200
Points : 18
Points : 18
en effet il n'y a pas d'erreur avec
le msg affiché est bien 1048576 comme l'a dit Ormonth.

le code
Code :
1
2
 
Workbooks("clients.xls").Sheets(1).Rows.Count
n'affiche pas d'erreur
par contre

Code :
1
2
 
Worksheets(1).Cells.Count
affiche un dépssement de capacité comme décrit dans le fil dédié .


donc il faut que j'enregistre tous mes classeurs en xlsm?
c'est le seul changement que je teste.?

mais si je l'enregistre au format 2010 peut on l'ouvrir avec excel 2003?

merci
moimemessssssssss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 23h13   #9
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
pour le test d'affichage tu count tu as bien mis le message box avant le FOR .. et après l'action sur le MsgBox tu as bien l'erreur dans le FOR ..?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 23h17   #10
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 200
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 200
Points : 18
Points : 18
oui c'est ca
mon test est

Code :
1
2
3
4
5
6
7
 
MsgBox Rows.Count
MsgBox Workbooks("clients.xls").Sheets(1).Rows.Count
For k = 1 To Workbooks("clients.xls").Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
   ' code pour effectuer des calculs
 
next k
et j'ai pas d'erreur sur les 2 msgbox mais une erreur sur le for

j'ai réenregistrer mon claseur contenant le code vba en .xlsm
mais le même problème persiste

il faut que je réecrive un code vb apour l'enregistrer automatiquement en .xlsm?
tous les claseur doivent etre au meme format?
moimemessssssssss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 23h30   #11
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Citation:
Envoyé par moimemessssssssss
mais si je l'enregistre au format 2010 peut on l'ouvrir avec excel 2003?
Non, pas directement.

Citation:
Envoyé par bbil
et si la feuille active n'est pas un feuille de calcul mais un graphique ou autre on doit avoir l'erreur 1004
oui, mais on aurait le même comportement du coup sous 2003 normalement...

cordialement,

Didier

Bonsoir,

moimemessssssssss, note au passage la remarque pertinente de bbil, si ta feuille est une Worksheet, ne t'amuses pas à la noter un Sheet, ça te conduira à une galère possible un de ces jours d'autant plus dure à trouver que justement tu n'est pas au fait de la différence

à première vue, le souci ne vient pas de :

mais de :

Code :
.Cells(Rows.Count, 2).End(xlUp).Row
c'est à ce niveau qu'on doit creuser...
Code :
1
2
3
4
5
6
7
8
Dim zz
 
MsgBox Rows.Count
MsgBox Workbooks("toto.xls").Sheets(1).Rows.Count
zz = Workbooks(fichier).Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
MsgBox zz
 
End Sub
= erreur sur le dernier Msgbox

cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 23h37   #12
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 200
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 200
Points : 18
Points : 18
le souci lorsque je réenregistre tout en .xlsm il faut que je change

Workbooks("clients.xls") en Workbooks("clients.xlsm") pour ce classeur

et le faire pour tout les classeurs , non?

y a til un autre moyen plus rapide ?

c'est vrai qu'il aurait été plus simple de passer les noms des classeurs dans une variable!

en effet je connais pas la différence entre sheet et Worksheet
à quoi correspond cette différence?
comment savez vous que j'ignore cette différence ( dû au code que j'ai donnée?)?
moimemessssssssss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 23h43   #13
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Citation:
à quoi correspond cette différence?
vois l'aide VBA à Worksheets (avec un s) et Worksheet et / ou les tutos DVP genre :

Programmer efficacement avec Excel en VBA http://bidou.developpez.com/tutoriels/ExcelVBA/

Citation:
et comment savez vous que j'ignore cette différence ( dû au code que j'ai donnée?)?
oui et réactions / fils

cordialement,

Didier

Citation:
Envoyé par moimemessssssssss
c'est vrai qu'il aurait été plus simple de passer les noms des classeurs dans une variable!
et surtout plus propre etc... cf tuto Rabilloud, mais ça ne change rien, alors qu'on aurait pu espérer le contraire...

Code :
1
2
3
4
5
6
7
8
9
Sub SoluceProprez()
Dim objMonClass As Workbook
 
Set objMonClass = Workbooks("toto.xls")
 
Debug.Print objMonClass.Worksheets(1).Cells.Rows.Count ' = OK
 
Debug.Print objMonClass.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row ' = Boum !
End Sub
cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 23h59   #14
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
bon je continue dans la même idée et :

Code :
1
2
3
4
 
With objMonClass.Worksheets(1)
 Debug.Print .Cells(.Rows.Count, 2).End(xlUp).Row ' = Boum ! ou pas boum ?
end with
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/08/2011, 00h48   #15
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Citation:
Envoyé par bbil Voir le message
bon je continue dans la même idée et :

Code :
1
2
3
4
 
With objMonClass.Worksheets(1)
 Debug.Print .Cells(.Rows.Count, 2).End(xlUp).Row ' = Boum ! ou pas boum ?
end with
pas Boom !

Ouf, c'est rassurant vu les variables objets....

Dans le cas de 2007 et +, il faut donc être absolument explicite puisqu'on revient à écrire :

Code :
1
2
3
4
5
6
7
8
9
10
Sub SoluceProprez2()
Dim objMonCible As Worksheet
 
 
Set objMonCible = Workbooks("toto.xls").Worksheets(1)
 
Debug.Print objMonCible.Cells.Rows.Count ' = OK
 
Debug.Print objMonCible.Cells(objMonCible.Rows.Count, 2).End(xlUp).Row ' = OK
End Sub
Ce qui s'écrit plus proprement ainsi, comme tu le soumets :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Sub SoluceProprez3()
Dim objMonCible As Worksheet
 
Set objMonCible = Workbooks("toto.xls").Worksheets(1)
With objMonCible
    Debug.Print .Cells.Rows.Count ' = OK
 
    Debug.Print .Cells(.Rows.Count, 2).End(xlUp).Row ' = OK
End With
 
Set objMonCible = nothing
End Sub
et montre encore l'avantage des With, end with, vu qu'on est explicite de base...

Il reste donc le différentiel avec 2003 et la feuille active ou non qui doit bien être un souci d'ambiguité.

Encore un point à veiller sur des codes antérieurs.. sauf s'ils sont très propres

Ca va soulager moimemessssssssss surement....

bien vu bbil et bonne nuit,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h35   #16
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 200
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 200
Points : 18
Points : 18
bonjour

merci pour vos réponses détaillées.

boum siginifie ca marche pas?


car

Code :
1
2
3
4
5
6
7
8
9
10
11
 
Sub SoluceProprez()
Dim objMonClass As Workbook
 
Set objMonClass = Workbooks("toto.xls")
 
Debug.Print objMonClass.Worksheets(1).Cells.Rows.Count '  o,k ca marche
 
Debug.Print objMonClass.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row ' ca marche pas ici  
 
End Sub
et
Code :
1
2
3
With objMonClass.Worksheets(1)
 Debug.Print .Cells(.Rows.Count, 2).End(xlUp).Row ' c marche
end with

bon il faut que je regarde plus en détail pour mieux comprendre les différences de syntaxe et la différence entre sheets et worksheets.

en tout cas le fait de ne pas tout changer rassure

je vais continuer des test

merci
moimemessssssssss est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h49.


 
 
 
 
Partenaires

Hébergement Web