Macro Excel - Mise en page
Résolu/Fermé
Vanex
Messages postés
3
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009
-
13 nov. 2009 à 10:34
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 13 nov. 2009 à 12:20
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 13 nov. 2009 à 12:20
A voir également:
- Macro Excel - Mise en page
- Mise en forme conditionnelle excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Supprimer une page word - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
5 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
13 nov. 2009 à 11:02
13 nov. 2009 à 11:02
Bonjour,
Plusieurs petits soucis avec ta macro.
1- Eviter au maximum les "select". Tu peux donc remplacer :
Sheets("Feuil1").Select
Columns("K:K").Delete Shift:=xlToLeft
Rows("1:1").Delete Shift:=xlUp
par :
With Sheets("Feuil1")
.Columns("K:K").Delete Shift:=xlToLeft
.Rows("1:1").Delete Shift:=xlUp
End With
Note que dans ce cas bien précis (sélection d'une feuille) ça n'est pas grave, mais ça reste, je crois une bonne habitude à prendre.
2- La dernière ligne absolue d'une Feuille Excel s'obtient avec :
Dim Lastlig As Integer
Lastlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Attention: Si des lignes sont supprimées dans la plage, enregistrez préalablement le fichier
Mets ce lien dans tes favoris...
3- pourquoi Lastlig2 et Lastlig3 si tu n'as plus besoin de la valeur stockée dans "Lastlig"?
Tu peux très bien utiliser une seule variable si tu n'as plus besoin de la valeur qui lui est affectée.
Concrètement dans ton cas :
Dim Lastlig As Integer
With Sheets("Feuil1")
Lastlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Sheets(1).Rows(Lastlig + 1).Delete Shift:=xlUp
End With
With Sheets("Feuil2")
Lastlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Sheets(2).Rows(Lastlig + 1).Delete Shift:=xlUp
End With
With Sheets("Feuil3")
Lastlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Sheets(3).Rows(Lastlig + 1).Delete Shift:=xlUp
End With
Essaye déjà avec ça et reviens ici si tu as d'autres soucis.
Plusieurs petits soucis avec ta macro.
1- Eviter au maximum les "select". Tu peux donc remplacer :
Sheets("Feuil1").Select
Columns("K:K").Delete Shift:=xlToLeft
Rows("1:1").Delete Shift:=xlUp
par :
With Sheets("Feuil1")
.Columns("K:K").Delete Shift:=xlToLeft
.Rows("1:1").Delete Shift:=xlUp
End With
Note que dans ce cas bien précis (sélection d'une feuille) ça n'est pas grave, mais ça reste, je crois une bonne habitude à prendre.
2- La dernière ligne absolue d'une Feuille Excel s'obtient avec :
Dim Lastlig As Integer
Lastlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Attention: Si des lignes sont supprimées dans la plage, enregistrez préalablement le fichier
Mets ce lien dans tes favoris...
3- pourquoi Lastlig2 et Lastlig3 si tu n'as plus besoin de la valeur stockée dans "Lastlig"?
Tu peux très bien utiliser une seule variable si tu n'as plus besoin de la valeur qui lui est affectée.
Concrètement dans ton cas :
Dim Lastlig As Integer
With Sheets("Feuil1")
Lastlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Sheets(1).Rows(Lastlig + 1).Delete Shift:=xlUp
End With
With Sheets("Feuil2")
Lastlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Sheets(2).Rows(Lastlig + 1).Delete Shift:=xlUp
End With
With Sheets("Feuil3")
Lastlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Sheets(3).Rows(Lastlig + 1).Delete Shift:=xlUp
End With
Essaye déjà avec ça et reviens ici si tu as d'autres soucis.
Vanex
Messages postés
3
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009
13 nov. 2009 à 11:25
13 nov. 2009 à 11:25
Merci de ton aide pijaku, ca me permet d'apprendre un peu mieux, seulement toute cette partie fonctionne avec mon code, même si c'est fait un petit peu à l'arrache.
J'ai surtout un soucis avec le 4).
Et aussi, dans ton 3) ça ne supprime que la ligne après la derniere non ? (Lastlig + 1)
J'ai surtout un soucis avec le 4).
Et aussi, dans ton 3) ça ne supprime que la ligne après la derniere non ? (Lastlig + 1)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
13 nov. 2009 à 12:06
13 nov. 2009 à 12:06
ça ne supprime que la ligne après la derniere non ? (Lastlig + 1) Euh ben oui. Je ne t'apportais qu'une piste pour toi faire ton code.
4) - Renommer les feuilles : cet exemple renomme les feuilles en fonction de ce qu'elles contiennent en A1 :
Sheets(1).Name = Sheets(1).Range("A1")
Sheets(2).Name = Sheets(2).Range("A1")
Sheets(3).Name = Sheets(3).Range("A1")
- Zone d'impression : en fonction de la dernière ligne
Dim Lastlig as integer
Lastlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
ActiveSheet.PageSetup.PrintArea = "A1:I" & Lastlig
- marges & pourcentage :
Sheets(1).Select
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.393700787401575) 'corresponds à marge de gauche = "1"
.RightMargin = Application.InchesToPoints(1.18110236220472) 'corresponds à marge de droite = "3"
.TopMargin = Application.InchesToPoints(1.5748031496063) 'corresponds à marge du haut = "4"
.BottomMargin = Application.InchesToPoints(0.78740157480315) 'corresponds à marge du bas = "2"
.HeaderMargin = Application.InchesToPoints(0.511811023622047) 'corresponds à en-tête = "1,3"
.FooterMargin = Application.InchesToPoints(0.511811023622047) 'corresponds à pied de page= "1,3"
.Zoom = 80 'pourcentage à 80%
End With
Voilà.
4) - Renommer les feuilles : cet exemple renomme les feuilles en fonction de ce qu'elles contiennent en A1 :
Sheets(1).Name = Sheets(1).Range("A1")
Sheets(2).Name = Sheets(2).Range("A1")
Sheets(3).Name = Sheets(3).Range("A1")
- Zone d'impression : en fonction de la dernière ligne
Dim Lastlig as integer
Lastlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
ActiveSheet.PageSetup.PrintArea = "A1:I" & Lastlig
- marges & pourcentage :
Sheets(1).Select
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.393700787401575) 'corresponds à marge de gauche = "1"
.RightMargin = Application.InchesToPoints(1.18110236220472) 'corresponds à marge de droite = "3"
.TopMargin = Application.InchesToPoints(1.5748031496063) 'corresponds à marge du haut = "4"
.BottomMargin = Application.InchesToPoints(0.78740157480315) 'corresponds à marge du bas = "2"
.HeaderMargin = Application.InchesToPoints(0.511811023622047) 'corresponds à en-tête = "1,3"
.FooterMargin = Application.InchesToPoints(0.511811023622047) 'corresponds à pied de page= "1,3"
.Zoom = 80 'pourcentage à 80%
End With
Voilà.
Vanex
Messages postés
3
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009
13 nov. 2009 à 12:13
13 nov. 2009 à 12:13
Tu es génial :)
Grâce à toi j'ai réussi à avoir le résultat que je voulais.
Mille mercis
Grâce à toi j'ai réussi à avoir le résultat que je voulais.
Mille mercis
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
13 nov. 2009 à 12:20
13 nov. 2009 à 12:20
De rien. Je reviens néanmoins sur l'aspect rigoureux qu'il faut avoir surtout en débutant. Je n'ai pas eu cette chance et maintenant je galère à faire des codes à peu près propres. Je pensais comme toi "tant que ça fonctionne!!!". Jusqu'au jour ou mon ordi refusait d'ouvrir Excel (quelque soit le fichier) et me coupait régulièrement Internet etc... pour "la mémoire ne peux pas être read...". Les macros mal utilisées, premièrement sont très longues parfois, et deuxièmement peuvent "occuper" un max de place dans la mémoire de ta machine... Eviter les "select" et "purger" les variables est déjà un bon point de départ.
Bonne chance et bon courage pour la suite.
Bonne chance et bon courage pour la suite.