OVH Cloud OVH Cloud

découper une feuille de calcul

23 réponses
Avatar
MCA
Bonjour,
Voilà j'ai une feuille de calcul avec beaucoup de lignes. J'ai plusieurs
lignes avec le meme code dans une colonne (A par exemple). J'aimerais
découper cette feuille en plusieurs fichiers à chaque fois que le code change
dans la colonne A.
Est-ce possible ?
Merci de vos réponses.
--
MCA

10 réponses

1 2 3
Avatar
Daniel
Non, en fait, ça ne sert pas à ça :
Si tu veux passer pour un gourou, tu n'écris pas :
activeworkbook.SaveAs "toto" accessmode:=xlShared
tu cherches la valeur de xlshared à l'adresse que je t'ai donné et tu écris
:
activeworkbook.SaveAs "toto", accessmode:=2
Ceci dit, je plaisante et apprécie comme beaucoup le savoir de notre ami
michdenis qui n'a surement pas besoin de tels artifices.
Daniel
"JLuc" a écrit dans le message de news:

*Bonjour Daniel*,
Merci pour l'info, dommage qu'ils ne precisent pas a quoi elles
correspondent ! :/
Ou trouver ces constantes avec leurs valeurs numeriques ?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbaxl11/html/xlhowConstants_HV01049962.asp

Avec ça, tu passes pour un gourou !
;-)))
Daniel



--
JLuc

Pensez a regarder ces sites très bien fait, ce sont des mines de trucs et
astuces !
http://www.excelabo.net
http://jacxl.free.fr/
http://dj.joss.free.fr/
C:Program FilesMicrosoft OfficeOffice1036VBALIST.XLS






Avatar
JLuc
Je suis d'accord, mais dans l'aide, ils disent :

Template Argument de type Variant Facultatif. Détermine la façon dont
le nouveau classeur est créé. Si cet argument est une chaîne spécifiant
le nom d'un fichier Microsoft Excel existant, le nouveau classeur est
créé sur le modèle du fichier spécifié. Si cet argument est une
constante, le nouveau classeur contient une seule feuille du type
spécifié. Il peut s'agir de l'une des constantes XlWBATemplate
suivantes : *xlWBATChart, xlWBATExcel4IntlMacroSheet,
xlWBATExcel4MacroSheet, ou xlWBATWorksheet*. Si vous n'avez pas
spécifié cet argument, Microsoft Excel crée un nouveau classeur avec
plusieurs feuilles blanches (le nombre est établi par la propriété
SheetsInNewWorkbook).

sans dire a quoi servent les constantes :/

--
JLuc

Pensez a regarder ces sites très bien fait, ce sont des mines de trucs
et astuces !
http://www.excelabo.net
http://jacxl.free.fr/
http://dj.joss.free.fr/
C:Program FilesMicrosoft OfficeOffice1036VBALIST.XLS
Avatar
JLuc
Desolé, en relisant mon message, une petite lumiere s'est allumée dans
ma tete, et, eureka, j'ai compris :
xlWBATChart : feuille graphique
xlWBATExcel4IntlMacroSheet : ca, je sais pas
xlWBATExcel4MacroSheet : feuille de code excel 4
xlWBATWorksheet : feuille de calcul standart
rofl rofl rofl ;-)
Je suis d'accord, mais dans l'aide, ils disent :

Template Argument de type Variant Facultatif. Détermine la façon dont le
nouveau classeur est créé. Si cet argument est une chaîne spécifiant le nom
d'un fichier Microsoft Excel existant, le nouveau classeur est créé sur le
modèle du fichier spécifié. Si cet argument est une constante, le nouveau
classeur contient une seule feuille du type spécifié. Il peut s'agir de l'une
des constantes XlWBATemplate suivantes : *xlWBATChart,
xlWBATExcel4IntlMacroSheet, xlWBATExcel4MacroSheet, ou xlWBATWorksheet*. Si
vous n'avez pas spécifié cet argument, Microsoft Excel crée un nouveau
classeur avec plusieurs feuilles blanches (le nombre est établi par la
propriété SheetsInNewWorkbook).

sans dire a quoi servent les constantes :/



--
JLuc

Pensez a regarder ces sites très bien fait, ce sont des mines de trucs
et astuces !
http://www.excelabo.net
http://jacxl.free.fr/
http://dj.joss.free.fr/
C:Program FilesMicrosoft OfficeOffice1036VBALIST.XLS

Avatar
michdenis
Bonjour JLuc,

La ligne de commande pourrait se lire ainsi :

La constante -4167 = xlworksheet

Workbooks.Add -4167
'OU

Dim x As XlSheetType
x = xlWorksheet
'3 autres valeurs que peut prendre x
'xlExcel4MacroSheet
'xlDialogSheet 'n'est pas utilisable dans la ligne de commande
'xlExcel4MacroSheet

Workbooks.Add x
OU
Workbooks.Add xlWorksheet


Et si tu regardes dans l'aide d'excel la méthode "Add" de l'objet "Workbooks", il est dit :

expression.Add(Template)
expression Obligatoire. Expression qui renvoie un objet Workbooks.
Template Argument de type Variant facultatif. Détermine la façon dont le nouveau classeur est créé. Si cet argument est une
chaîne spécifiant le nom d'un fichier Microsoft Excel existant, le nouveau classeur est créé sur le modèle du fichier spécifié. Si
cet argument est une constante, le nouveau classeur contient une seule feuille du type spécifié. Il peut s'agir de l'une des
constantes XlWBATemplate suivantes : xlWBATChart, xlWBATExcel4IntlMacroSheet, xlWBATExcel4MacroSheet ou xlWBATWorksheet. Si vous
n'avez pas spécifié cet argument, Microsoft Excel crée un nouveau classeur avec plusieurs feuilles blanches (le nombre est établi
par la propriété SheetsInNewWorkbook).

En conséquence, tu pourrais aussi utiliser ceci :
Workbooks.Add xlWBATWorksheet

Les 3 autres constantes sont aussi possible... au besoin !

P.S. Un classeur ne peut pas exister si il ne possède pas au moins une feuille visible !


Salutations!




"JLuc" a écrit dans le message de news:
*Bonjour michdenis*,
C'est bien ce que je pensais avoir compris, mais d'ou tu sort la valeur
de -4167 ?
Bonjour JLuc,

Workbooks.Add -4167


Ceci te permet de créer un classeur n'ayant qu'une
seule feuille et ce nonobstant le nombre de feuille
défini dans :
menu / outils / options / Onglet Général.

C'est plus rapide que d'ajouter simplement un classeur
et de supprimer toutes les feuilles non désirées à la fin
de la procédure !


Salutations!




"JLuc" a écrit dans le message de news:
*Bonjour michdenis*,
A quoi correspond la valeur negative dans :
Set Wk = Workbooks.Add(-4167)
C'est la valeur d'une des constantes possible pour le parametre
"Template" de la commande Add ?
Ou trouver ces constantes avec leurs valeurs numeriques ?
Bonjour MCA,

Essaie ceci :

Fait une sauvegarde de ton classeur.
Celui que tu utiliseras pour le "Découpage" se retrouvera
vide de ses données à la fin de l'opération.

'------------------------------------
Sub Découper()

Dim Rg As Range, A As Integer
Dim Wk As Workbook, Rg1 As Range
Dim Sh As Worksheet, Chemin As String

'Chemin où tu veux enregistrer chacun des fichiers
Chemin = "C:"

'Nom du classeur (racine du nom)
'à ceci s'ajoute un numéro dans la procédure
nom = "Denis"

'Où sont les données
Set Sh = Worksheets("Feuil1") 'Nom feuille à déterminer

With Sh
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Application.ScreenUpdating = False
'Ajout d'un classer
Set Wk = Workbooks.Add(-4167)

Do
With Rg
'trier par ordre croissant
.Sort Key1:=Rg(2, 1), Header:=xlYes
'Filtre automatique
.AutoFilter Field:=1, Criteria1:=Rg(2, 1)
Set Rg1 = Range("_FilterDataBase") _
.SpecialCells(xlCellTypeVisible)
'Copie du résultat du filtre vers nouveau classeur
Rg1.Copy Wk.Sheets(1).Range("A1")
Rg1.Offset(1).Clear
A = A + 1
'Sauvegarde du classeur
Wk.SaveAs Chemin & nom & A & ".xls"
Wk.Sheets(1).Cells.Clear
.AutoFilter
.Sort Key1:=Rg(2, 1), Header:=xlYes
End With
Loop Until Rg(2, 1) = ""
Wk.Close False

Set Wk = Nothing: Set Sh = Nothing

End Sub
'-----------------------------------------


Salutations!



"MCA" a écrit dans le message de news:
Bonjour,
Voilà j'ai une feuille de calcul avec beaucoup de lignes. J'ai plusieurs
lignes avec le meme code dans une colonne (A par exemple). J'aimerais
découper cette feuille en plusieurs fichiers à chaque fois que le code
change dans la colonne A.
Est-ce possible ?
Merci de vos réponses.




--
JLuc

Pensez a regarder ces sites très bien fait, ce sont des mines de trucs
et astuces !
http://www.excelabo.net
http://jacxl.free.fr/
http://dj.joss.free.fr/
C:Program FilesMicrosoft OfficeOffice1036VBALIST.XLS


Avatar
Daniel
Eh ! Tu deviens un gourou ! ;-))
Daniel
"JLuc" a écrit dans le message de news:

Desolé, en relisant mon message, une petite lumiere s'est allumée dans ma
tete, et, eureka, j'ai compris :
xlWBATChart : feuille graphique
xlWBATExcel4IntlMacroSheet : ca, je sais pas
xlWBATExcel4MacroSheet : feuille de code excel 4
xlWBATWorksheet : feuille de calcul standart
rofl rofl rofl ;-)
Je suis d'accord, mais dans l'aide, ils disent :

Template Argument de type Variant Facultatif. Détermine la façon dont
le nouveau classeur est créé. Si cet argument est une chaîne spécifiant
le nom d'un fichier Microsoft Excel existant, le nouveau classeur est
créé sur le modèle du fichier spécifié. Si cet argument est une
constante, le nouveau classeur contient une seule feuille du type
spécifié. Il peut s'agir de l'une des constantes XlWBATemplate suivantes
: *xlWBATChart, xlWBATExcel4IntlMacroSheet, xlWBATExcel4MacroSheet, ou
xlWBATWorksheet*. Si vous n'avez pas spécifié cet argument, Microsoft
Excel crée un nouveau classeur avec plusieurs feuilles blanches (le
nombre est établi par la propriété SheetsInNewWorkbook).

sans dire a quoi servent les constantes :/



--
JLuc

Pensez a regarder ces sites très bien fait, ce sont des mines de trucs et
astuces !
http://www.excelabo.net
http://jacxl.free.fr/
http://dj.joss.free.fr/
C:Program FilesMicrosoft OfficeOffice1036VBALIST.XLS





Avatar
JLuc
*Bonjour Daniel*,
Arrete les flash, je bronze... :')
Eh ! Tu deviens un gourou ! ;-))
Daniel
"JLuc" a écrit dans le message de news:

Desolé, en relisant mon message, une petite lumiere s'est allumée dans ma
tete, et, eureka, j'ai compris :
xlWBATChart : feuille graphique
xlWBATExcel4IntlMacroSheet : ca, je sais pas
xlWBATExcel4MacroSheet : feuille de code excel 4
xlWBATWorksheet : feuille de calcul standart
rofl rofl rofl ;-)
Je suis d'accord, mais dans l'aide, ils disent :

Template Argument de type Variant Facultatif. Détermine la façon dont le
nouveau classeur est créé. Si cet argument est une chaîne spécifiant le
nom d'un fichier Microsoft Excel existant, le nouveau classeur est créé
sur le modèle du fichier spécifié. Si cet argument est une constante, le
nouveau classeur contient une seule feuille du type spécifié. Il peut
s'agir de l'une des constantes XlWBATemplate suivantes
*xlWBATChart, xlWBATExcel4IntlMacroSheet, xlWBATExcel4MacroSheet, ou
xlWBATWorksheet*. Si vous n'avez pas spécifié cet argument, Microsoft

Excel crée un nouveau classeur avec plusieurs feuilles blanches (le nombre
est établi par la propriété SheetsInNewWorkbook).

sans dire a quoi servent les constantes :/



-- JLuc

Pensez a regarder ces sites très bien fait, ce sont des mines de trucs et
astuces !
http://www.excelabo.net
http://jacxl.free.fr/
http://dj.joss.free.fr/
C:Program FilesMicrosoft OfficeOffice1036VBALIST.XLS






--
JLuc

Pensez a regarder ces sites très bien fait, ce sont des mines de trucs
et astuces !
http://www.excelabo.net
http://jacxl.free.fr/
http://dj.joss.free.fr/
C:Program FilesMicrosoft OfficeOffice1036VBALIST.XLS




Avatar
Clément Marcotte
Bonjour,

Pas besoin d'aller si loin. Cherche xl dans l'Explorateur d'objets. Une fois
que tu as cliqué sur un nom de constante, en bas à droite, la valeur
numérique est affichée dans le bas de l'Explorateur.


"Daniel" a écrit dans le message de news:


Ou trouver ces constantes avec leurs valeurs numeriques ?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbaxl11/html/xlhowConstants_HV01049962.asp

Avec ça, tu passes pour un gourou !
;-)))
Daniel




Avatar
MCA
Bonjour les gars,
Merci pour toutes vos réponses. Désolé je ne réponds qu'au dernier car ce
serait trop long de répondre à tout le monde (18 reponses pas mal !!!).

--
MCA



Bonjour,

Pas besoin d'aller si loin. Cherche xl dans l'Explorateur d'objets. Une fois
que tu as cliqué sur un nom de constante, en bas à droite, la valeur
numérique est affichée dans le bas de l'Explorateur.


"Daniel" a écrit dans le message de news:


Ou trouver ces constantes avec leurs valeurs numeriques ?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbaxl11/html/xlhowConstants_HV01049962.asp

Avec ça, tu passes pour un gourou !
;-)))
Daniel









Avatar
MCA
Bonjour michdenis,
Tout d'abord merci de ta réponse. J'ai suivi ton script. Cela fonctionne
mais j'ai un message d'erreur à la fin " Erreur d'exécution '424' : objet
requis ". De plus, il ne me transfère que la 1ère colonne (A). J'aimerais
qu'il me transfère tout le tableau (colonne A à N).

Merci de ton aide
--
MCA



Bonjour MCA,

Essaie ceci :

Fait une sauvegarde de ton classeur.
Celui que tu utiliseras pour le "Découpage" se retrouvera
vide de ses données à la fin de l'opération.

'------------------------------------
Sub Découper()

Dim Rg As Range, A As Integer
Dim Wk As Workbook, Rg1 As Range
Dim Sh As Worksheet, Chemin As String

'Chemin où tu veux enregistrer chacun des fichiers
Chemin = "C:"

'Nom du classeur (racine du nom)
'à ceci s'ajoute un numéro dans la procédure
nom = "Denis"

'Où sont les données
Set Sh = Worksheets("Feuil1") 'Nom feuille à déterminer

With Sh
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Application.ScreenUpdating = False
'Ajout d'un classer
Set Wk = Workbooks.Add(-4167)

Do
With Rg
'trier par ordre croissant
.Sort Key1:=Rg(2, 1), Header:=xlYes
'Filtre automatique
.AutoFilter Field:=1, Criteria1:=Rg(2, 1)
Set Rg1 = Range("_FilterDataBase") _
.SpecialCells(xlCellTypeVisible)
'Copie du résultat du filtre vers nouveau classeur
Rg1.Copy Wk.Sheets(1).Range("A1")
Rg1.Offset(1).Clear
A = A + 1
'Sauvegarde du classeur
Wk.SaveAs Chemin & nom & A & ".xls"
Wk.Sheets(1).Cells.Clear
.AutoFilter
.Sort Key1:=Rg(2, 1), Header:=xlYes
End With
Loop Until Rg(2, 1) = ""
Wk.Close False

Set Wk = Nothing: Set Sh = Nothing

End Sub
'-----------------------------------------


Salutations!



"MCA" a écrit dans le message de news:
Bonjour,
Voilà j'ai une feuille de calcul avec beaucoup de lignes. J'ai plusieurs
lignes avec le meme code dans une colonne (A par exemple). J'aimerais
découper cette feuille en plusieurs fichiers à chaque fois que le code change
dans la colonne A.
Est-ce possible ?
Merci de vos réponses.
--
MCA





Avatar
michdenis
Bonjour MCA,

Voilà la procédure a été modifiée.

'--------------------------------------
Sub Découper()

Dim Rg As Range, A As Integer
Dim Wk As Workbook, Rg1 As Range
Dim Sh As Worksheet, Chemin As String

'Chemin où tu veux enregistrer chacun des fichiers
Chemin = "C:"

'Nom du classeur (racine du nom)
'à ceci s'ajoute un numéro dans la procédure
nom = "Denis"

'Où sont les données
'Nom feuille à déterminer
Worksheets("Feuil1").Copy before:=Sheets(1)

Set Sh = ActiveSheet
'Ici tu modifies la lettre N pour
'la lettre de la colonne que tu désires.
With Sh
Set Rg = .Range("A1:N" & .Range("A65536").End(xlUp).Row)
End With

Application.ScreenUpdating = False
'Ajout d'un classer
Set Wk = Workbooks.Add(-4167)

Application.EnableEvents = False
Do
With Rg
'trier par ordre croissant
.Sort Key1:=Rg(2, 1), Header:=xlYes
'Filtre automatique
.AutoFilter Field:=1, Criteria1:=Rg(2, 1)
Set Rg1 = Sh.Range("_FilterDataBase")
.SpecialCells (xlCellTypeVisible)
'Copie du résultat du filtre vers nouveau classeur
Rg1.Copy Wk.Sheets(1).Range("A1")
Rg1.Offset(1).Clear
A = A + 1
'Sauvegarde du classeur
Wk.SaveAs Chemin & nom & A & ".xls"
Wk.Sheets(1).Cells.Clear
.AutoFilter
.Sort Key1:=Rg(2, 1), Header:=xlYes
End With
Loop Until Rg(2, 1) = ""
Application.EnableEvents = True
Application.DisplayAlerts = False
Sh.Delete
Application.DisplayAlerts = True
Wk.Close False
Set Wk = Nothing: Set Sh = Nothing: Set Rg1 = Nothing
End Sub
'--------------------------------------



Salutations!






"MCA" a écrit dans le message de news:
Bonjour michdenis,
Tout d'abord merci de ta réponse. J'ai suivi ton script. Cela fonctionne
mais j'ai un message d'erreur à la fin " Erreur d'exécution '424' : objet
requis ". De plus, il ne me transfère que la 1ère colonne (A). J'aimerais
qu'il me transfère tout le tableau (colonne A à N).

Merci de ton aide
--
MCA



Bonjour MCA,

Essaie ceci :

Fait une sauvegarde de ton classeur.
Celui que tu utiliseras pour le "Découpage" se retrouvera
vide de ses données à la fin de l'opération.

'------------------------------------
Sub Découper()

Dim Rg As Range, A As Integer
Dim Wk As Workbook, Rg1 As Range
Dim Sh As Worksheet, Chemin As String

'Chemin où tu veux enregistrer chacun des fichiers
Chemin = "C:"

'Nom du classeur (racine du nom)
'à ceci s'ajoute un numéro dans la procédure
nom = "Denis"

'Où sont les données
Set Sh = Worksheets("Feuil1") 'Nom feuille à déterminer

With Sh
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Application.ScreenUpdating = False
'Ajout d'un classer
Set Wk = Workbooks.Add(-4167)

Do
With Rg
'trier par ordre croissant
.Sort Key1:=Rg(2, 1), Header:=xlYes
'Filtre automatique
.AutoFilter Field:=1, Criteria1:=Rg(2, 1)
Set Rg1 = Range("_FilterDataBase") _
.SpecialCells(xlCellTypeVisible)
'Copie du résultat du filtre vers nouveau classeur
Rg1.Copy Wk.Sheets(1).Range("A1")
Rg1.Offset(1).Clear
A = A + 1
'Sauvegarde du classeur
Wk.SaveAs Chemin & nom & A & ".xls"
Wk.Sheets(1).Cells.Clear
.AutoFilter
.Sort Key1:=Rg(2, 1), Header:=xlYes
End With
Loop Until Rg(2, 1) = ""
Wk.Close False

Set Wk = Nothing: Set Sh = Nothing

End Sub
'-----------------------------------------


Salutations!



"MCA" a écrit dans le message de news:
Bonjour,
Voilà j'ai une feuille de calcul avec beaucoup de lignes. J'ai plusieurs
lignes avec le meme code dans une colonne (A par exemple). J'aimerais
découper cette feuille en plusieurs fichiers à chaque fois que le code change
dans la colonne A.
Est-ce possible ?
Merci de vos réponses.
--
MCA





1 2 3