Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1697 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  gérer trois classeurs différents

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

gérer trois classeurs différents

n°1545501
Xocs
Posté le 20-04-2007 à 09:16:39  profilanswer
 

edit : cf Etat actuel

  

Bonjour,

 

j'ai un problème, je ne m'en sors pas en voulant virevolter sur 3 classeurs différents

 

je m'explique : j'ai un fichier d'utilisation de prévision d'utilisation du matériel (VENDREDI 13 AVRIL.xls) tapé par une autre personne donc un peu désordonné, et cette personne n'utilise pas les mêmes références que ce que l'on me demande (elle indique par exemple le num de la plaque et mon supérieur veut le num de réf interne du véhicule)

 

j'ai donc associé une base de donnée faisant correspondre les plaques et les réf internes

 

VENDREDI 13 AVRIL.xls : fichier de prévision d'utilisation du matériel
BaseDeDonnes.xls : base de données correspondances plaque/réf internes
DefautPointage.xls : là où je evux que ça soit transcrit

  

Mon problème est qu'à force d'ouvrir les classeurs excel et de les fermer, ça ne va pas ... il n'y a pas moyen de travailler temporairement dans un classeur pour qqs instructions, puis passer à l'autre, puis revenir à celui là etc ... sans devoir ouvrir et fermer à chaque fois ?

 


Code :
  1. Dim Ligne
  2. Dim Cellule
  3. Dim Employe
  4. Dim appExcel As Excel.Application
  5. Dim BaseDeDonnees As Excel.Workbook
  6. Dim VENDREDI13AVRIL As Excel.Workbook
  7. Dim DefautPointageFinal As Excel.Workbook
  8. 'Macro balayant le tableau verticalement dans la première colonne
  9. Sub BalayageVertical()
  10.    
  11.     Set appExcel = CreateObject("Excel.Application" )
  12.     Set BaseDeDonnees = appExcel.Workbooks.Open("D:\Mes documents\user\Script SAP régulation\Tests\BaseDeDonnees.xls" )
  13.     Set VENDREDI13AVRIL = appExcel.Workbooks.Open("D:\Mes documents\user\Script SAP régulation\Tests\VENDREDI 13 AVRIL.xls" )
  14.     Set DefautPointageFinal = appExcel.Workbooks.Open("D:\Mes documents\user\Script SAP régulation\Tests\DefautPointageFinal.xls" )
  15.     Ligne = 5
  16.    
  17.     Workbooks.Open (VENDREDI13AVRIL)
  18.     For Each Cellule In Range("A:A" )
  19. 'Instruction de sortie du balayage vertical
  20.         If Cellule.Value = "LOCATION EXT" Then
  21.             n = 1
  22.         ElseIf ValeurCellule <> NullString Then
  23.             Call RechercheChef
  24.         End If
  25.     Next
  26.     End Sub


Message édité par Xocs le 25-10-2011 à 14:59:01
mood
Publicité
Posté le 20-04-2007 à 09:16:39  profilanswer
 

n°1545525
jpcheck
Pioupiou
Posté le 20-04-2007 à 09:57:43  profilanswer
 

tu peux retirer la fonction .open dans tes workbook, tu mets juste  
for each cell in workbooks("vendredi13" ).range("A:A" )
next

n°1545568
Xocs
Posté le 20-04-2007 à 10:45:43  profilanswer
 

jpcheck a écrit :

tu peux retirer la fonction .open dans tes workbook, tu mets juste  
for each cell in workbooks("vendredi13" ).range("A:A" )
next


 
 
mouarf, c'est un truc comme ça que je cherchais ... merci beaucoup à toi :)
 
 :hello:

n°1545593
Xocs
Posté le 20-04-2007 à 11:13:33  profilanswer
 

Euh en fait, je viens donc d'écrire  
 

Code :
  1. For Each Cellule In Workbooks("VENDREDI13AVRIL" ).Range("A:A" )
  2. 'Instruction de sortie du balayage vertical
  3.        If Cellule.Value = "LOCATION EXT" Then
  4.            n = 1
  5.        ElseIf ValeurCellule <> NullString Then
  6.            Call RechercheChef
  7.        End If
  8.    Next


 
Et cela provoque une erreur d'exécution 9 : L'indice n'appartient pas à la sélection.
 
Tu saurais d'où cela peut venir ?


Message édité par Xocs le 20-04-2007 à 11:30:17
n°1545597
jpcheck
Pioupiou
Posté le 20-04-2007 à 11:16:36  profilanswer
 

essaye avec ca  
For Each Cellule In Workbooks("VENDREDI13AVRIL" ).Range("A:A" ).Cells

n°1545613
Xocs
Posté le 20-04-2007 à 11:28:08  profilanswer
 

jpcheck a écrit :

essaye avec ca
For Each Cellule In Workbooks("VENDREDI13AVRIL" ).Range("A:A" ).Cells

 


Code :
  1. Dim Ligne
  2. Dim Cellule
  3. Dim Employe
  4. Dim NumeroFeuille
  5. Dim FeuilleBaseDeDonnes As Integer
  6. Dim FeuilleVENDREDI13AVRIL As Integer
  7. Dim FeuilleDefautPointage As Integer
  8.  
  9. Dim appExcel As Excel.Application
  10. Dim BaseDeDonnees As Excel.Workbook
  11. Dim VENDREDI13AVRIL As Excel.Workbook
  12. Dim DefautPointage As Excel.Workbook
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20. 'Macro balayant le tableau verticalement dans la première colonne
  21. Sub BalayageVertical()
  22.    NumeroFeuille = 0
  23.    
  24.    Set appExcel = CreateObject("Excel.Application" )
  25.    
  26.    Set BaseDeDonnees = appExcel.Workbooks.Open("D:\Mes documents\user\Script SAP régulation\Tests\BaseDeDonnees.xls" )
  27.    Set VENDREDI13AVRIL = appExcel.Workbooks.Open("D:\Mes documents\user\Script SAP régulation\Tests\VENDREDI 13 AVRIL.xls" )
  28.    Set DefautPointage = appExcel.Workbooks.Open("D:\Mes documents\user\Script SAP régulation\Tests\DefautPointage.xls" )
  29.    
  30.    Ligne = 5
  31.    
  32.    For Each Cellule In Workbooks("VENDREDI13AVRIL" ).Range("A:A" ).Cells
  33. 'Instruction de sortie du balayage vertical
  34.        If Cellule.Value = "LOCATION EXT" Then
  35.            n = 1
  36.        ElseIf ValeurCellule <> NullString Then
  37.            Call RechercheChef
  38.        End If
  39.    Next
  40.    End Sub
 


ça me redonne la même erreur :/

Message cité 1 fois
Message édité par Xocs le 25-10-2011 à 14:59:44
n°1545622
jpcheck
Pioupiou
Posté le 20-04-2007 à 11:33:33  profilanswer
 

et avec ca ?

Xocs a écrit :

Code :
  1. For Each Cellule In VENDREDI13AVRIL.Range("A:A" ).Cells




n°1545628
Xocs
Posté le 20-04-2007 à 11:37:04  profilanswer
 

ça me retourne une erreur d'exécution 438 : propriété ou méthode non gérée par cet objet ...

n°1545636
Xocs
Posté le 20-04-2007 à 11:45:13  profilanswer
 

Si je comprends bien, par exemple, ici, VENDREDI13AVRIL représente l'instruction d'ouverture de l'application
 
dans la ligne For Each Cellule In VENDREDI13AVRIL.xls.Range("A:A" ).Cells, on lui demande de rouvrir le fichier non ?

n°1545664
galopin01
Posté le 20-04-2007 à 12:17:03  profilanswer
 

Salut,
Workbooks, ne comporte pas de Range ni de Cells...
Workbooks("blabla" ).Worksheeets("truc" ).Cells ou Range...
A+

mood
Publicité
Posté le 20-04-2007 à 12:17:03  profilanswer
 

n°1545722
Xocs
Posté le 20-04-2007 à 13:43:09  profilanswer
 

galopin01 a écrit :

Salut,
Workbooks, ne comporte pas de Range ni de Cells...
Workbooks("blabla" ).Worksheeets("truc" ).Cells ou Range...
A+

 

je viens de modifier comme ceci :

 
Code :
  1. Dim Ligne
  2. Dim Cellule
  3. Dim Employe
  4. Dim NumeroFeuille
  5.  
  6. Dim appExcel As Excel.Application
  7.  
  8. Dim BaseDeDonnees As Excel.Workbook
  9. Dim VENDREDI13AVRIL As Excel.Workbook
  10. Dim DefautPointage As Excel.Workbook
  11.  
  12. Dim FeuilleBaseDeDonnees As Excel.Worksheet
  13. Dim FeuilleVENDREDI13AVRIL As Excel.Worksheet
  14. Dim FeuilleDefautPointage As Excel.Worksheet
  15.  
  16.  
  17. 'Macro balayant le tableau verticalement dans la première colonne
  18. Sub BalayageVertical()
  19.        
  20.    Set appExcel = CreateObject("Excel.Application" )
  21.    
  22.    Set BaseDeDonnees = appExcel.Workbooks.Open("D:\Mes documents\user\Script SAP régulation\Tests\BaseDeDonnees.xls" )
  23.    Set VENDREDI13AVRIL = appExcel.Workbooks.Open("D:\Mes documents\user\Script SAP régulation\Tests\VENDREDI 13 AVRIL.xls" )
  24.    Set DefautPointage = appExcel.Workbooks.Open("D:\Mes documents\user\Script SAP régulation\Tests\DefautPointage.xls" )
  25.    
  26.    Set FeuilleBaseDeDonnees = BaseDeDonnees.Worksheets(1)
  27.    Set FeuilleVENDREDI13AVRIL = VENDREDI13AVRIL.Worksheets(1)
  28.    Set FeuilleDefautPointage = DefautPointage.Worksheets(1)
  29.    
  30.    Ligne = 5
  31.    
  32.    For Each Cellule In Workbooks("VENDREDI13AVRIL" ).Worksheets("FeuilleVENDREDI13AVRIL" ).Range("A:A" )
  33. 'Instruction de sortie du balayage vertical
  34.        If Cellule.Value = "LOCATION EXT" Then
  35.        ElseIf ValeurCellule <> NullString Then
  36.            Call RechercheChef
  37.        End If
  38.    Next
  39.    End Sub
 

et ça s'arrêt à la ligne 32 en faisant une erreur 9 : indice n'appartenant pas à la sélection

 

Pourtant, ça me paraissait bon cette fois-ci :/


Message édité par Xocs le 25-10-2011 à 15:00:10
n°1545771
galopin01
Posté le 20-04-2007 à 14:40:01  profilanswer
 

VENDREDI13AVRIL est une variable (As Excel.Workbook) et tu l'utilises comme un string
de même FeuilleVENDREDI13AVRIL est une variable (As Excel.Worksheet) et tu l'utilises comme un string
 
Ou tu utilises tes variables instanciées ou tu utilises directement les noms de claseurs et de feuilles.
De manière générale il est maladroit d'utiliser des noms de variables équivoques (semblables aux noms d'objets)
 
En gros ça donne, (non verifié et codé avec le pied... )
ou :
For Each Cellule In Workbooks("VENDREDI 13 AVRIL. xls" ).Worksheets("Feuille1" ).Range("A:A"  
 
ou :
sans Dim appExcel As Excel.Application
Dim Wb As Workbook
Dim Ws As Worksheet
Set Wb = Workbooks.Open("D:\Mes documents\user\Script SAP régulation\Tests\VENDREDI 13 AVRIL.xls" )
Set Ws = Wb.Worksheets(1)
 
For Each Cellule In Ws.Range...
 
 
A+


Message édité par galopin01 le 27-10-2011 à 08:27:58
n°1545781
galopin01
Posté le 20-04-2007 à 14:51:54  profilanswer
 

Et si tu tiens à l'ouvrir dans une autre instance...
 
Dim App As Excel.Application  
Dim Wb As Workbook  
Dim Ws As Worksheet  
Set App = CreateObject("Excel.Application" )
Set Wb = App.Workbooks.Open("D:\Mes documents\user\Script SAP régulation\Tests\VENDREDI 13 AVRIL.xls" )  
Set Ws = Wb.Worksheets(1)
 
For Each Cellule In Ws.Range...  
 
A+


Message édité par galopin01 le 27-10-2011 à 08:28:16
n°1545787
galopin01
Posté le 20-04-2007 à 14:58:00  profilanswer
 

Euh...
Je peine un peu à comprendre cette structure :
 
Dim...
Dim...
Dim...
 
Sub...
 
End Sub
 
ça me parait (pour le moins) ...curieux !
A+

n°1545798
Xocs
Posté le 20-04-2007 à 15:04:21  profilanswer
 

Merci beaucoup :)
ça marche à présent. j'ai d'autres problèmes mais je vais tenter de trouver seul ;)

n°1545804
Xocs
Posté le 20-04-2007 à 15:07:07  profilanswer
 

galopin01 a écrit :

Euh...
Je peine un peu à comprendre cette structure :
 
Dim...
Dim...
Dim...
 
Sub...
 
End Sub
 
ça me parait (pour le moins) ...curieux !
A+


 
 
Ah ? eh bien je pensais déclarer les variables dans la déclartion, d'où les Dim
 
puis après les utiliser dans ma macro Sub ... End Sub
 
non ?  [:tibo2002]

n°1545848
galopin01
Posté le 20-04-2007 à 15:57:07  profilanswer
 

Ben, sauf utilisation très très particulière d'habitude c'est :
 
Sub...
Dim...
Dim...
Dim...
 
End Sub


Message édité par galopin01 le 20-04-2007 à 15:59:01
n°1545857
Xocs
Posté le 20-04-2007 à 16:15:45  profilanswer
 

Ah ok, mais j'utilise ces variables dans d'autres Sub aussi (j'ai essayé d'intégrer ça dans la première, ça ne marchait plus)

n°1545859
ingenieurc​esi
Posté le 20-04-2007 à 16:19:42  profilanswer
 

ca fait donc partie des utilisations particulière
 
regarde l'aide de vba avec le mot "public"

n°1545896
Xocs
Posté le 20-04-2007 à 18:06:17  profilanswer
 

Ok. Mais j'avoue que je ne saisis pas bien l'intérêt de "s'embêter" à les déclarer Public alors qu'en les déclarant au début ça marche :??:
C'est juste sémantiquement plus correct ? plus élégant ? ou il y a des raisons ?
 
 
J'ai un autre problème après : j'essaye de copier le contenu d'une cellule dans l'autre, j'ai donc fait
 

Code :
  1. Sub InscriptionEngin()
  2.    FeuilleDefautPointageFinal.Cells(1, Ligne).Value = FeuilleBaseDeDonnees.Cells(1, Ligne2).Value
  3.    FeuilleDefautPointageFinal.Cells(2, Ligne).Value = FeuilleBaseDeDonnees.Cells(4, Ligne2).Value
  4.    FeuilleDefautPointageFinal.Cells(4, Ligne).Value = FeuilleBaseDeDonnees.Cells(3, Ligne2).Value
  5. End Sub


 
 
Mais celà ne marche pas : erreur d'exécution 1004 : erreur définie par l'application ou par l'objet.
 
J'avais aussi essayé de passer par une variable
 

Code :
  1. Sub InscriptionEngin()
  2.    IdEngin = FeuilleBaseDeDonnees.Cells(1, Ligne2).Value
  3.    Description = FeuilleBaseDeDonnees.Cells(4, Ligne2).Value
  4.    Dernier = FeuilleBaseDeDonnees.Cells(3, Ligne2).Value
  5.    
  6.    FeuilleDefautPointageFinal.Cells(1, Ligne).Value = IdEngin
  7.    FeuilleDefautPointageFinal.Cells(2, Ligne).Value = Description
  8.    FeuilleDefautPointageFinal.Cells(4, Ligne).Value = Dernier
  9. End Sub


 
Cela ne marche pas non plus, même en mettant IdEngin entre "" ...

n°1545917
galopin01
Posté le 20-04-2007 à 18:17:13  profilanswer
 

Non, ce n'est pas sémantique, c'est conceptuel.
 
Sauf exceptions (assez exceptionnelles au niveau débutant) les Dim se placent au début de chaque Sub...
 
Il est difficile de corriger une macro avec des bribes de bouts de morceau de modules surtout si tu mets tes Dim en tête !
 
Celà dépend de l'ensemble de ton classeur, du (ou des) modules utilisés d'autant que tu fais des appels à d'autres procédures...
 
[Edit] Ce n'est pas un jugement péjoratif ! On est tous débutant en quelque chose...  
Ta manière de voir les déclarations est peut-être vraie en C#, java ou Php, et tu es peut être un expert dans ces langages, je ne sais pas, mais en VBA tu fais surement fausse route.
 
A+

Message cité 1 fois
Message édité par galopin01 le 20-04-2007 à 18:26:39
n°1545931
Xocs
Posté le 20-04-2007 à 18:26:58  profilanswer
 

En fait, plus simplement, je n'arrive pas à écrire le contenu d'une cellule d'un classeur dans un autre classeur ... pourtant, ça doit pas être bien sorcier ... j'ai essayé par un copier coller, et par une méthode de Ws.Cells(1,1).value = Ws2.Cells(1,1).value mais ça ne marche pas ...

n°1545935
Xocs
Posté le 20-04-2007 à 18:28:20  profilanswer
 

galopin01 a écrit :

Non, ce n'est pas sémantique, c'est conceptuel.
 
Sauf exceptions (assez exceptionnelles au niveau débutant) les Dim se placent au début de chaque Sub...
 
Il est difficile de corriger une macro avec des bribes de bouts de morceau de modules surtout si tu mets tes Dim en tête !
 
Celà dépend de l'ensemble de ton classeur, du (ou des) modules utilisés d'autant que tu fais des appels à d'autres procédures...
 
[Edit] Ce n'est pas un jugement péjoratif ! On est tous débutant en quelque chose...  
Ta manière de voir les déclarations est peut-être vraie en C#, java ou Php, et tu es peut être un expert dans ces langages, je ne sais pas, mais en VBA tu fais surement fausse route.
 
A+


 
Ne t'inquiètes pas, je le prends bien ;) d'autant plus que tu cherches à m'aider visiblement :)
Bon, je vais les réintégrer en public.
 
PS : je ne suis par un expert en programmation :D j'ai des notions on va dire, et j'essaye de m'accrocher ...

n°1545939
ingenieurc​esi
Posté le 20-04-2007 à 18:33:53  profilanswer
 

j'utilise souvent
cells(1,1).formular1c1
mais cells(1,1).value marche aussi
il y a surement une difference mais j'ai pas saisi laquelle essaye avec ca
ca peut peut etre marcher
 
si quelqu'un la connait je suis preneur

n°1545943
Xocs
Posté le 20-04-2007 à 18:42:38  profilanswer
 

ingenieurcesi a écrit :

j'utilise souvent
cells(1,1).formular1c1
mais cells(1,1).value marche aussi
il y a surement une difference mais j'ai pas saisi laquelle essaye avec ca
ca peut peut etre marcher
 
si quelqu'un la connait je suis preneur


 
 
le Ws.cells(1,1).value = Ws2.cells(1,1).value ne marche pas chez moi en tout cas :/

n°1545950
ingenieurc​esi
Posté le 20-04-2007 à 18:49:42  profilanswer
 

tu as essayer avec formular1c1 ?
 
ce qui est sur ( je viens de le tester ) Cells(1, 2).Value = Cells(1, 1).Value fonctionne tu es bien sur de tes ws et ws2 ?
 
essaye ce petit test
ws2.cells(1,2).value=ws2.cells(1,1).value
val=ws2.cells(1,1).value
msgbox val
 
ou
ws.cells(1,1)=ws2.cells(1,1)

n°1545956
galopin01
Posté le 20-04-2007 à 18:56:15  profilanswer
 

bonsoir,
Non pas de Public des :
Sub...
Dim...
Dim...
 
End Sub
 
Bien sur dans un contexte de déclarations orthodoxes  
ws.cells(1,2).value=ws2.cells(1,1).value est correct.
C'est tout le reste qu'il faut disséquer, variable après variable, dans tout le module.
A+


Message édité par galopin01 le 20-04-2007 à 18:57:01
n°1545957
Xocs
Posté le 20-04-2007 à 18:59:28  profilanswer
 

bon, je me mets tellement à douter là que je préfère mettre une caps pour que qqn d'autre voie si j'ai pas fait d'erreur à la c... genre une variable mal orthographiée (mai je pense pas parce que les caps se mettent toutes seules)
 
http://www.hebergement-images.com/ [...] 3_caps.jpg


Message édité par Xocs le 20-04-2007 à 19:02:28
n°1545958
galopin01
Posté le 20-04-2007 à 19:00:21  profilanswer
 

FormulaR1C1 renvoie une value si la cellule contient une valeur, si elle contient une formule ça renvoie la formule en mode R1C1

n°1545964
Xocs
Posté le 20-04-2007 à 19:07:53  profilanswer
 

Je ne comprends pas ... si je fais une structure comme ça :
 

Code :
  1. Sub ...
  2. Public Dim ...
  3. Public Dim ...
  4.  
  5. ...
  6.  
  7. End Sub


 
ça devrait aller non ?

n°1545971
jpcheck
Pioupiou
Posté le 20-04-2007 à 19:20:41  profilanswer
 

quel est l'intéret de mettre public dans ta sub ?

n°1545972
ingenieurc​esi
Posté le 20-04-2007 à 19:21:37  profilanswer
 

ouais je suis pas sur que dans ta derniere macro le "système" sache à quoi correpond feuillebasededonnees et feuilledefautpointagefinal

n°1545973
ingenieurc​esi
Posté le 20-04-2007 à 19:22:53  profilanswer
 

si les varariables sont pas publics, d'une macro à l'autre, elles ne seront pas reconnues. non?!!

n°1545974
Xocs
Posté le 20-04-2007 à 19:23:19  profilanswer
 

jpcheck a écrit :

quel est l'intéret de mettre public dans ta sub ?


 
 
que la variable soit connue aussi dans les autres sub ?

n°1545976
jpcheck
Pioupiou
Posté le 20-04-2007 à 19:24:08  profilanswer
 

si tu mets public autant la mettre hors de la sub...

n°1545977
ingenieurc​esi
Posté le 20-04-2007 à 19:24:24  profilanswer
 

vu que tes macros sont assez courtes pourquoi ne pas faire une seule macro.  
ca devrait resoudre ton problème et tu n'as qu'à faire que 2 couper/coller au bon endroit

n°1545978
Xocs
Posté le 20-04-2007 à 19:24:49  profilanswer
 

ingenieurcesi a écrit :

ouais je suis pas sur que dans ta derniere macro le "système" sache à quoi correpond feuillebasededonnees et feuilledefautpointagefinal


 
 
 
Ah ? Pourtant RechercheChef() passe sans problème (j'ai même testé avec des espions, il va bien chercher les bonnes valeurs)

n°1545979
ingenieurc​esi
Posté le 20-04-2007 à 19:25:20  profilanswer
 

et moi aussi je l'ai mettrais hors de la sub

n°1545980
Xocs
Posté le 20-04-2007 à 19:26:29  profilanswer
 

ingenieurcesi a écrit :

vu que tes macros sont assez courtes pourquoi ne pas faire une seule macro.  
ca devrait resoudre ton problème et tu n'as qu'à faire que 2 couper/coller au bon endroit


 
 
 
euh oui, mais après je vais ajouter d'autres modules à ce programme
 
là c'est difficile parce que je début avec vba, mais après ça sera exactement le même style de manipulations à faire mais dans des ordres différents ... donc si j'arrive à m'en sortir là normalement c'est bon après :)
 
mais là j'ai peur que si je mette tout dans une macro, au final il faura que je fasse pareil et ça sera dur à suivre non ?
 
enfin, en même temps, si c'est la seule solution ...

n°1546015
galopin01
Posté le 20-04-2007 à 20:37:33  profilanswer
 

Public ou pas c'est sans intéret, ce ne me semble pas le problème.
Si l'on utilise une notation conventionnelle avec des variables dans les procédures, celà oblige à passer des paramètres et/(ou) à utiliser des blocs With pour travailler sur des objets diférents.
Ce ne me semble pas beaucoup plus compliqué que les contorsions que tu essaies de faire...
Il me semble (mais je ne suis pas du tout sur de cette affirmation) que le fait de déclarer des objets Workbook et Worksheet en tête de module rallonge exagérément la durée d'exécution de la procédure. Il faudrait vérifier en mettant un timer mais bon...
Quoi qu'il en soit, bien que cette méthode ne m'inspire guère, malgré ma répugnance, je l'ai testé sur 2 classeurs bidons, je vous passe un tas de commentaire...
J'ai juste résumé scrupuleusement le code :  
 

Code :
  1. Dim k, o
  2. Dim Wb As Workbook
  3. Dim WbB As Workbook
  4. Dim Ws As Worksheet
  5. Dim WsB As Worksheet
  6. Sub test()
  7. Set Wb = Workbooks.Open("A.xls" )
  8. Set WbB = ThisWorkbook
  9. Set Ws = Wb.Worksheets(1)
  10. Set WsB = WbB.Worksheets(1)
  11. For Each o In WsB.Range("A1:A10" )
  12. k = k + 1
  13. galopin
  14. Next
  15. End Sub
  16. Sub galopin()
  17. Ws.Cells(k, 1).Value = WsB.Cells(k, 1).Value
  18. End Sub


 
Et ça passe sans encombre ! Ce qui n'est en aucune façon un encouragement à coder de cette manière !
 
J'en déduit qu'il y a matière à examiner plus à fond l'ensemble du classeur de notre ami pour voir si dans les autres modules au hasard de ses déclarations globales, il n'y aurait pas des déclarations contradictoires.  
Pour ma part dans le code en image je ne vois pas d'anomalie criante (sauf peut-être cellule qui est déclarée) mais pas instanciée et ensuite utilisée à la volée de manière... (à vérifier mais bon...)
Tant qu'à mettre une pièce jointe, tu aurais aussi vite fait de balancer tout ton classeur sur cjoint ( en virant les données inutiles dans les feuilles.
Bonsoir.


Message édité par galopin01 le 20-04-2007 à 20:42:48
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  gérer trois classeurs différents

 

Sujets relatifs
Beaucoup de formulaires utilisateur à gérer[C] Executables différents pour un même code source?
Gerer le chargement d'une page Webaffichage aléatoire d'images de format différents
Nombre de mois différents par rapport a des datesAppeler un meme script php en cliquant sur plusieurs liens differents
Faire tourner trois boucle for next en même temps ...?vitesse d'éxecution sur différents ordinateurs (Résolu)
Référencement des différents crossOver pour les algorithmes génétiques[VB.net] Différents problèmes sur mon logiciel
Plus de sujets relatifs à : gérer trois classeurs différents


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR