Message sur deuxieme itération boucle for
Résolu
mara_jade
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
mara_jade Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
mara_jade Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Message sur deuxieme itération boucle for
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Comment recuperer un message supprimé sur whatsapp - Guide
- Deuxieme ecran pc - Guide
- Message supprimé whatsapp - Guide
- Message absence thunderbird - Guide
8 réponses
Bonjour, comme dit dans mon post, la macro est faite sous BO V5 pour export vers Excel. Mais peu importe, ça reste du VBA.
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 ......
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 ......
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
A+
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+
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!
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+
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+