Optimisation VBA macro
Résolu/Fermé
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
-
6 janv. 2012 à 12:10
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 - 23 janv. 2012 à 16:18
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 - 23 janv. 2012 à 16:18
A voir également:
- Optimisation VBA macro
- Optimisation pc - Accueil - Utilitaires
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- Macro logiciel - Télécharger - Organisation
2 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
6 janv. 2012 à 13:56
6 janv. 2012 à 13:56
Salut et bonne année!
Tes 3 questions :
1- ici je voudrais dans la mesure du possible qu'il me demande l'emplacement du fichier (en sachantyqu'il sagit toujours de la feuille 1) Si c'est TOUJOURS la feuille "Feuil1", ne change rien!
2- ici, je voudrais qu'il me demande de rentrer la première partie du nom du fichier ainsi que le numéro ou commencer
Il faut donc, avant de lancer la boucle (donc avant la ligne : For Lign = 1 To DrLig Step 200), définir une variable, qu'on appelera prefixe, et qui stockera le nom demandé par Inputbox. Idem pour le premier numéro, avec une variable de type Integer :
3- je voudrais dans la mesure du possible qu'il me demande d'indiquer où enregistrer les fichiers decoupés
Tu as cette ligne de code :
Chemin = "C:\Documents and Settings\JSEBBAN\Bureau\2\"
Il suffit d'entrer en Feuil2, A1 par exemple un nom de chemin valide exemple : C:\Documents and Settings\JSEBBAN\travail\
et de l'attribuer à la variable Chemin :
Ce qui te donne au final :
Tes 3 questions :
1- ici je voudrais dans la mesure du possible qu'il me demande l'emplacement du fichier (en sachantyqu'il sagit toujours de la feuille 1) Si c'est TOUJOURS la feuille "Feuil1", ne change rien!
2- ici, je voudrais qu'il me demande de rentrer la première partie du nom du fichier ainsi que le numéro ou commencer
Il faut donc, avant de lancer la boucle (donc avant la ligne : For Lign = 1 To DrLig Step 200), définir une variable, qu'on appelera prefixe, et qui stockera le nom demandé par Inputbox. Idem pour le premier numéro, avec une variable de type Integer :
Dim prefixe As String, numero As Integer prefixe = InputBox("Saisir un nom valide : sans <,>,?,|,/,\...", "Saisie du prefixe") If prefixe = "" Then Exit Sub numero = Application.InputBox("Saisir un nombre", "Saisie du premier numéro", Type:=1) If numero = 0 Then Exit Sub For Lign = 1 To DrLig Step 200 NomFich = prefixe & numero + Cpt & ".csv"
3- je voudrais dans la mesure du possible qu'il me demande d'indiquer où enregistrer les fichiers decoupés
Tu as cette ligne de code :
Chemin = "C:\Documents and Settings\JSEBBAN\Bureau\2\"
Il suffit d'entrer en Feuil2, A1 par exemple un nom de chemin valide exemple : C:\Documents and Settings\JSEBBAN\travail\
et de l'attribuer à la variable Chemin :
With Sheets("Feuil2") Chemin = .Range("A1").Value End With
Ce qui te donne au final :
sub Separe200() Dim Lign As Long, DrLig As Long Dim Cpt As Integer Dim Chemin As String, NomFich As String Dim prefixe As String, numero As Integer Application.DisplayAlerts = False Cpt = 0 With Sheets("Feuil2") Chemin = .Range("A1").Value End With With Workbooks("A.xlsx").Sheets("Feuil1") DrLig = .Range("A" & Rows.Count).End(xlUp).Row '----renvoie le numéro de la dernière ligne non vide de la colonne A DrLig = .Range("B" & Rows.Count).End(xlUp).Row '----renvoie le numéro de la dernière ligne non vide de la colonne B prefixe = InputBox("Saisir un nom valide : sans <,>,?,|,/,\...", "Saisie du prefixe") If prefixe = "" Then Exit Sub numero = Application.InputBox("Saisir un nombre", "Saisie du premier numéro", Type:=1) If numero = 0 Then Exit Sub For Lign = 1 To DrLig Step 200 NomFich = prefixe & numero + 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, local:=True 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
6 janv. 2012 à 17:40
6 janv. 2012 à 17:40
Bonne Année et merci à toi
Ca fait très longtemps tu m'avais deja aidé, c'est fou de te retrouver ici (2008/09)^^
j'ai un peu progressé depuis le temps
donc une petite erreur(je me permet)
ici
With Workbooks("A.xlsx").Sheets("Feuil1")
à remplacer par
With Sheets("Feuil1")
sinon ça ne marche pas puisqu'il s'agit du classeur actif.
Par contre je voudrais qu'il demande spécifiquement à l'utilisateur où il veut enregistrer les fichiers séparés,
je pensais passer par cette ligne de code
MsgBox SelectFolder("Sélectionnez un répertoire :", 0)
mais je ne sais pas faire en sorte que la macro s'en souvienne ....
Merci Pour ton Aide
Ca fait très longtemps tu m'avais deja aidé, c'est fou de te retrouver ici (2008/09)^^
j'ai un peu progressé depuis le temps
donc une petite erreur(je me permet)
ici
With Workbooks("A.xlsx").Sheets("Feuil1")
à remplacer par
With Sheets("Feuil1")
sinon ça ne marche pas puisqu'il s'agit du classeur actif.
Par contre je voudrais qu'il demande spécifiquement à l'utilisateur où il veut enregistrer les fichiers séparés,
je pensais passer par cette ligne de code
MsgBox SelectFolder("Sélectionnez un répertoire :", 0)
mais je ne sais pas faire en sorte que la macro s'en souvienne ....
Merci Pour ton Aide
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
6 janv. 2012 à 18:18
6 janv. 2012 à 18:18
Je ne connais pas SelectFolder (et j'ai pas envie de chercher...) donc essaye ceci :
Dim objShell As Object, objFolder As Object Dim Chemin As String Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&) If objFolder Is Nothing Then MsgBox "Abandon opérateur", vbCritical, "Annulation" Exit Sub Else Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\" End If MsgBox Chemin
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
23 janv. 2012 à 16:18
23 janv. 2012 à 16:18
Merci et dsl du retard c'est parfait ca marche nikel