Reprise du message précédent :
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 :
- Dim k, o
- Dim Wb As Workbook
- Dim WbB As Workbook
- Dim Ws As Worksheet
- Dim WsB As Worksheet
- Sub test()
- Set Wb = Workbooks.Open("A.xls" )
- Set WbB = ThisWorkbook
- Set Ws = Wb.Worksheets(1)
- Set WsB = WbB.Worksheets(1)
- For Each o In WsB.Range("A1:A10" )
- k = k + 1
- galopin
- Next
- End Sub
- Sub galopin()
- Ws.Cells(k, 1).Value = WsB.Cells(k, 1).Value
- 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