VBA nom de fichier et selection intervalle
Résolu/Fermé
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
-
Modifié par manautop le 30/12/2011 à 00:57
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 - 30 déc. 2011 à 11:34
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 - 30 déc. 2011 à 11:34
A voir également:
- VBA nom de fichier et selection intervalle
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Fichier iso - Guide
4 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 757
30 déc. 2011 à 09:16
30 déc. 2011 à 09:16
Bonjour,
Une proposition :
Adapter à la macro ci dessous les noms de classeur et de feuille... A Eclater.xls = votre classeur de 40000 lignes.
Sheets("Feuil1") = la feuille contenant les données
Une proposition :
Adapter à la macro ci dessous les noms de classeur et de feuille... A Eclater.xls = votre classeur de 40000 lignes.
Sheets("Feuil1") = la feuille contenant les données
Option Explicit Sub EclaterFichier() Dim Lign As Long, DrLig As Long Dim Cpt As Integer Dim Chemin As String, NomFich As String Application.DisplayAlerts = False Cpt = 0 Chemin = "C:\Documents and Settings\JSEBBAN\Bureau\2\" With Workbooks("A Eclater.xls").Sheets("Feuil1") DrLig = .Range("A" & Rows.Count).End(xlUp).Row For Lign = 1 To DrLig Step 200 NomFich = "OFFRE5402_" & 141 + Cpt & ".csv" Workbooks.Add .Range("A" & Lign & ":A" & Lign + 199).Copy Range("A1") ActiveWorkbook.SaveAs Filename:=Chemin & NomFich, FileFormat:=xlCSV, CreateBackup:=False ActiveWindow.Close Cpt = Cpt + 1 Next End With Application.DisplayAlerts = True End Sub
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
Modifié par manautop le 30/12/2011 à 10:38
Modifié par manautop le 30/12/2011 à 10:38
Merci Franck P
Vous etes mon sauveur, j'etais trés loin
Grace à vous j'ai compris l'utilisation de "" et du &
je me permet quelques questions :
DrLig = .Range("A" & Rows.Count).End(xlUp).Row ==> permet de selectioner les lignes tant qu'elles ne sont pas vide ?
Cpt ==> je ne comprend pas , pourriez vous m'expliquer, je comprend que cela à un rapport avec l'augmentation du nom d'un à chaque fois mais je ne comprend pas comment
For Lign = 1 To DrLig Step 200 =+> permet de selectionner des plages de 200 ce que je ne comprend pas c'est comment vous faites pour que la macro commence ensuite à 201 jusqu'a 300 puis de 301 à 400 etc ???
Dernière question pour étendre la selection à deux colonnes par exp
je dois passer par ça
ption Explicit
Sub EclaterFichier()
Dim Lign As Long, DrLig As Long
Dim Cpt As Integer
Dim Chemin As String, NomFich As String
Dim rRange
Set rRange = Range(Columns(1), Columns(2))
Application.DisplayAlerts = False
Cpt = 0
Chemin = "C:\Documents and Settings\JSEBBAN\Bureau\2\"
With Workbooks("A.xlsx").Sheets("Feuil1")
DrLig = .Range("rRange" & Rows.Count).End(xlUp).Row
For Lign = 1 To DrLig Step 200
NomFich = "OFFRE5402_" & 141 + Cpt & ".csv"
Workbooks.Add
.Range("A:" & Lign & ":A" & Lign + 199).Copy Range("A1")
ActiveWorkbook.SaveAs Filename:=Chemin & NomFich, FileFormat:=xlCSV, CreateBackup:=False
ActiveWindow.Close
Cpt = Cpt + 1
Next
End With
Application.DisplayAlerts = True
End Sub
dsl de ces questions mais ce serait bete de copier coller cette macro sans la comprendre
Cordialement
John
Vous etes mon sauveur, j'etais trés loin
Grace à vous j'ai compris l'utilisation de "" et du &
je me permet quelques questions :
DrLig = .Range("A" & Rows.Count).End(xlUp).Row ==> permet de selectioner les lignes tant qu'elles ne sont pas vide ?
Cpt ==> je ne comprend pas , pourriez vous m'expliquer, je comprend que cela à un rapport avec l'augmentation du nom d'un à chaque fois mais je ne comprend pas comment
For Lign = 1 To DrLig Step 200 =+> permet de selectionner des plages de 200 ce que je ne comprend pas c'est comment vous faites pour que la macro commence ensuite à 201 jusqu'a 300 puis de 301 à 400 etc ???
Dernière question pour étendre la selection à deux colonnes par exp
je dois passer par ça
ption Explicit
Sub EclaterFichier()
Dim Lign As Long, DrLig As Long
Dim Cpt As Integer
Dim Chemin As String, NomFich As String
Dim rRange
Set rRange = Range(Columns(1), Columns(2))
Application.DisplayAlerts = False
Cpt = 0
Chemin = "C:\Documents and Settings\JSEBBAN\Bureau\2\"
With Workbooks("A.xlsx").Sheets("Feuil1")
DrLig = .Range("rRange" & Rows.Count).End(xlUp).Row
For Lign = 1 To DrLig Step 200
NomFich = "OFFRE5402_" & 141 + Cpt & ".csv"
Workbooks.Add
.Range("A:" & Lign & ":A" & Lign + 199).Copy Range("A1")
ActiveWorkbook.SaveAs Filename:=Chemin & NomFich, FileFormat:=xlCSV, CreateBackup:=False
ActiveWindow.Close
Cpt = Cpt + 1
Next
End With
Application.DisplayAlerts = True
End Sub
dsl de ces questions mais ce serait bete de copier coller cette macro sans la comprendre
Cordialement
John
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 757
30 déc. 2011 à 10:39
30 déc. 2011 à 10:39
dsl de ces questions mais ce serait bete de copier coller cette macro sans la comprendre C'est rare de lire ça, mais je suis entièrement de ton avis, ça fait plaisir!!!
1- DrLig = .Range("A" & Rows.Count).End(xlUp).Row ==> renvoie le numéro de la dernière ligne non vide de la colonne A. Tu dis au départ ne pas savoir combien de lignes traiter, on le sait grâce à ça.
Ca nous permet de boucler sur toutes les lignes (For Lign=), de la première (Lign = 1) à la dernière (To DrLig), en "sautant" systématiquement 200 lignes plus bas (Step 200)
D'ou la ligne de code : For Lign = 1 To DrLig Step 200
2- Cpt. Tu dis que le nom du fichier csv s'incrémente de 1 en 1 en commençant par "gnagna" & 141.
Donc, on incrémente un compteur numérique : Cpt de 1 en 1 et on ajoute à la fin de ton nom de fichier 141 + Cpt
1ere boucle ==> "gnagna"141
Cpt = Cpt + 1
2eme boucle ==> "gnagna"142
Cpt = Cpt + 1
3eme boucle ==> "gnagna"143 etc etc...
3- For Lign = 1 To DrLig Step 200
1ere boucle ==> Lign = 1
2eme boucle ==> Lign = 201
3eme boucle ==> Lign = 401
(Step 200 : on boucle de 200 en 200...)
La sélection ne se fait pas là, mais sur cette ligne :
.Range("A:" & Lign & ":A" & Lign + 199).Copy
On copie dans la colonne A de Lign à Lign + 199
Soit, si on reprends notre boucle :
For Lign = 1 To DrLig Step 200
1ere boucle ==> Lign = 1 ====> on copie de 1 à 1+199 donc de 1 à 200
2eme boucle ==> Lign = 201 ====> on copie de 201 à 201+199 donc de 201 à 400
3eme boucle ==> Lign = 401 ====> on copie de 401 à 401+199 donc de 401 à 600
etc etc...
4- Dernière question pour étendre la selection à deux colonnes par exp
On reprends cette ligne : .Range("A:" & Lign & ":A" & Lign + 199).Copy Range("A1")
On copie de A Lign à A Lign + 199...
Ce que tu veux toi : Copier de A Lign à B Lign + 199... Logique non?
Donc
.Range("A:" & Lign & ":B" & Lign + 199).Copy Range("A1")
5- pour finir, la syntaxe du copier coller
.Range("A:" & Lign & ":B" & Lign + 199).Copy Range("A1")
Je copie DE ALignBLign+199 (.Range("A:" & Lign & ":B" & Lign + 199).Copy ) VERS A1(Range("A1"))
1- DrLig = .Range("A" & Rows.Count).End(xlUp).Row ==> renvoie le numéro de la dernière ligne non vide de la colonne A. Tu dis au départ ne pas savoir combien de lignes traiter, on le sait grâce à ça.
Ca nous permet de boucler sur toutes les lignes (For Lign=), de la première (Lign = 1) à la dernière (To DrLig), en "sautant" systématiquement 200 lignes plus bas (Step 200)
D'ou la ligne de code : For Lign = 1 To DrLig Step 200
2- Cpt. Tu dis que le nom du fichier csv s'incrémente de 1 en 1 en commençant par "gnagna" & 141.
Donc, on incrémente un compteur numérique : Cpt de 1 en 1 et on ajoute à la fin de ton nom de fichier 141 + Cpt
1ere boucle ==> "gnagna"141
Cpt = Cpt + 1
2eme boucle ==> "gnagna"142
Cpt = Cpt + 1
3eme boucle ==> "gnagna"143 etc etc...
3- For Lign = 1 To DrLig Step 200
1ere boucle ==> Lign = 1
2eme boucle ==> Lign = 201
3eme boucle ==> Lign = 401
(Step 200 : on boucle de 200 en 200...)
La sélection ne se fait pas là, mais sur cette ligne :
.Range("A:" & Lign & ":A" & Lign + 199).Copy
On copie dans la colonne A de Lign à Lign + 199
Soit, si on reprends notre boucle :
For Lign = 1 To DrLig Step 200
1ere boucle ==> Lign = 1 ====> on copie de 1 à 1+199 donc de 1 à 200
2eme boucle ==> Lign = 201 ====> on copie de 201 à 201+199 donc de 201 à 400
3eme boucle ==> Lign = 401 ====> on copie de 401 à 401+199 donc de 401 à 600
etc etc...
4- Dernière question pour étendre la selection à deux colonnes par exp
On reprends cette ligne : .Range("A:" & Lign & ":A" & Lign + 199).Copy Range("A1")
On copie de A Lign à A Lign + 199...
Ce que tu veux toi : Copier de A Lign à B Lign + 199... Logique non?
Donc
.Range("A:" & Lign & ":B" & Lign + 199).Copy Range("A1")
5- pour finir, la syntaxe du copier coller
.Range("A:" & Lign & ":B" & Lign + 199).Copy Range("A1")
Je copie DE ALignBLign+199 (.Range("A:" & Lign & ":B" & Lign + 199).Copy ) VERS A1(Range("A1"))
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
30 déc. 2011 à 10:38
30 déc. 2011 à 10:38
ah ben j'ai trouvé plus simple
Option Explicit
Sub EclaterFichier()
Dim Lign As Long, DrLig As Long
Dim Cpt As Integer
Dim Chemin As String, NomFich As String
Application.DisplayAlerts = False
Cpt = 0
Chemin = "C:\Documents and Settings\JSEBBAN\Bureau\2\"
With Workbooks("A.xlsx").Sheets("Feuil1")
DrLig = .Range("A" & Rows.Count).End(xlUp).Row
DrLig = .Range("B" & Rows.Count).End(xlUp).Row
For Lign = 1 To DrLig Step 200
NomFich = "OFFRE5402_" & 141 + Cpt & ".csv"
Workbooks.Add
.Range("A" & Lign & ":A" & Lign + 199).Copy Range("A1")
.Range("B" & Lign & ":B" & Lign + 199).Copy Range("B1")
ActiveWorkbook.SaveAs Filename:=Chemin & NomFich, FileFormat:=xlCSV, CreateBackup:=False
ActiveWindow.Close
Cpt = Cpt + 1
Next
End With
Application.DisplayAlerts = True
End Sub
Merci lol
Option Explicit
Sub EclaterFichier()
Dim Lign As Long, DrLig As Long
Dim Cpt As Integer
Dim Chemin As String, NomFich As String
Application.DisplayAlerts = False
Cpt = 0
Chemin = "C:\Documents and Settings\JSEBBAN\Bureau\2\"
With Workbooks("A.xlsx").Sheets("Feuil1")
DrLig = .Range("A" & Rows.Count).End(xlUp).Row
DrLig = .Range("B" & Rows.Count).End(xlUp).Row
For Lign = 1 To DrLig Step 200
NomFich = "OFFRE5402_" & 141 + Cpt & ".csv"
Workbooks.Add
.Range("A" & Lign & ":A" & Lign + 199).Copy Range("A1")
.Range("B" & Lign & ":B" & Lign + 199).Copy Range("B1")
ActiveWorkbook.SaveAs Filename:=Chemin & NomFich, FileFormat:=xlCSV, CreateBackup:=False
ActiveWindow.Close
Cpt = Cpt + 1
Next
End With
Application.DisplayAlerts = True
End Sub
Merci lol
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
30 déc. 2011 à 11:34
30 déc. 2011 à 11:34
dsl je n'avais pas vu ta réponses quand j'ai mis ma solution,
Un grand merci à toi pour ton aide, tes explications et le temps passé
Merci
Un grand merci à toi pour ton aide, tes explications et le temps passé
Merci