Bonjour à tous,
Je fais mes débuts sur VBA et voici les premiers codes que j'ai réalisé en m'aidant de diverses sources sur internet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 Sub MiseEnForme() ActiveSheet.Unprotect ("mdp") Dim i, NbLigne As Double NbLigne = Cells.SpecialCells(xlCellTypeLastCell).Row Columns("A:D").AutoFit If NbLigne = 9 Then MsgBox "Pas de valeurs" Else 'Choix de la police, de la taille et de la couleur (majoritaire) With Range(Cells(3, 1), Cells(NbLigne, 4)) .Font.Name = "Calibri" .Font.Size = 11 .Font.Color = RGB(51, 51, 153) End With 'Mets les 2 dernières colonnes au format comptabilité Range(Cells(3, 3), Cells(NbLigne, 4)).NumberFormat = "_(* #,##0.00_);_(* (#,##0.00);_(* ""-""??_);_(@_)" For i = 2 To NbLigne - 1 '2 lignes en entete 'Certaines cellules sont non vides puis vides => Fusion des cellules non vide et vide + mise en forme If IsEmpty(Cells(i + 1, 1)) Then With Range(Cells(i, 1), Cells(i + 1, 1)) .Merge .VerticalAlignment = xlCenter .HorizontalAlignment = xlCenter .Interior.Color = RGB(219, 229, 241) .Borders.Value = 1 .Borders.Color = RGB(255, 255, 255) .Font.Color = RGB(31, 73, 125) .Font.Bold = True End With 'Mise en forme des cellules non vide qui ne sont pas suivies de celulles vides ElseIf Not IsEmpty(Cells(i + 1, 1)) Then With Cells(i + 1, 1) .HorizontalAlignment = xlCenter .Interior.Color = RGB(219, 229, 241) .Borders.Value = 1 .Borders.Color = RGB(255, 255, 255) .Font.Color = RGB(31, 73, 125) .Font.Bold = True End With End If If Cells(i + 1, 1).Value Like "Total *" Then 'Dans la première colonne (colonneA), les cellules contenant Total sont fusionnées avec celles 'de la colonne B de la même ligne With Range(Cells(i + 1, 1), Cells(i + 1, 2)) .Merge .HorizontalAlignment = xlRight .Interior.Color = RGB(219, 229, 241) .Borders.Value = 1 .Borders.Color = RGB(255, 255, 255) .Font.Color = RGB(51, 51, 153) .Font.Bold = True End With 'Sur ces mêmes lignes, mise en forme des 2 dernières colonnes With Range(Cells(i + 1, 3), Cells(i + 1, 4)) .Interior.Color = RGB(219, 229, 241) .Borders.Value = 1 .Borders.Color = RGB(255, 255, 255) .Font.Color = RGB(51, 51, 153) .Font.Bold = True End With End If If IsEmpty(Cells(i + 1, 3)) Then Cells(i + 1, 3) = 0 End If If IsEmpty(Cells(i + 1, 4)) Then Cells(i + 1, 4) = 0 End If Next End If ActiveSheet.Protect ("mdp") End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub SumTotal() ActiveSheet.Unprotect ("mdp") Dim i, NbLigne As Double Dim SumTotal1, SumTotal2 As Double NbLigne = Cells.SpecialCells(xlCellTypeLastCell).Row For i = 2 To NbLigne - 1 If Cells(i + 1, 1).Value Like "Total *" Then SumTotal1 = SumTotal1 + Cells(i + 1, 3) SumTotal2 = SumTotal2 + Cells(i + 1, 4) End If Next Cells(NbLigne + 1, 1) = "Total général" With Range(Cells(NbLigne + 1, 1), Cells(NbLigne + 1, 2)) .Merge .HorizontalAlignment = xlRight .Interior.Color = RGB(219, 229, 241) .Borders.Value = 1 .Borders.Color = RGB(255, 255, 255) .Font.Color = RGB(51, 51, 153) .Font.Bold = True End With Cells(NbLigne + 1, 3) = SumTotal1 Cells(NbLigne + 1, 4) = SumTotal2 With Range(Cells(NbLigne + 1, 3), Cells(NbLigne + 1, 4)) .Interior.Color = RGB(219, 229, 241) .Borders.Value = 1 .Borders.Color = RGB(255, 255, 255) .Font.Color = RGB(51, 51, 153) .Font.Bold = True End With Range(Cells(NbLigne + 1, 3), Cells(NbLigne + 1, 4)).NumberFormat = "_(* #,##0.00_);_(* (#,##0.00);_(* ""-""??_);_(@_)" ActiveSheet.Protect ("mdp") End SubLe premier sert à mettre en forme ma sélection : Sur la feuille contenant le code, je viens coller des valeurs sur un nombre de colonnes fixes (4) mais sur un nombre de ligne variable. Dans la première colonne certaines cellules contenant des valeurs sont suivies de cellules vides et le but c'est de fusionner ces cellules vides avec la cellule non vide. (On ne touche pas les 2 premières lignes)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Sub Effacer() ActiveSheet.Unprotect ("mdp") Range(Cells(3, 1), Cells(50000, 4)).Delete Shift:=xlUp Columns("A:D").AutoFit ActiveSheet.Protect ("mdp") End Sub
Ex: A3 = A
A4 = VIDE
A5 = VIDE
A6 = B
=> On fusionne A3 A4 et A5
Et il faut faire ça jusqu'a la dernière ligne.
Le deuxième sert à faire la somme des totaux présents dans les 2 dernières colonnes.
Et le troisième sert à effacer les valeurs si on veut recommencer avec de nouvelles données. Et mon problème se situe au niveau de ce code je pense. J'ai l'impression qu'il ne me supprime pas vraiment les cellules.
Je m'explique, je viens coller la plage de données que je veux mettre en forme, celle-ci contient par exemple 150 lignes. Une fois mise en forme, je copie ces valeurs puis j'efface cette plage avec le code effacer. Mais ces 150 lignes, mêmes vides, sont encores prises en compte lorsque je calcule le nombre de ligne avec :
Y a-t-il un moyen de supprimer définitevement ces 150 lignes pour qu'elles ne soient plus prises en comptes ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part NbLigne = Cells.SpecialCells(xlCellTypeLastCell).Row
Si vous avez des suggestions pour optimiser ces programmes ou des conseils de façon générale je suis preneur !
Merci d'avance
Partager