增加循环中的列

时间:2018-03-06 08:26:20

标签: excel vba

我面临的问题似乎非常奇怪。

我想循环遍历目录中的所有文件来计算文件数量(要做一个For i = 1到数字文件)((OK),打开它们中的每一个(OK)并复制一个范围到一个主题表。 我的问题是,我希望在每个文件之后,我的粘贴目标将在右侧的步骤中取消(使用我的循环i)。 由于一个我不明白的原因,它不起作用,我推测它,因为我不把我的循环放在适当的地方,但我无法弄清楚在哪里放置它。

如果有人有任何想法,我会非常感谢帮助:) 问候,

让米歇尔

Sub synthèsewb()

    Dim synthese As Worksheet
    Dim chemin As String
    Dim fichier As String
    Dim WorkBk As Workbook
    Dim SourceRange As Range
    Dim DestRange As Range

    Dim i As Integer

    ' détermine la feuille de synthèse
    Set synthese = ThisWorkbook.Sheets(1)

    ' chemin d'accès aux fichiers
     chemin = "V:\DFIN\COM\CCG\CONSO\6-Fichiers de contrôle de liasses\2017\traitement par macro\"

    ' appel de tous les fichiers xls
    fichier = Dir(chemin & "*.xls*")

    'Comptage nombre de fichiers existant
    Do Until fichier = ""
        nbfichier = nbfichier + 1
        fichier = Dir
    Loop

    ' boucle sur tous les fichiers
             Do While fichier <> ""

            ' ouvre les fichiers

                 Set WorkBk = Workbooks.Open(chemin & fichier)

            'boucle sur toutes les feuilles du classeur ouvert

                        For Each sh In WorkBk.Worksheets
                            nom = WorkBk.Name
                           For i = 2 To nbfichier
                                 If sh.Name = "copieSynthèse" Then


                                sh.Range("H16:H22").Copy synthese.Cells(3, i)
                                sh.Range("H10").Copy synthese.Cells(10, i)

                                Set alimenter = ThisWorkbook.Sheets(1).Cells(2, i)

                                            For Each c In alimenter.Cells

                                                    If c.Value = "" Then c.Value = nom

                                            Next c


                                End If
                                i = i + 1
                          Next i
                       Next sh



        ' Close the source workbook without saving changes.
        WorkBk.Close savechanges:=False

        ' Use Dir to get the next file name.
        fichier = Dir()
    Loop



    ' Call AutoFit on the destination sheet so that all
    ' data is readable.
    ActiveSheet.Columns.AutoFit
End Sub

2 个答案:

答案 0 :(得分:2)

我认为你根本不需要i循环。

i = 2
Do While fichier <> ""
    ' ouvre les fichiers
    Set WorkBk = Workbooks.Open(chemin & fichier)
    nom = WorkBk.Name
    'boucle sur toutes les feuilles du classeur ouvert
    For Each sh In WorkBk.Worksheets
        If sh.Name = "copieSynthèse" Then
            sh.Range("H16:H22").Copy synthese.Cells(3, i)
            sh.Range("H10").Copy synthese.Cells(10, i)
            Set alimenter = ThisWorkbook.Sheets(1).Cells(2, i)
            If alimenter.Value = "" Then alimenter.Value = nom
        End If
    Next sh
    ' Close the source workbook without saving changes.
    WorkBk.Close savechanges:=False
   ' Use Dir to get the next file name.
    fichier = Dir()
    i = i + 1
Loop

如果您打算将每个文件更改为2列,请更改为i = i + 1。注意我无法测试它没有相同的文件,重现环境需要很长时间。此外,您不需要迭代超过1x1范围,只需直接引用它。

答案 1 :(得分:0)

我不会说法语,但我可以说nbfichier包含当前正在打开的工作簿的编号。

话虽如此,用i=2开始一个循环没有任何意义,因为预期的起始值是1。

For i = 2 To nbfichier