Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/08/2011, 12h45   #1
Nouveau Membre du Club
 
Inscription : septembre 2010
Messages : 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 126
Points : 29
Points : 29
Par défaut problème de codage d'une boucle VBA

Bonjour,

Je veux boucler ce code VBA :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Range("a65536").Select
    dernière_ligne = Selection.End(xlUp).Row
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Documents and Settings\Bureau\les rapports\export\Fich1.csv" _
        , Destination:=Range("$A$" & dernière_ligne + 1))
        .Name = "Fich1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    Range("A" & dernière_ligne + 1).Select
    Selection.EntireRow.Delete
En résumé je veux prendre des fichiers CSV contenu dans un même chemin, les convertir et les concaténer dans un même fichier Excel. Tout en supprimant les entêtes de ces fichiers sauf le premier.

Voilà,
Cdt,
SKIP
skipeemed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 13h12   #2
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
Salut.

En gros, voilà la boucle
Code :
1
2
3
4
5
6
7
8
dim Fichier as string
 
fichier =dir("c:\monchemin\*.csv")
do while fichier <>""
    ...
    ...
    fichier = dir()
loop
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2011, 11h01   #3
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 668
Points : 7 668
Bonjour,

Depuis le temps que tu es sur le forum, on a bien dû te dire quelques fois d'éviter d'utiliser Select et Selection.

Voici à quoi pourrait ressembler un code plus "propre":

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  Dim wbkDest As Workbook
  Dim wksDest As Worksheet
  Dim c As Range
 
  Set wbkDest = Workbooks("LeNomDuClasseurATraiter")
  Set wksDest = wbkDest.Sheets("LeNomDeLOngletATraiter")
  ' Si le classeur à taiter est celui où se trouve la macro tu peux
  ' te passer du  Dim wbkDest et son Set et écrire
  ' Set wksDest = ThisWorkbook.Sheets("LeNomDeLOngletATraiter")
  Set c = wksDest.Cells(wksDest.Rows.Count, 1).End(xlUp).Offset(1, 0)
  With wksDest.QueryTables.Add(Connection:= _
      "TEXT;C:\Documents and Settings\Bureau\les rapports\export\Fich1.csv" _
      , Destination:=c.Address)
    .Name = "Fich1"
    ' le reste du code contenu dans le With
  End With
  c.EntireRow.Delete
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
AlainTech est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h06.


 
 
 
 
Partenaires

Hébergement Web