- Comment conserver la mise en forme des cellules de la base dans le TCD
(par exemple, j'ai un champ en % qui perd son format). Comment intégrer la
mise en forme dans la macro?
Il faut préciser le format dans la macro (cf plus bas). Attention, tu auras peut être des
- J'ai 2 champs de données dans mon TCD, je veux les présenter en colonne et
pas en ligne. Or la macro crée les TCD avec ces 2 champs en ligne. Comment
intégrer le fait de les mettre en colonne dans la macro?
L'enregistreur donne ce code (ici 'Nom' représente un de tes champs):
- J'ai besoin d'ajuster la largeur de mes colonnes automatiquement par la
macro.
Columns("B:Q").EntireColumn.AutoFit ' Adapter les colonnes
- Enfin, et je sépare ce point car je ne sais pas s'il conserve directmeent
ce forum (lien entre Excel et Outlook), comment ajouter à la macro la
création dans Outlook d'un mail à chaque personne de la liste avec le
fichier Excel de la personne concernée en pièce jointe?
Excel et Outlook... tout un poême. Va voir ici http://www.rondebruin.nl/
- Comment conserver la mise en forme des cellules de la base dans le TCD
(par exemple, j'ai un champ en % qui perd son format). Comment intégrer la
mise en forme dans la macro?
Il faut préciser le format dans la macro (cf plus bas). Attention, tu auras peut être des
- J'ai 2 champs de données dans mon TCD, je veux les présenter en colonne et
pas en ligne. Or la macro crée les TCD avec ces 2 champs en ligne. Comment
intégrer le fait de les mettre en colonne dans la macro?
L'enregistreur donne ce code (ici 'Nom' représente un de tes champs):
- J'ai besoin d'ajuster la largeur de mes colonnes automatiquement par la
macro.
Columns("B:Q").EntireColumn.AutoFit ' Adapter les colonnes
- Enfin, et je sépare ce point car je ne sais pas s'il conserve directmeent
ce forum (lien entre Excel et Outlook), comment ajouter à la macro la
création dans Outlook d'un mail à chaque personne de la liste avec le
fichier Excel de la personne concernée en pièce jointe?
Excel et Outlook... tout un poême. Va voir ici http://www.rondebruin.nl/
- Comment conserver la mise en forme des cellules de la base dans le TCD
(par exemple, j'ai un champ en % qui perd son format). Comment intégrer la
mise en forme dans la macro?
Il faut préciser le format dans la macro (cf plus bas). Attention, tu auras peut être des
- J'ai 2 champs de données dans mon TCD, je veux les présenter en colonne et
pas en ligne. Or la macro crée les TCD avec ces 2 champs en ligne. Comment
intégrer le fait de les mettre en colonne dans la macro?
L'enregistreur donne ce code (ici 'Nom' représente un de tes champs):
- J'ai besoin d'ajuster la largeur de mes colonnes automatiquement par la
macro.
Columns("B:Q").EntireColumn.AutoFit ' Adapter les colonnes
- Enfin, et je sépare ce point car je ne sais pas s'il conserve directmeent
ce forum (lien entre Excel et Outlook), comment ajouter à la macro la
création dans Outlook d'un mail à chaque personne de la liste avec le
fichier Excel de la personne concernée en pièce jointe?
Excel et Outlook... tout un poême. Va voir ici http://www.rondebruin.nl/
Bonjour Vincent,
Sans répondre directement à ta question, je te conseille avant tout
d'utiliser l'enregistreur de macro dans un 1er temps, puis d'éliminer ce
qu'il y a de verbeux et de redondant dans le code dans un 2ème temps.
Mais déjà, quelques pistes...
La création du TCD générera ce genre de code selon la version d'Excel :
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Feuil1!R1C1:R11C4").CreatePivotTable TableDestination:="",
TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:¬tiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select ' peut être supprimé
Tu peux y changer le nom du TCD (ici Tableau croisé dynamique1)
... changer la plage, bien sûr
Ensuite, plusieurs lignes ressembleront à :
ActiveSheet.PivotTables("Tableau croisé dynamique1").etc1 etc1 etc1
ActiveSheet.PivotTables("Tableau croisé dynamique1").etc2 etc2 etc2
ActiveSheet.PivotTables("Tableau croisé dynamique1").etc3 etc3 etc3
Tu encadres ces lignes dans un bloc 'With' en simplifiant les lignes comme
ceci :
With ActiveSheet.PivotTables("Tableau croisé dynamique1")
.etc1 etc1 etc1 (ligne 1)
.etc2 etc2 etc2 (ligne 2)
.etc3 etc3 etc3 (ligne 3)
End With
Ça va pas plus vite mais c'est plus facile à lire et à maintenir.- Comment conserver la mise en forme des cellules de la base dans le TCD
(par exemple, j'ai un champ en % qui perd son format). Comment intégrer
la mise en forme dans la macro?
Il faut préciser le format dans la macro (cf plus bas). Attention, tu
auras peut être des difficultés avec le séparateur décimal et le
séparateur des milliers (j'ai une version d'Excel dont l'enregistreur de
macro prend le format "# ###,##" et à l'exécution de la macro il met
n'importe quoi. Par contre si je corrige la macro par "#,###.##" j'ai bien
ce que je voulais initialement)- J'ai 2 champs de données dans mon TCD, je veux les présenter en colonne
et pas en ligne. Or la macro crée les TCD avec ces 2 champs en ligne.
Comment intégrer le fait de les mettre en colonne dans la macro?
L'enregistreur donne ce code (ici 'Nom' représente un de tes champs):
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields
RowFields:= _
Array("Nom", "Données")
Pour avoir directement les données en colonne sans avoir à les déplacer
par la suite (même par macro) tu peux ajouter le champ colonne :
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields
RowFields:= _
"Nom", ColumnFields:="Données"
Si tu as déjà mis un champ en colonne, par exemple "Produit", tu corriges
par :
ColumnFields:=Array("Produit", "Données")
Array est un tableau, il y a ici 2 valeurs mais tu peux en ajouter.- J'ai besoin d'ajuster la largeur de mes colonnes automatiquement par la
macro.
Columns("B:Q").EntireColumn.AutoFit ' Adapter les colonnes- Enfin, et je sépare ce point car je ne sais pas s'il conserve
directmeent ce forum (lien entre Excel et Outlook), comment ajouter à la
macro la création dans Outlook d'un mail à chaque personne de la liste
avec le fichier Excel de la personne concernée en pièce jointe?
Excel et Outlook... tout un poême. Va voir ici http://www.rondebruin.nl/
ou dans Excelabo.
Tu pourrais en fin de compte avoir ce genre de code :
Sub ConstruireTCD()
'
'
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Feuil1!R1C1:R11C4").CreatePivotTable TableDestination:="",
TableName:= _
"MonTCD", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:¬tiveSheet.Cells(3, 1)
With ActiveSheet.PivotTables("MonTCD")
.AddFields RowFields:="Nom", ColumnFields:="Données"
With .PivotFields("Val1") ' Val1 est le nom d'un de tes champs
.Orientation = xlDataField ' C'est un champ de la zone de données
' même si les "Données" ont été mises
en colonne
.Position = 1 ' A supprimer, c'est le rang
d'affichage dans le TCD
.NumberFormat = "# ##0" ' C'est ici que tu mets ton format
End With
With .PivotFields("Val2") ' écriture plus complète, avec en plus un
calcul (bidon)
.Orientation = xlDataField
.Caption = "La Moyenne de val2" ' Pour changer le nom dans le TCD
.Function = xlAverage ' Par défaut la formule est xlSum
(synthèse avec une ' somme)
.Calculation = xlPercentDifferenceFrom
.BaseField = "mois"
.BaseItem = "(précédent)"
.NumberFormat = "0,0%" ' C'est ici que tu mets ton format
End With
' With autre champ
' End With
End With
Columns("B:B").EntireColumn.AutoFit
End Sub
Je ne doute pas que tu repasseras demander des précisions. J'aurais pu
n'avoir rien compris à ta question. N'hésite surtout pas, en plus c'est le
Week-end.
Cordialement,
Trirème
Bonjour Vincent,
Sans répondre directement à ta question, je te conseille avant tout
d'utiliser l'enregistreur de macro dans un 1er temps, puis d'éliminer ce
qu'il y a de verbeux et de redondant dans le code dans un 2ème temps.
Mais déjà, quelques pistes...
La création du TCD générera ce genre de code selon la version d'Excel :
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Feuil1!R1C1:R11C4").CreatePivotTable TableDestination:="",
TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:¬tiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select ' peut être supprimé
Tu peux y changer le nom du TCD (ici Tableau croisé dynamique1)
... changer la plage, bien sûr
Ensuite, plusieurs lignes ressembleront à :
ActiveSheet.PivotTables("Tableau croisé dynamique1").etc1 etc1 etc1
ActiveSheet.PivotTables("Tableau croisé dynamique1").etc2 etc2 etc2
ActiveSheet.PivotTables("Tableau croisé dynamique1").etc3 etc3 etc3
Tu encadres ces lignes dans un bloc 'With' en simplifiant les lignes comme
ceci :
With ActiveSheet.PivotTables("Tableau croisé dynamique1")
.etc1 etc1 etc1 (ligne 1)
.etc2 etc2 etc2 (ligne 2)
.etc3 etc3 etc3 (ligne 3)
End With
Ça va pas plus vite mais c'est plus facile à lire et à maintenir.
- Comment conserver la mise en forme des cellules de la base dans le TCD
(par exemple, j'ai un champ en % qui perd son format). Comment intégrer
la mise en forme dans la macro?
Il faut préciser le format dans la macro (cf plus bas). Attention, tu
auras peut être des difficultés avec le séparateur décimal et le
séparateur des milliers (j'ai une version d'Excel dont l'enregistreur de
macro prend le format "# ###,##" et à l'exécution de la macro il met
n'importe quoi. Par contre si je corrige la macro par "#,###.##" j'ai bien
ce que je voulais initialement)
- J'ai 2 champs de données dans mon TCD, je veux les présenter en colonne
et pas en ligne. Or la macro crée les TCD avec ces 2 champs en ligne.
Comment intégrer le fait de les mettre en colonne dans la macro?
L'enregistreur donne ce code (ici 'Nom' représente un de tes champs):
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields
RowFields:= _
Array("Nom", "Données")
Pour avoir directement les données en colonne sans avoir à les déplacer
par la suite (même par macro) tu peux ajouter le champ colonne :
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields
RowFields:= _
"Nom", ColumnFields:="Données"
Si tu as déjà mis un champ en colonne, par exemple "Produit", tu corriges
par :
ColumnFields:=Array("Produit", "Données")
Array est un tableau, il y a ici 2 valeurs mais tu peux en ajouter.
- J'ai besoin d'ajuster la largeur de mes colonnes automatiquement par la
macro.
Columns("B:Q").EntireColumn.AutoFit ' Adapter les colonnes
- Enfin, et je sépare ce point car je ne sais pas s'il conserve
directmeent ce forum (lien entre Excel et Outlook), comment ajouter à la
macro la création dans Outlook d'un mail à chaque personne de la liste
avec le fichier Excel de la personne concernée en pièce jointe?
Excel et Outlook... tout un poême. Va voir ici http://www.rondebruin.nl/
ou dans Excelabo.
Tu pourrais en fin de compte avoir ce genre de code :
Sub ConstruireTCD()
'
'
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Feuil1!R1C1:R11C4").CreatePivotTable TableDestination:="",
TableName:= _
"MonTCD", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:¬tiveSheet.Cells(3, 1)
With ActiveSheet.PivotTables("MonTCD")
.AddFields RowFields:="Nom", ColumnFields:="Données"
With .PivotFields("Val1") ' Val1 est le nom d'un de tes champs
.Orientation = xlDataField ' C'est un champ de la zone de données
' même si les "Données" ont été mises
en colonne
.Position = 1 ' A supprimer, c'est le rang
d'affichage dans le TCD
.NumberFormat = "# ##0" ' C'est ici que tu mets ton format
End With
With .PivotFields("Val2") ' écriture plus complète, avec en plus un
calcul (bidon)
.Orientation = xlDataField
.Caption = "La Moyenne de val2" ' Pour changer le nom dans le TCD
.Function = xlAverage ' Par défaut la formule est xlSum
(synthèse avec une ' somme)
.Calculation = xlPercentDifferenceFrom
.BaseField = "mois"
.BaseItem = "(précédent)"
.NumberFormat = "0,0%" ' C'est ici que tu mets ton format
End With
' With autre champ
' End With
End With
Columns("B:B").EntireColumn.AutoFit
End Sub
Je ne doute pas que tu repasseras demander des précisions. J'aurais pu
n'avoir rien compris à ta question. N'hésite surtout pas, en plus c'est le
Week-end.
Cordialement,
Trirème
Bonjour Vincent,
Sans répondre directement à ta question, je te conseille avant tout
d'utiliser l'enregistreur de macro dans un 1er temps, puis d'éliminer ce
qu'il y a de verbeux et de redondant dans le code dans un 2ème temps.
Mais déjà, quelques pistes...
La création du TCD générera ce genre de code selon la version d'Excel :
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Feuil1!R1C1:R11C4").CreatePivotTable TableDestination:="",
TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:¬tiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select ' peut être supprimé
Tu peux y changer le nom du TCD (ici Tableau croisé dynamique1)
... changer la plage, bien sûr
Ensuite, plusieurs lignes ressembleront à :
ActiveSheet.PivotTables("Tableau croisé dynamique1").etc1 etc1 etc1
ActiveSheet.PivotTables("Tableau croisé dynamique1").etc2 etc2 etc2
ActiveSheet.PivotTables("Tableau croisé dynamique1").etc3 etc3 etc3
Tu encadres ces lignes dans un bloc 'With' en simplifiant les lignes comme
ceci :
With ActiveSheet.PivotTables("Tableau croisé dynamique1")
.etc1 etc1 etc1 (ligne 1)
.etc2 etc2 etc2 (ligne 2)
.etc3 etc3 etc3 (ligne 3)
End With
Ça va pas plus vite mais c'est plus facile à lire et à maintenir.- Comment conserver la mise en forme des cellules de la base dans le TCD
(par exemple, j'ai un champ en % qui perd son format). Comment intégrer
la mise en forme dans la macro?
Il faut préciser le format dans la macro (cf plus bas). Attention, tu
auras peut être des difficultés avec le séparateur décimal et le
séparateur des milliers (j'ai une version d'Excel dont l'enregistreur de
macro prend le format "# ###,##" et à l'exécution de la macro il met
n'importe quoi. Par contre si je corrige la macro par "#,###.##" j'ai bien
ce que je voulais initialement)- J'ai 2 champs de données dans mon TCD, je veux les présenter en colonne
et pas en ligne. Or la macro crée les TCD avec ces 2 champs en ligne.
Comment intégrer le fait de les mettre en colonne dans la macro?
L'enregistreur donne ce code (ici 'Nom' représente un de tes champs):
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields
RowFields:= _
Array("Nom", "Données")
Pour avoir directement les données en colonne sans avoir à les déplacer
par la suite (même par macro) tu peux ajouter le champ colonne :
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields
RowFields:= _
"Nom", ColumnFields:="Données"
Si tu as déjà mis un champ en colonne, par exemple "Produit", tu corriges
par :
ColumnFields:=Array("Produit", "Données")
Array est un tableau, il y a ici 2 valeurs mais tu peux en ajouter.- J'ai besoin d'ajuster la largeur de mes colonnes automatiquement par la
macro.
Columns("B:Q").EntireColumn.AutoFit ' Adapter les colonnes- Enfin, et je sépare ce point car je ne sais pas s'il conserve
directmeent ce forum (lien entre Excel et Outlook), comment ajouter à la
macro la création dans Outlook d'un mail à chaque personne de la liste
avec le fichier Excel de la personne concernée en pièce jointe?
Excel et Outlook... tout un poême. Va voir ici http://www.rondebruin.nl/
ou dans Excelabo.
Tu pourrais en fin de compte avoir ce genre de code :
Sub ConstruireTCD()
'
'
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Feuil1!R1C1:R11C4").CreatePivotTable TableDestination:="",
TableName:= _
"MonTCD", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:¬tiveSheet.Cells(3, 1)
With ActiveSheet.PivotTables("MonTCD")
.AddFields RowFields:="Nom", ColumnFields:="Données"
With .PivotFields("Val1") ' Val1 est le nom d'un de tes champs
.Orientation = xlDataField ' C'est un champ de la zone de données
' même si les "Données" ont été mises
en colonne
.Position = 1 ' A supprimer, c'est le rang
d'affichage dans le TCD
.NumberFormat = "# ##0" ' C'est ici que tu mets ton format
End With
With .PivotFields("Val2") ' écriture plus complète, avec en plus un
calcul (bidon)
.Orientation = xlDataField
.Caption = "La Moyenne de val2" ' Pour changer le nom dans le TCD
.Function = xlAverage ' Par défaut la formule est xlSum
(synthèse avec une ' somme)
.Calculation = xlPercentDifferenceFrom
.BaseField = "mois"
.BaseItem = "(précédent)"
.NumberFormat = "0,0%" ' C'est ici que tu mets ton format
End With
' With autre champ
' End With
End With
Columns("B:B").EntireColumn.AutoFit
End Sub
Je ne doute pas que tu repasseras demander des précisions. J'aurais pu
n'avoir rien compris à ta question. N'hésite surtout pas, en plus c'est le
Week-end.
Cordialement,
Trirème