Faire une boucle en langage VBA

Fermé
david3434 Messages postés 31 Date d'inscription mercredi 26 octobre 2016 Statut Membre Dernière intervention 28 juin 2017 - Modifié le 27 juin 2017 à 16:49
f894009 Messages postés 17268 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 29 mars 2025 - 28 juin 2017 à 14:35
Bonjour,

Je souhaiterai créer une boucle qui me permette de coller pour chacun de mes magasins le fichier des OD dans un fichier récap. Ceci m'éviterais de faire les 90 copier coller manuellement et gagner du temps.

Voici le lien du fichier ou je souhaite faire mes copier coller

https://mon-partage.fr/f/aWlmSRJ6/

Voici le lien d'un fichier magasin en exemple

https://mon-partage.fr/f/dzdA9V4W/

Ci dessous la macro faite à partir d'un exemple internet mais j'avoue être perdu. Rien ne se passe quand je lance la macro malheureusement.

Sub Recup_OD_ENT()

Application.DisplayAlerts = False


Dim Fichier As String
Dim Chemin As String
Dim Magasin As String
Dim LigneDebut As Integer
Dim NomMagEns As String

With Application
        .Calculation = xlManual
        .MaxChange = 0.001
        .CalculateBeforeSave = False
    End With

Chemin = "U:\Contrôle de gestion\OD\"
Fichier = Dir("OD_ENT_*.CSV")

Sheets("BDD ENT INFO").Select
Range(Cells(20, 1), Cells(150000, 17)).Select
Selection.ClearContents


Do While Fichier <> ""
Set wb = Workbooks.Open(Chemin & Fichier)
    
    Windows(Fichier).Activate
    Sheets("OD_ENT_*").Select
    NomMagEns = Cells(2, 2).Value

    
    Sheets("OD_ENT_*").Select
    Range(Cells(2, 1), Cells(2000, 17)).Select
    Selection.Copy
    Windows("OD Cloture fin JUIN 2017").Activate
    Sheets("BDD ENT INFO").Select
    Cells(50000, 1).Select
    LigneDebut = Selection.End(xlUp).Row
    Cells(LigneDebut + 1, 3).Select
         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
     Windows(Fichier).Activate
             
wb.Close True
Set wb = Nothing
Fichier = Dir
Loop

    With Application
        .Calculation = xlAutomatic
        .MaxChange = 0.001
    End With
    ActiveWorkbook.PrecisionAsDisplayed = False
        
   Application.DisplayAlerts = True
    
End Sub
A voir également:

2 réponses

yg_be Messages postés 23535 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2025 Ambassadeur 1 579
27 juin 2017 à 21:22
est-ce en lien avec ceci: https://forums.commentcamarche.net/forum/affich-34631587-bug-dans-ma-macro ?
sinon, as-tu déjà un code qui fonctionne pour un magasin?
ensuite, tu pourras faire une boucle pour les 90 magasins.
0
david3434 Messages postés 31 Date d'inscription mercredi 26 octobre 2016 Statut Membre Dernière intervention 28 juin 2017
28 juin 2017 à 08:18
Bonjour,

Non c'est une autre macro, on m'a parlé de cette méthode de "boucle" mais je ne m'attendais pas à quelque chose de si complexe. Et je n'ai pas non plus un code qui fonctionne pour un magasin mais du coup je vais essayer comme ça. Si tu as des idées hésites pas lol
0
yg_be Messages postés 23535 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2025 1 579 > david3434 Messages postés 31 Date d'inscription mercredi 26 octobre 2016 Statut Membre Dernière intervention 28 juin 2017
Modifié le 28 juin 2017 à 10:11
en gros une boucle, c'est, par exemple:
dim i as integer
for i =1 to 90
    traitementmagasin(i)
next i

remarque que si tu fais ainsi, tu gagnes déjà énormément de temps:
 traitementmagasin("magasin1")
 traitementmagasin("magasin2")
'  et ainsi de suite ...
 traitementmagasin("magasin90")
0
f894009 Messages postés 17268 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 29 mars 2025 1 713
28 juin 2017 à 14:35
Bonjour a vous deux

Fichier modifie pour recuperation donnees externes CSV

https://mon-partage.fr/f/Rd1AJkn9/

A vous de voir. Vous allez avoir des problemes de format de colonne pour les dates, vos formules ne sont pas d'accord
0