Message sur deuxieme itération boucle for

[Résolu/Fermé]
Signaler
Messages postés
5
Date d'inscription
mercredi 31 juillet 2013
Statut
Membre
Dernière intervention
8 août 2013
-
Messages postés
5
Date d'inscription
mercredi 31 juillet 2013
Statut
Membre
Dernière intervention
8 août 2013
-
Bonjour, peut-être pourrez-vous me sauver de ma désespérance. J'ai un code qui génère et met en forme un fichier excel par département depuis un rapport BO V5 (oui, je sais, c'est un dinosaure mais on bosse avec ce qu'on nous donne).
La première itération de la boucle for se passe bien et j'ai mon beau fichier du département de l'Ain. A la deuxième itération, j'ai le message qui m'aide beaucoup "91 - Variable objet ou variable de bloc with non définie". J'ai identifié la ligne sur laquelle il génère le message et c'est la première de la boucle.

Je suis sous win7. Je vous mets le début de mon code (il est trop long pour que je vous soule avec le reste qui n'est que de la mise en forme). Il plante sur la ligne "Set xlBook = xlApp.Workbooks.Add".

Merci d'avance de votre aide.

Sub Département()
'Creation d'un fichier Excel par Département à partir du ".rep"
Dim Ma_Date As String
Dim DateDuJour As String
Dim RepStockage As String
Dim W_Tmp As Variant
Dim TabReport As Variant
Dim TabDept As Variant
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
Dim i As Integer
Dim j As Integer
Dim MyControls As CmdBarControls
Dim MyPopup As CmdBarPopup
Dim NbFeuil As Integer
Dim NomFeuil As String
Dim NbOnglet As Integer
Dim NomFic As String
Dim Nb_Colonne As Long
Dim Nb_Ligne As Long
Dim Dern_Cellule As String
Dim Ma_Date_Fic As String
Dim Cellule As Range
Dim n As Integer
Dim Nb As Integer
Dim k As Integer
Dim Region As String
Dim Filt As String
Dim VideAR1 As String
Dim VideAR2 As String
On Error GoTo ErrorHandler

'Initialisation
DateDuJour = Format(Date, "dd-mm-yyyy")
Set Doc = ActiveDocument
TabReport = Array("Page de garde", "AR1", "AR2")
NbOnglet = UBound(TabReport) + 1
TabDept = Array("001-AIN", "002-AISNE", "003-ALLIER", "004-ALPES-DE-HAUTE-PROVENCE", "005-HAUTES-ALPES", "006-ALPES-MARITIMES", _
"007-ARDECHE", "008-ARDENNES", "009-ARIEGE", "010-AUBE", "011-AUDE", "012-AVEYRON", "013-BOUCHES-DU-RHONE", _
"014-CALVADOS", "015-CANTAL", "016-CHARENTE", "017-CHARENTE-MARITIME", "018-CHER", "019-CORREZE", "020-CORSE", _
"021-COTE-D'OR", "022-COTES-D'ARMOR", "023-CREUSE", "024-DORDOGNE", "025-DOUBS", "026-DROME", "027-EURE", "028-EURE-ET-LOIR", _
"029-FINISTERE", "02A-CORSE-DU-SUD", "02B-HAUTE-CORSE", "030-GARD", "031-HAUTE-GARONNE", "032-GERS", "033-GIRONDE", _
"034-HERAULT", "035-ILLE-ET-VILAINE", "036-INDRE", "037-INDRE-ET-LOIRE", "038-ISERE", "039-JURA", "040-LANDES", _
"041-LOIR-ET-CHER", "042-LOIRE", "043-HAUTE-LOIRE", "044-LOIRE-ATLANTIQUE", "045-LOIRET", "046-LOT", "047-LOT-ET-GARONNE", _
"048-LOZERE", "049-MAINE-ET-LOIRE", "050-MANCHE", "051-MARNE", "052-HAUTE-MARNE", "053-MAYENNE", "054-MEURTHE-ET-MOSELLE", _
"055-MEUSE", "056-MORBIHAN", "057-MOSELLE", "058-NIEVRE", "059-NORD", "59L-NORD - LILLE", "59V-NORD - VALENCIENNES", "060-OISE", _
"061-ORNE", "062-PAS-DE-CALAIS", "063-PUY-DE-DOME", "064-PYRENEES-ATLANTIQUES", "065-HAUTES-PYRENEES", _
"066-PYRENEES-ORIENTALES", "067-BAS-RHIN", "068-HAUT-RHIN", "069-RHONE", "070-HAUTE-SAONE", "071-SAONE-ET-LOIRE", _
"072-SARTHE", "073-SAVOIE", "074-HAUTE-SAVOIE", "075-PARIS", "076-SEINE-MARITIME", "077-SEINE-ET-MARNE", "078-YVELINES", _
"079-DEUX-SEVRES", "080-SOMME", "081-TARN", "082-TARN-ET-GARONNE", "083-VAR", "084-VAUCLUSE", "085-VENDEE", "086-VIENNE", _
"087-HAUTE-VIENNE", "088-VOSGES", "089-YONNE", "090-TERRITOIRE DE BELFORT", "091-ESSONNE", "092-HAUTS-DE-SEINE", _
"093-SEINE-SAINT-DENIS", "094-VAL-DE-MARNE", "095-VAL-D'OISE", "971-GUADELOUPE", "972-MARTINIQUE", "973-GUYANE", _
"974-REUNION", "975-SAINT-PIERRE-ET-MIQUELON", "976-MAYOTTE")
Nb = UBound(TabDept)
VideAR1 = "N"
VideAR2 = "N"

'Rafraichissement du fournisseur de données
Set DP = Doc.DataProviders.Item(1)
Doc.Refresh
Ma_Date = Format(DP.LastExecutionTime, "dd/mm/yyyy") 'Date dernier rafraichissement
Ma_Date_Fic = Format(DP.LastExecutionTime, "dd-mm-yyyy")

'Repertoire de stockage des fichiers résulat
RepStockage = "C:\AR\"
W_Tmp = Dir(RepStockage, vbDirectory)
If W_Tmp = "" Then
MkDir (RepStockage)
End If

'Initialisation d'excel
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
xlApp.Interactive = True
xlApp.DisplayAlerts = False

'Filtre sur la région
For k = 0 To Nb

'on cree un classeur
Set xlBook = xlApp.Workbooks.Add

'On ne garde qu'une feuille dans le classeur
NbFeuil = xlBook.Worksheets.Count
If NbFeuil > 1 Then
For i = 1 To NbFeuil - 1
NomFeuil = xlBook.Worksheets(1).Name
xlBook.Worksheets(1).Delete
Next i
End If

'Creation du nombre de feuille égal au nombre d'onglet
NbFeuil = xlBook.Worksheets.Count
If NbOnglet > NbFeuil Then
For i = NbFeuil To NbOnglet - 1
Set xlSheet = xlBook.Worksheets.Add
Next i
End If

'Boucle pour chaque onglets
For i = 0 To NbOnglet - 1

'selection d'un onglet BO
Set Rep = ActiveDocument.Reports(TabReport(i))
Rep.Activate

'Filtre sur la Region
Filt = Chr(34) & TabDept(k) & Chr(34)
If i = 1 Then
Call Rep.AddComplexFilter("DEPARTEMENT(AR1)", "=<DEPARTEMENT(AR1)> = " & Filt)
Rep.ForceCompute
Else
If i = 2 Then
Call Rep.AddComplexFilter("DEPARTEMENT(AR2)", "=<DEPARTEMENT(AR2)> = " & Filt)
Rep.ForceCompute
End If
End If

'activation d'une feuille Excel
Set xlSheet = xlBook.Worksheets(i + 1)

'nommage de la feuille active
xlSheet.Name = TabReport(i)
xlSheet.Activate

'Copie du .rep
'on utilise la commande copier tout de BO
Set MyControls = Application.CmdBars.Item(2).Controls
Set MyPopup = MyControls.Item(2)
Set MyControls = MyPopup.CmdBar.Controls
MyControls.Item(20).Execute

'coller dans la feuille Excel
xlSheet.Paste

8 réponses

Messages postés
15965
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 septembre 2021
1 535
Bonjour,

Votre code est bien du VBA excel ????
Messages postés
5
Date d'inscription
mercredi 31 juillet 2013
Statut
Membre
Dernière intervention
8 août 2013

Bonjour, comme dit dans mon post, la macro est faite sous BO V5 pour export vers Excel. Mais peu importe, ça reste du VBA.
Messages postés
15965
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 septembre 2021
1 535
Re,

avec quelques lignes en commentaire et une fin de sub normale, pas de probleme sur de l'excel, vos 104 classeurs se creent sans probleme !!! Donc ......
Messages postés
5
Date d'inscription
mercredi 31 juillet 2013
Statut
Membre
Dernière intervention
8 août 2013

Qu'avez-vous mis en commentaire?
Messages postés
15965
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 septembre 2021
1 535
Re,
Sub Département()
    'Creation d'un fichier Excel par Département à partir du ".rep"
    Dim Ma_Date As String
    Dim DateDuJour As String
    Dim RepStockage As String
    Dim W_Tmp As Variant
    Dim TabReport As Variant
    Dim TabDept As Variant
    Dim xlApp As Object
    Dim xlBook As Object
    Dim xlSheet As Object
    Dim i As Integer
    Dim j As Integer
    'Dim MyControls As CmdBarControls
    'Dim MyPopup As CmdBarPopup
    Dim NbFeuil As Integer
    Dim NomFeuil As String
    Dim NbOnglet As Integer
    Dim NomFic As String
    Dim Nb_Colonne As Long
    Dim Nb_Ligne As Long
    Dim Dern_Cellule As String
    Dim Ma_Date_Fic As String
    Dim Cellule As Range
    Dim n As Integer
    Dim Nb As Integer
    Dim k As Integer
    Dim Region As String
    Dim Filt As String
    Dim VideAR1 As String
    Dim VideAR2 As String
    'On Error GoTo ErrorHandler

    'Initialisation
    DateDuJour = Format(Date, "dd-mm-yyyy")
    'Set Doc = ActiveDocument
    TabReport = Array("Page de garde", "AR1", "AR2")
    NbOnglet = UBound(TabReport) + 1
    TabDept = Array("001-AIN", "002-AISNE", "003-ALLIER", "004-ALPES-DE-HAUTE-PROVENCE", "005-HAUTES-ALPES", "006-ALPES-MARITIMES", _
    "007-ARDECHE", "008-ARDENNES", "009-ARIEGE", "010-AUBE", "011-AUDE", "012-AVEYRON", "013-BOUCHES-DU-RHONE", _
    "014-CALVADOS", "015-CANTAL", "016-CHARENTE", "017-CHARENTE-MARITIME", "018-CHER", "019-CORREZE", "020-CORSE", _
    "021-COTE-D'OR", "022-COTES-D'ARMOR", "023-CREUSE", "024-DORDOGNE", "025-DOUBS", "026-DROME", "027-EURE", "028-EURE-ET-LOIR", _
    "029-FINISTERE", "02A-CORSE-DU-SUD", "02B-HAUTE-CORSE", "030-GARD", "031-HAUTE-GARONNE", "032-GERS", "033-GIRONDE", _
    "034-HERAULT", "035-ILLE-ET-VILAINE", "036-INDRE", "037-INDRE-ET-LOIRE", "038-ISERE", "039-JURA", "040-LANDES", _
    "041-LOIR-ET-CHER", "042-LOIRE", "043-HAUTE-LOIRE", "044-LOIRE-ATLANTIQUE", "045-LOIRET", "046-LOT", "047-LOT-ET-GARONNE", _
    "048-LOZERE", "049-MAINE-ET-LOIRE", "050-MANCHE", "051-MARNE", "052-HAUTE-MARNE", "053-MAYENNE", "054-MEURTHE-ET-MOSELLE", _
    "055-MEUSE", "056-MORBIHAN", "057-MOSELLE", "058-NIEVRE", "059-NORD", "59L-NORD - LILLE", "59V-NORD - VALENCIENNES", "060-OISE", _
    "061-ORNE", "062-PAS-DE-CALAIS", "063-PUY-DE-DOME", "064-PYRENEES-ATLANTIQUES", "065-HAUTES-PYRENEES", _
    "066-PYRENEES-ORIENTALES", "067-BAS-RHIN", "068-HAUT-RHIN", "069-RHONE", "070-HAUTE-SAONE", "071-SAONE-ET-LOIRE", _
    "072-SARTHE", "073-SAVOIE", "074-HAUTE-SAVOIE", "075-PARIS", "076-SEINE-MARITIME", "077-SEINE-ET-MARNE", "078-YVELINES", _
    "079-DEUX-SEVRES", "080-SOMME", "081-TARN", "082-TARN-ET-GARONNE", "083-VAR", "084-VAUCLUSE", "085-VENDEE", "086-VIENNE", _
    "087-HAUTE-VIENNE", "088-VOSGES", "089-YONNE", "090-TERRITOIRE DE BELFORT", "091-ESSONNE", "092-HAUTS-DE-SEINE", _
    "093-SEINE-SAINT-DENIS", "094-VAL-DE-MARNE", "095-VAL-D'OISE", "971-GUADELOUPE", "972-MARTINIQUE", "973-GUYANE", _
    "974-REUNION", "975-SAINT-PIERRE-ET-MIQUELON", "976-MAYOTTE")
    Nb = UBound(TabDept)
    VideAR1 = "N"
    VideAR2 = "N"

    'Rafraichissement du fournisseur de données
    'Set DP = Doc.DataProviders.Item(1)
    'Doc.Refresh
    'Ma_Date = Format(DP.LastExecutionTime, "dd/mm/yyyy") 'Date dernier rafraichissement
    'Ma_Date_Fic = Format(DP.LastExecutionTime, "dd-mm-yyyy")

    'Repertoire de stockage des fichiers résulat
    RepStockage = "C:\AR\"
    W_Tmp = Dir(RepStockage, vbDirectory)
    If W_Tmp = "" Then
        MkDir (RepStockage)
    End If

    'Initialisation d'excel
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True
    xlApp.Interactive = True
    xlApp.DisplayAlerts = False

'   Filtre sur la région
    For k = 0 To Nb

        'on cree un classeur
        Set xlBook = xlApp.Workbooks.Add

       'On ne garde qu'une feuille dans le classeur
        NbFeuil = xlBook.Worksheets.Count
        If NbFeuil > 1 Then
            For i = 1 To NbFeuil - 1
                NomFeuil = xlBook.Worksheets(1).Name
                xlBook.Worksheets(1).Delete
            Next i
        End If

        'Creation du nombre de feuille égal au nombre d'onglet
        NbFeuil = xlBook.Worksheets.Count
        If NbOnglet > NbFeuil Then
            For i = NbFeuil To NbOnglet - 1
                Set xlSheet = xlBook.Worksheets.Add
            Next i
        End If

'       Boucle pour chaque onglets
        For i = 0 To NbOnglet - 1

            'selection d'un onglet BO
            'Set Rep = ActiveDocument.Reports(TabReport(i))
            'Rep.Activate

            'Filtre sur la Region
            'Filt = Chr(34) & TabDept(k) & Chr(34)
            'If i = 1 Then
            '    Call Rep.AddComplexFilter("DEPARTEMENT(AR1)", "=<DEPARTEMENT(AR1)> = " & Filt)
            '    Rep.ForceCompute
            'Else
            '    If i = 2 Then
            '        Call Rep.AddComplexFilter("DEPARTEMENT(AR2)", "=<DEPARTEMENT(AR2)> = " & Filt)
            '        Rep.ForceCompute
            '    End If
            ''End If

            'activation d'une feuille Excel
            Set xlSheet = xlBook.Worksheets(i + 1)

            '   nommage de la feuille active
            xlSheet.Name = TabReport(i)
            xlSheet.Activate

            'Copie du .rep
            'on utilise la commande copier tout de BO
            'Set MyControls = Application.CmdBars.Item(2).Controls
            'Set MyPopup = MyControls.Item(2)
            'Set MyControls = MyPopup.CmdBar.Controls
            'MyControls.Item(20).Execute

            'coller dans la feuille Excel
            xlSheet.Paste


        Next i
    Next k
End Sub


A+
Messages postés
5
Date d'inscription
mercredi 31 juillet 2013
Statut
Membre
Dernière intervention
8 août 2013

Bonjour, rien à faire, je n'arrive pas à résoudre mon problème. J'ai tenté d'isoler les même lignes que vous mais ça ne fonctionne pas. Le plus terrible c'est que j'ai un code identique dans un autre rapport qui tourne parfaitement et là non. J'en perds mon latin!
Messages postés
15965
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 septembre 2021
1 535
Bonjour,

N'ayant pas BO V5, je ne puis vous aider d'avantage, sauf peut-etre a comparer vos deux codes complets celui qui marche et celui qui marche pas.

Copier chaque code dans un fichier notepad et faites les suivre par le lien suivant:

https://www.cjoint.com/

ne pas oublier de copier/coller les liens crees dans votre prochain message

A+
Messages postés
5
Date d'inscription
mercredi 31 juillet 2013
Statut
Membre
Dernière intervention
8 août 2013

Merci de vos efforts mais j'ai trouvé! C'était un vilain filtre sur la région et le département présent sur les tableaux BO. Ca me rassure, je commençais à perdre ma foi en VB.