[VB Excel] - Remplissage Classeur

Fermé
Ancelot - 14 sept. 2009 à 20:11
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 15 sept. 2009 à 14:22
Bonjour,

Je vous écris en stress, j'ai un petit problème dans ma macro et je ne comprends vraiment pas pourquoi ca bugge:

Alors le problème: On a des fichiers toto.xls dans plusieurs dossiers W1, W2, W3, etc.

On doit remplir le tableau sur lequel s'execute la macro avec pour chaque ligne:
A, B, C
W1, (quelques infos de toto.xls)
W2, (les mêmes infos, mais de celui sous le dossier W2)
etc..

Pour le collage des infos, je suis passé par un enregistrement de macro. ensuite, je lui ai fait ouvrir puis fermer les dossiers jusqu'a ce qu'il n ait plus de dossier a ouvrir (arrivée a une cellule dans la colonne A vide)

Je pensais avoir tt bien fait, ET NON, le programme bugge, sans que je comprenne vraiment pourquoi

Pouvez vous m'aider??

Sub toto_Fill()

' toto_Fill Macro
' Macro enregistrée le 14/09/2009 par moi
'
Dim i As Integer
Dim Chemin As String
Dim Filename As String


i = 3

Do
Chemin = "C:\Documents and Settings\st30945\Desktop\A350 STATS\" & Range("A" & i)
Workbooks.Open Filename:=Chemin & "\toto.XLS"





Windows("toto.XLS").Activate
ActiveWindow.Close
Range("G28").Select
Selection.Copy
Windows("ClasseurAremplir.xls").Activate
Range("B3").Select
ActiveSheet.Paste
Windows("toto.XLS").Activate



i = i + 1
Loop While Range("A" & i) <> ""
Workbooks(Filename).Close

End Sub
A voir également:

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
15 sept. 2009 à 10:31
Bonjour,
1/ Filename est un nom réservé VBA: tu n'as pas à le déclarer (dim filename... à supprimer) ni à l'utiliser dans
Workbooks(Filename).Close

crées plutôt une variable fichier
fichier=Chemin & "\toto.XLS"
Workbooks.Open Filename:= fichier
....
Workbooks(fichier).Close

2/ D'autre part, ta macro envoie toujours dans B3
au lieu de Range("B3")
utilises cells(i,2) ou range("B" & i)

3/ tu gagneras un temps fou en supprimant les copy_paste et select-selection

Workbooks.Open Filename:= fichier
donnee=range("G28")
activeworkbook.close
cells(i,2)=donnee




4/ pour éviter le scintillement de l'écran et ganer encore du temps, en début de macro tu écris
Application.ScreenUpdating = False


5/ Workbooks(fichier).Close en dernière est à supprimer (de toutes façons il aurait du être dans la boucle) car il est remplacé par: activeworkbook.close

0
Super!! Merci beaucoup pour ces conseils!!
Un dernier point. quand j'exécute, Excel veut me sauver le fichier. Donc je suis obligé de cliquer non t c'est fastidieux.

Y a-t-il une commande qui permet de cliquer non (comme ca je l inclue dans la boucle) ?

Merci encore pour ton aide
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
15 sept. 2009 à 14:22
re,

essaies
with activeworkbook
   .saved
   .close
end with



pour le fun, ci dessous macro très rapide sans ouvrir les fichiers; valable surtout si beaucoup de "toto" et peu de cellules à collecter

Sub recuperer_G28()
Dim chemin As String
Dim derlig As Long, cptr As Long

'initialisation
cptr = 3
derlig = Range("A65536").End(xlUp).Row
Application.ScreenUpdating False

'collecte
For cptr = 3 To derlig
    chemin = "D:\documents" & "\" & Cells(cptr, 1) ' à adapter
    'macro dite de "Walkenbach" (auteur présumé) non testée sur XL2007
    Cells(cptr, 2) = ExecuteExcel4Macro("'" & chemin & "\[toto.xls]feuil1'!R28C7") 'R28C7 <==> G28
Next
End Sub

0