XL 2013 Export en CSV dans boucle For : bug

rhadamanthe

XLDnaute Junior
Bonjour a tous,

J'ai bien fait mes devoirs et ecrit un code qui me parait tres bien : helas il ne marche pas....

Dans la feuille liste, j'ai 205 clients pour lesquels je mets a jour un tableau MAJ que j'exporte en CSV. Rien de bien complexe.

Tout se met bien a jour increment par increment mais quand j'insere l'export en CSV (qui fonctionne aussi en independant) : ca ne marche plus. J'ai bien l'increment au niveau des noms mais plus la mise a jour de mon tableau de donnees, ce qui me donne 205 CSV avec un titre different mais le meme contenu...

Code:
Sub SaveAsCSV()
    
    Dim strName As String
    
    fin = Sheets("List").Range("A:A").Rows.Count
    fin = Range("A" & fin).End(xlUp).Row
    
    For i = 2 To fin
    
    Code = Sheets("List").Range("A" & i)
    Name = Sheets("List").Range("B" & i)

    Sheets("List").[E4].Value = Code

    'Rafraichissement des calculs
    
    Sheets("MAJ").Select
    ActiveWorkbook.RefreshAll
    
    'Export en CSV
    
    Application.ScreenUpdating = False
    
    strName = ThisWorkbook.Path & "\" & Format(Date, "yy_mm_dd") & "_" & Code & "_" & Name & ".csv"
    
    ActiveSheet.Copy
    ActiveWorkbook.SaveAs Filename:=strName, FileFormat:=xlCSV
    ActiveWorkbook.Close SaveChanges:=False
    
    Application.ScreenUpdating = True
    
    'Fin d'export
    
    CreateObject("Wscript.shell").Popup "File has been Created and Saved as:  " & vbCr & strName, 1, "Copy & Save Report"
    
    Next i
    
End Sub

Un oeil averti aurait il la bienveillance de m'indiquer ce qui cloche ?

Merci d'avance,

rhad
 

rhadamanthe

XLDnaute Junior
Re : Export en CSV dans boucle For : bug

Bonjour...il y a quoi dans la Sheets("MAJ") ? Et au moment de ActiveSheet.Copy , quelle est la feuille active ?

Une table avec lien vers une base de donnee (via Microsoft Query) se trouve dans MAJ. Ce tableau se met a jour en fonction de la cellule E4 dans Liste.

Au moment de la copie, c'est ce tableau qui est actif :

Code:
Sheets("MAJ").Select
ActiveWorkbook.RefreshAll
....
ActiveSheet.Copy

Par contre, il ne se met pas a jour alors que la boucle For continue d'incrementer, les fichiers ont le bon nom mais c'est comme si la mise a jour du tableau via le RefreshAll ne fonctionnait pas...

Edit : Je joins un fichier simplifie sans le gros tableau qui se met a jour pour illustrer le probleme
 

Pièces jointes

  • MAJ AUTO.xlsm
    19.6 KB · Affichages: 27
Dernière édition:

CPk

XLDnaute Impliqué
Re : Export en CSV dans boucle For : bug

Avez vous essayez de jongler avec le mode calcul manuel ou automatic ?
En début de macro vous vous mettez en calcul manuel

Code:
Application.Calculation = xlCalculationManual
Puis en amont de l'export en csv vous recalculez votre feuille , peut-être en l'écrivant comme ça
Code:
sheets("MAJ").calculate

puis en fin de macro une fois la boucle terminée de repasser en calcul automatique (juste avant le End sub) ?
 

rhadamanthe

XLDnaute Junior
Re : Export en CSV dans boucle For : bug

Bonjour,

Bien que je ne comprenne pas pourquoi, j'ai remplace :

Code:
Sheets("MAJ").Select
ActiveWorkbook.RefreshAll

Par

Code:
    Sheets("MAJ").Select
    Range("A2").Select
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

Et ca marche ! :eek:

Les mysteres du VBA sont impenetrables (pour moi en tout cas).

Merci CPk pour ton support !

Bonne journee,

rhad
 

CPk

XLDnaute Impliqué
Re : Export en CSV dans boucle For : bug

Bonjour rhadamanthe, la réponse se trouve dans l'aide fourni avec excel si j'ai bien tout compris.


NomObligatoire/FacultatifType de donnéesDescription
RequêteArrièrePlanFacultatifVarianteS'utilise uniquement avec les objets QueryTables qui sont fondés sur les résultats d'une requête SQL. True pour redonner le contrôle à la procédure dès qu'une connexion de base de données est établie et la requête envoyée. L'objet QueryTable est mis à jour en arrière-plan. False pour ne redonner le contrôle à la procédure qu'une fois que toutes les données ont été récupérées dans la feuille de calcul. Si cet argument n'est pas spécifié, c'est la définition de la propriété BackgroundQuery qui détermine le mode de requête.
 

Discussions similaires

Statistiques des forums

Discussions
312 336
Messages
2 087 389
Membres
103 534
dernier inscrit
Kalamymustapha