Boucle avec fichier Excel à ouvrir

Bonjour,

Je vous met un exemple ci-joint. En premier la méthode barbare ou je doit tout rentrer pour chaque fichier. En deuxième le code que j'ai essayer de faire avec une boucle for.

Dans mon programme j'ai 12 fichier à ouvrir et je dois aller récupérer une valeur dedans. Je voulais savoir si ce serait possible d'utiliser une boucle au lieu de réécrire le programme 12 fois. J'ai essayer avec une boucle For Counter = 0 To 12 Step 1. Cependant quand derrière le nom du fichier je met (Counter), il me dit que ça ne peut pas être une variable. J'ai mis que 3 fois le programme car il se répète comme ça jusqu'à 12.

Sub MAJ_OTD()

        Application.ScreenUpdating = False

        Dim wk_fichier1 As Workbook
        Dim ws_fichier1feuil1 As Worksheet

        Dim wk_fichier2 As Workbook
        Dim ws_fichier2feuil1 As Worksheet

        Set wk_fichier1 = ActiveWorkbook
        Set ws_fichier1feuil1 = wk_fichier1.Worksheets(1)

        Set wk_fichier2 = Application.Workbooks.Open(wk_fichier1.Path & "\OTD\OTD_01.xlsx")
        Set ws_fichier2feuil1 = wk_fichier2.Worksheets(1)

        With ws_fichier2feuil1
             .Range("A1").End(xlDown).Select
             ActiveCell.Offset(-1, 0).Select
             ActiveCell.Offset(0, 4).Select
             ActiveCell.Copy
        End With

        With ws_fichier1feuil1.Range("C3")
             .PasteSpecial Paste:=xlPasteValues
             .Value = CDbl(Split(.Value, "%")(0)) / 100
             .NumberFormat = "0.00%"
        End With

        wk_fichier2.Close (True)

        Dim wk_fichier3 As Workbook
        Dim ws_fichier3feuil1 As Worksheet

        Set wk_fichier1 = ActiveWorkbook
        Set ws_fichier1feuil1 = wk_fichier1.Worksheets(1)

        Set wk_fichier3 = Application.Workbooks.Open(wk_fichier1.Path & "\OTD\OTD_02.xlsx")
        Set ws_fichier3feuil1 = wk_fichier3.Worksheets(1)

        With ws_fichier3feuil1
             .Range("A1").End(xlDown).Select
             ActiveCell.Offset(-1, 0).Select
             ActiveCell.Offset(0, 4).Select
             ActiveCell.Copy
        End With

        With ws_fichier1feuil1.Range("D3")
             .PasteSpecial Paste:=xlPasteValues
             .Value = CDbl(Split(.Value, "%")(0)) / 100
             .NumberFormat = "0.00%"
        End With

        wk_fichier3.Close (True)

End Sub
Sub Maj_OT()

    Dim wk_fichier1 As Workbook
    Dim ws_fichier1feuil1 As Worksheet

    Set wk_fichier1 = ActiveWorkbook
    Set ws_fichier1feuil1 = wk_fichier1.Worksheets(1)

        For Counter = 0 To 12 Step 1

            Dim wk_fichier(Counter) As Workbook
            Dim ws_feuill(Counter) As Worksheet

            Set wk_fichier(Counter) = Application.Workbooks.Open(wk_fichier1.Path & "\OTD\OTD_0(Counter).xlsx")
            Set ws_feuill(Counter) = wk_fichier(Counter).Worksheets(1)

            With ws_feuil1(Counter)
             .Range("A1").End(xlDown).Select
             ActiveCell.Offset(-1, 0).Select
             ActiveCell.Offset(0, 4).Select
             ActiveCell.Copy
            End With

            With ws_fichier1feuil1.Range("D(Counter+2)")
             .PasteSpecial Paste:=xlPasteValues
             .Value = CDbl(Split(.Value, "%")(0)) / 100
             .NumberFormat = "0.00%"
            End With

            wk.fichier(Counter).Close (True)

            Counter = Counter + 1

        Next

End Sub

Bonjour

Cependant quand derrière le nom du fichier je met (Counter)

Logique "Counter" est une fonction excel. remplacez Counter par quelque chose d'autre. Par exemple "num"

1. Dans votre boucle, remplacez

For Counter = 0 To 12 Step 1

par

For num = 0 To 12

Rem :
- attention sur le 0 ne va pas passer, je pense. Vous devriez commencer à 1.
- veillez à déclarer votre variable "num" --> Dim num as byte

2. Plus bas, vous faites un copier coller valeurs. Vous pourriez supprimer les Select.Cela simplifierait le code

Merci pour votre réponse.

J'ai fait les modifications que vous m'avez dites. Mon problème maintenant est pour le chemin d'accès, il me dit que le fichier est introuvable car il ne remplace pas la valeur num par sa valeur mais il le prend tel qu'il est écrit. Je ne sais pas comment écrire cette ligne pour que ça le prenne en compte

Set wk_fichier = Application.Workbooks.Open(wk_fichier1.Path & "\OTD\OTD_0(num).xlsx")

Quel est le nom de votre fichier à ouvrir ?

ceci --> "OTD_0" et le numéro ?

Exemple : OTD_01, OTD_02 ?

oui c'est ça.

Mettez votre ligne comme ceci

Set wk_fichier(num) = Application.Workbooks.Open(wk_fichier1.Path & "\OTD\OTD_0" & num & ".xlsx")

Faites un test.

Edit :
Après j'ai un peu regardé votre code, il me semble qu'il pourrait être simplifié comme ceci
J'ai supprimé les Select et le Copy Paste (à voir si cela sera ok)

Sub Maj_OT()

Dim wk_fichier1 As Workbook
Dim ws_fichier1feuil1 As Worksheet
Dim num As Byte

Set wk_fichier1 = ThisWorkbook
Set ws_fichier1feuil1 = wk_fichier1.Worksheets(1)

For num = 1 To 12 Step 1

    Dim wk_fichier As Workbook
    Dim ws_feuill As Worksheet

    Set wk_fichier(num) = Application.Workbooks.Open(wk_fichier1.Path & "\OTD\OTD_0" & num & ".xlsx")

    Dim ligne As Integer
    With wk_fichier(num).Worksheets(1)
        ligne = .Range("A" & .Rows.Count).End(xlUp).Row - 1 'on repère l'avant dernière ligne 
    End With

    With ws_fichier1feuil1.Range("D" & num + 2)
        .Value = wk_fichier(num).Worksheets(1).Range("D" & ligne).Value
        .Value = CDbl(Split(.Value, "%")(0)) / 100
        .NumberFormat = "0.00%"
    End With

    wk_fichier(num).Close (True)

Next num
End Sub

L'instruction Range("D" & num +2 ) est à vérifier car je pense que si num commence à 1 l'instruction doit devenir Range("D" & num + 1)

Si ok -->

Cordialement

Merci pour votre aide. J'ai fait un mélange des deux programmes et j'arrive à avoir ce que je veux

Rechercher des sujets similaires à "boucle fichier ouvrir"