bonjour a tous
comment ajouter 60 lignes dans un sheets sans faire de boucles ?
quelqu'un a une idée?
au plaisir
Version imprimable
bonjour a tous
comment ajouter 60 lignes dans un sheets sans faire de boucles ?
quelqu'un a une idée?
au plaisir
insère 60 lignes avant la ligne 4Code:sheets("Feuil1").Rows("4:63").Insert
bonjour
merci mercatog:ccool:
au plaisir
oups jai crié victoire trop vite
voila ma macro qui ajoute 4 page en tout
ya t-il un moyen de faire plus rapide?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 Sub ajoutpage(nombre As Long) Application.ScreenUpdating = False '"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Select Case nombre Case 1 Range("B47").Select Sheets(nomfeuille).Range("a1") = "2" For i = 1 To 69 Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove Next Sheets(nomfeuille).Range("F47:f64").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" Sheets(nomfeuille).Range("F70:f117").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" Worksheets(nomfeuille).Range("A19:F19").Copy ActiveSheet.Paste Destination:=Worksheets(nomfeuille).Range("A69:F69") Application.CutCopyMode = False Rows("69:69").Select Selection.RowHeight = 30 Case 2 Range("B117").Select Application.ScreenUpdating = False Sheets(nomfeuille).Range("a1") = "3" For i = 1 To 69 Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove Next Sheets(nomfeuille).Range("F117:f133").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" Sheets(nomfeuille).Range("F139:f186").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" Worksheets(nomfeuille).Range("A19:F19").Copy ActiveSheet.Paste Destination:=Worksheets(nomfeuille).Range("A138:F138") Application.CutCopyMode = False Rows("138:138").Select Selection.RowHeight = 30 Range("B111").Select Case 3 Range("B186").Select Application.ScreenUpdating = False Sheets(nomfeuille).Range("a1") = "4" For i = 1 To 69 Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove Next Sheets(nomfeuille).Range("F186:f202").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" Sheets(nomfeuille).Range("F209:f255").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" Worksheets(nomfeuille).Range("A19:F19").Copy ActiveSheet.Paste Destination:=Worksheets(nomfeuille).Range("A208:F208") Application.CutCopyMode = False Rows("208:208").Select Selection.RowHeight = 30 Range("B186").Select End Select End Sub
merci pour ton aide
Salut
Déjà en retirant les select
Apres je n'ai pas le temps, mais il est surement possible de faire un truc pour ce code qui se répète 3 fois et qui est mis a part les plage de cellule similaire.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 Sub ajoutpage(nombre As Long) Application.ScreenUpdating = False '"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" With Sheets(nomfeuille) Select Case nombre Case 1 'Range("B47").Select .Range("a1") = "2" For i = 1 To 69 Range("B47").EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove Next .Range("F47:f64").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" .Range("F70:f117").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" .Range("A19:F19").Copy .Range("A69:F69") Application.CutCopyMode = False .Rows("69").RowHeight = 30 Case 2 'Range("B117").Select 'Application.ScreenUpdating = False 'deja au début du code .Range("a1") = "3" For i = 1 To 69 Range("B117").EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove Next .Range("F117:f133").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" .Range("F139:f186").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" .Range("A19:F19").Copy .Range("A138:F138") Application.CutCopyMode = False .Rows("138:138").RowHeight = 30 'Uniquement si tu veux qu'a la mise a jour de l'affichage, l'utilisateur voit cette cellule de selectionnée 'Range("B111").Select Case 3 Range("B186").Select 'Application.ScreenUpdating = False .Range("a1") = "4" For i = 1 To 69 Range("B186").EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove Next .Range("F186:f202").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" .Range("F209:f255").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" .Range("A19:F19").Copy .Range("A208:F208") Application.CutCopyMode = False .Rows("208:208").RowHeight = 30 'Range("B186").Select End Select End With End Sub
++
Qwaz
bonjour qwazerty
oui j'ai enlevé les selects
et j'ai remplacer la boucle des 69 inserts par la proposition de mercatog
et meme en respectant les numero de ligne je ne me trouve pas avec les meme pages
c'est ennuyant :aie:
merci pour le coup de main
Salut
Je ne saisi pas ce que tu veux dire.Citation:
et meme en respectant les numéros de ligne je ne me trouve pas avec les mêmes pages
c'est ennuyant
Pour ce qui est des Inserts, comment as tu adapté le code de Mercatog?
Pour avoir une mise en page de ton tableau il te faut commencer la sélection à partir de la fin de ton tableau et quand bien même tu ferais ça, il te faudra refaire le quadrillage de ton tableau.
[Edit]
En survolant ton code de nouveau, je pense comprendre que tu souhaites afficher plusieurs tableau sur une même feuille qui par la suite sera imprimé sur plusieurs page, si c'est ça, il te faut utiliser les saut de page à la fin de chaque tableau afin d'être sur de repartie sur une nouvelle page pour le tableau suivant.
[/Edit]
++
Qwaz
bonjour qwazerty
ceci
a été remplacé par celaCode:
1
2
3
4
5
6 sheets(nomfeuille).range("a47").select For i = 1 To 69 Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove Next Sheets("devis").Range("F47:f112").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])"
ca c'est pour la case 1 en quand je fait la meme chose pour la case 2 case 3 la ca deraille:aie::aie:Code:
1
2
3
4
5 Range("B47").Select Sheets(nomfeuille).Range("a1") = "2" Sheets(nomfeuille).Rows("47:117").Insert , CopyOrigin:=xlFormatFromLeftOrAbove 'Sheets(nomfeuille).Range("F47:f64").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" 'Sheets(nomfeuille).Range("F70:f116").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])"
merci pour ton aide la j'ai les cheveux qui fument je vais arreter pour aujourdhui sinon je vais mangé le pc :aie::calim2:
Salut
Quand tes cheveux seront dans un état plus propice, que dirais tu de nous expliquer exactement ce que tu veux faire.
Dans les 2 bouts de code que tu remets, tu utilises de nouveau des Select, qui n'ont aucune utilité ;)
Ok pour l'adaptation.
Si je comprend bien tu appelles plusieurs fois AjoutPage en passant en paramètre une valeur qui défini quel tableau doit être fait ? c'est ça?
Une chose m'interpelle dans ton code
Tu crées un tableau qui va jusqu'en ligne 117, puis tu insères des lignes à partir de 117, donc la dernière ligne de ton 1er tableau, devient la dernière ligne de ton second tableau, tu aurais pas oublié de décaler d'une ligne et de commencer le second tableau à partir de la ligne 118?
Autre chose, la dimension de tes tableaux (nombre de lignes) est différente entre les 3 cases, est ce normal?
++
Qwaz
oui si tu veux en gros cest ca
j'ai une feuille devis ou facture sur mon écran je n'ai que l'aéra d'affiché
mais il est possible que des devis ou facture possèdent plusieurs pages
donc dans cette feuille il il y a deux partie importante l'entête(nom prénom adresse ect...)pour le client
les cordonnées de l'entreprise ect...
et en pied de page le total ht
ttc
tva ect...
les lignes ou je tapes les travaux (prestations) s'arrête a 47 sur cette page
en ajoutant a partir de 47 un certain nombre de lignes je decale donc le pied de page en bas de la page 2 je remet les formules dans la colonne f sur les lignes ajoutées
et si ca suffi pas j'ajoute une 3 eme page de la meme maniere et une 4 eme
je le fesait en faisant une boucle ca marchait tres bien mais tu t'en doute c'etait un peu long
donc j'utilise la proposition de mercatog en adaptant bien sur le numero de ligne mais ca ne donne pas le meme resultat
pourquoi??:koi::koi:
merci de ton aide
si ca te parle pas je déassocirais la feuille de l'application et je t'enverai un exemple avec la macro
Salut
S'il te plait oui, je ne comprend pas tout :)Citation:
si ca te parle pas je déassocirais la feuille de l'application et je t'enverai un exemple avec la macro
Si tu peux mettre également la macro qui fait appelle à ajoutpage.
++
Qwaz
voila j'ai remedier au probleme en ajoutant le changement de l'area en fin de chaque case
voila les deux macros
la macro qui l'appelle a partir du bouton dans mon usf
la macro ajout pageCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 Private Sub CommandButton13_Click() nbpage = Sheets("devis").Range("A1") ajoutpage nbpage If nbpage <= 4 Then nbpage = nbpage + 1 Sheets("devis").Range("B8") = "Devis sur " & nbpage & " Pages" Else Exit Sub End If Sheets("devis").Range("A1") = nbpage End Sub
voila si tu trouve mieux je suis preneurCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 Sub ajoutpage(nombre As Long) Application.ScreenUpdating = False '"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Select Case nombre '************************************************************************************************************ '2 eme page Case 1 Sheets(nomfeuille).Range("a1") = "2" 'la celule me sert a memoriser le nombre de page ' ajoute les lignes Sheets(nomfeuille).Rows("47:115").Insert , CopyOrigin:=xlFormatFromLeftOrAbove 'on met les formules aux celules Sheets(nomfeuille).Range("F47:f65").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" Sheets(nomfeuille).Range("F70:f116").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" ' on copie la barre de titre Worksheets(nomfeuille).Range("A19:F19").Copy 'on la colle au meme endroit sur la page suivante ActiveSheet.Paste Destination:=Worksheets(nomfeuille).Range("A69:F69") Application.CutCopyMode = False 'on l'agrandi un peu a cause du text Rows("69:69").RowHeight = 30 ActiveSheet.PageSetup.PrintArea = "$A$1:$F$129" Exit Sub '******************************************************************************************************** ' on fait idem pour les page suivante '3 eme Page Case 2 Sheets(nomfeuille).Range("a1") = "3" Sheets(nomfeuille).Rows("116:185").Insert , CopyOrigin:=xlFormatFromLeftOrAbove Sheets(nomfeuille).Range("F115:f134").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" Sheets(nomfeuille).Range("F139:f186").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" Worksheets(nomfeuille).Range("A19:F19").Copy ActiveSheet.Paste Destination:=Worksheets(nomfeuille).Range("A138:F138") Application.CutCopyMode = False Rows("138:138").RowHeight = 30 Range("B111").Select ActiveSheet.PageSetup.PrintArea = "$A$1:$F$198" Exit Sub '*********************************************************************************************************** '4 eme page Case 3 'insertion des lignes Sheets(nomfeuille).Range("a1") = "4" Sheets(nomfeuille).Rows("186:255").Insert , CopyOrigin:=xlFormatFromLeftOrAbove 'inscription des formules dans les celule Sheets(nomfeuille).Range("F186:f203").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" Sheets(nomfeuille).Range("F209:f255").FormulaR1C1 = "=IF(RC[-2]*RC[-1]=0,"""",RC[-2]*RC[-1])" 'le titre se repete Worksheets(nomfeuille).Range("A19:F19").Copy ActiveSheet.Paste Destination:=Worksheets(nomfeuille).Range("A208:F208") Application.CutCopyMode = False 'un peu plus haute la ligne a cause du text Rows("208:208").RowHeight = 30 Range("B186").Select 'on revient a la dernieres celules ou l'on s'est arreté de taper avant l'ajout de page pour continuer a taper les prestations End Select ActiveSheet.PageSetup.PrintArea = "$A$1:$F$267" End Sub
au plaisir
Tu peux réduire ton code comme ceciLa variable NomFeuille je suppose est déclarée et initialisée quelque partCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Sub AjoutPage(Pg As Byte) Dim Frm As String Application.ScreenUpdating = False Frm = "=IF(" & NomFeuille & "!RC[-2]*" & NomFeuille & "!RC[-1]=0,""""," & NomFeuille & "!RC[-2]*" & NomFeuille & "!RC[-1])" With Worksheets(NomFeuille) .Range("a1") = Pg + 1 .Rows(69 * Pg - 22 & ":" & 69 * Pg + 47).Insert , CopyOrigin:=xlFormatFromLeftOrAbove .Range("F" & 69 * Pg - 22 & ":F" & 69 * Pg - 4).FormulaR1C1 = Frm .Range("F" & 69 * Pg + 1 & ":F" & 69 * Pg + 47).FormulaR1C1 = Frm .Range("A19:F19").Copy .Range("A" & 69 * Pg) .Rows(69 * Pg).RowHeight = 30 .PageSetup.PrintArea = "$A$1:$F$" & 69 * Pg + 60 End With End Sub
bonjour mercatog
woaw !!! ca c'est de la reduction!!!
je vais essayer ca en essayant de le comprendre
merci pour le coup de main
par contre je me demande pour quoi tu met "nomfeuille" dans la formule
moi je ne le mettais pas ca fonctionnais pourtant ?
et si je comprend bien ta macro ne me limite pas a 4 pages (ca c'est bien ) si c'est le cas
puisque l'incrementation de la "a1" se fait maintenant dans la macro ajout page si j'enleve la condition dans le click du bouton je n'ai plus de limite a 4 pages ??
je reviens des que j'ai essayé pour donner des nouvelles
merci encore
au plaisir
Bonjour,
Pour moi il y a un problème de conception du fichier à la base.
A mon sens il serait plus judicieux de créer un modèle vierge avec 15...50 ou 150 pages, peu importe, et de réajuster la zone d'impression une fois la facture terminée plutôt que de s'escrimer à ajouter le nombre de lignes nécessaires.
bonjour fring
ton idée est bonne sauf un petit detail c'est que le bas de page change de page a chaque fois
voici un exemple de la page avec la macro de mercatog
j'ai ajouté "-1" dans la premiere ligne effesctivement le pied de page etait decalé de plus en plus a chaque ajout de page
encore un fois merci mercatog trop top ta macro :ccool:
je depose un exemple completement epuré de mon application demontrant
l'ajout de page sur le sheets ("devis")
C'était par sécurité (je ne connaissais pas ton fichier) pour éviter l'éventuel problème de la feuille active et la porté de la formule.Citation:
par contre je me demande pour quoi tu met "nomfeuille" dans la formule
Ayant vu ton fichier, ta formule initiale est fonctionnelle sans ajout du nom de la feuille.
bonjour mercatog
oui j'utilise une variable string"nomfeuille "pour me servir de la même macro pour les devis ou facture
en tout cas adapté au reste de mon application ça tourne comme sur des roulettes :ccool:
et en plus je suis arrivé a la comprendre cette macro alors double bravo!!
nickel je garde :D
je crois que je peut cliquer résolu
merci encore
au plaisir