Macro
Résolu
Farfadet88
Messages postés
6295
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'ai une macro qui copie une ligne (la dernière remplie sur un tableau) et qui la colle sur la ligne voulue.
Cette macro marche, jusque là tout va bien
Mais j'aimerais bien trouver la macro qui me permettra de gérer la mise en forme
Il faudrait qu'à la fin, la ligne soit quadrillée de la colonne A à la colonne L
De plus, la colonne K doit avoir un fond rouge si >=49, orange si >=28 et vert si <28
Une idée?
J'ai une macro qui copie une ligne (la dernière remplie sur un tableau) et qui la colle sur la ligne voulue.
Cette macro marche, jusque là tout va bien
Mais j'aimerais bien trouver la macro qui me permettra de gérer la mise en forme
Il faudrait qu'à la fin, la ligne soit quadrillée de la colonne A à la colonne L
De plus, la colonne K doit avoir un fond rouge si >=49, orange si >=28 et vert si <28
Une idée?
A voir également:
- Macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro maker - Télécharger - Divers Utilitaires
- Macro word - Guide
7 réponses
Qu'entends tu par "quadrillée"? Tu veux une bordure? Fine? grosse? Sinon essaie avec l'enregistreur de macro.
Je veux bordure fine pour chaque case de ma ligne (de a à l)
Et les couleurs conditionnelles pour la case K
Et les couleurs conditionnelles pour la case K
Le souci avec cette manip c'est que la macro enregistre la ligne que je sélectionne à la main et non celle qui vient d'être collée
Bonjour,
Eh bien, rien ne vous empêche de corriger la macro dans le bon sens.
C'est encore nous qui décidons et non pas la machine.
Eh bien, rien ne vous empêche de corriger la macro dans le bon sens.
C'est encore nous qui décidons et non pas la machine.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
Tout à fait ok avec Mr Le pingou.
Tu enregistres ta macro avec une ligne que tu sélectionnes et après tu appliques le format avec la ligne que tu "colles".
Personnellement, pour tout ce qui est format de cellules (bordures, couleurs de remplissage) je procède comme cela. Alors inutile pour moi de te donner ici le code d'une macro enregistrée.
Si tu as des soucis pour l'adapter à ton code, reviens ici, on se fera un plaisir de t'aider.
Tout à fait ok avec Mr Le pingou.
Tu enregistres ta macro avec une ligne que tu sélectionnes et après tu appliques le format avec la ligne que tu "colles".
Personnellement, pour tout ce qui est format de cellules (bordures, couleurs de remplissage) je procède comme cela. Alors inutile pour moi de te donner ici le code d'une macro enregistrée.
Si tu as des soucis pour l'adapter à ton code, reviens ici, on se fera un plaisir de t'aider.
Alors petite question
comment appliquer la mise en forme enregistrée manuellement à chaque fonction "If" associée à la case N1 dans la macro suivante?
Private Sub CommandButton1_Click()
Sheets("données").Range("m1") = ComboBox1.Value
Sheets("données").Range("n1") = ComboBox2.Value
Sheets("données").Range("o1") = TextBox1.Value
Sheets("données").Range("p1") = ComboBox4.Value
Sheets("données").Range("q2") = ComboBox5.Value
Sheets("données").Range("r2") = ComboBox6.Value
Sheets("données").Range("s1") = TextBox2.Value
Sheets("données").Range("t2") = ComboBox7.Value
Sheets("données").Range("u1") = TextBox3.Value
If Sheets("données").Range("m1") = "Administratif" Then
Sheets("Administratif").Select
Dim a As Integer
a = Range("a65536").End(xlUp).Offset(1, 0).Row
Range("a" & a) = Sheets("données").Range("o1")
Sheets("données").Range("l1").Copy
Range("b" & a).Select
ActiveCell.PasteSpecial
If ActiveCell.Value = "Photo" Then ActiveCell.Comment.Visible = False
Range("c" & a) = Sheets("données").Range("p1").Value
Range("d" & a) = Sheets("données").Range("q1").Value
Range("e" & a) = Sheets("données").Range("r1").Value
Range("f" & a) = Sheets("données").Range("w1").Value
Range("h" & a) = Sheets("données").Range("t1").Value
Range("i" & a) = Sheets("données").Range("w1").Value
Range("l" & a) = Sheets("données").Range("u1").Value
Range("g" & a) = Sheets("données").Range("s1").Value
Range("j" & a) = Sheets("données").Range("x1").Value
Range("k" & a) = Sheets("données").Range("y1").Value
If Sheets("données").Range("n1") = "Tous les bâtiments administratifs" Then
Dim nuli As Integer
nuli = Sheets("administratif").Cells.Find(What:="Tous les bâtiments administratifs", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
Sheets("administratif").Range("A" & nuli).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Sheets("administratif").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & nuli).Offset(1, 0)
End If
If Sheets("données").Range("n1") = "Poste de travail informatique" Then
Dim nuli1 As Integer
nuli1 = Sheets("administratif").Cells.Find(What:="Poste de travail informatique", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
Sheets("administratif").Range("A" & nuli1).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Sheets("administratif").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & nuli1).Offset(1, 0)
End If
If Sheets("données").Range("n1") = "Salle de repas" Then
Dim nuli2 As Integer
nuli2 = Sheets("administratif").Cells.Find(What:="Salle de repas", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
Sheets("administratif").Range("A" & nuli2).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Sheets("administratif").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & nuli2).Offset(1, 0)
End If
If Sheets("données").Range("n1") = "Vestiaires" Then
Dim nuli3 As Integer
nuli3 = Sheets("administratif").Cells.Find(What:="Vestiaires", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
Sheets("administratif").Range("A" & nuli3).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Sheets("administratif").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & nuli3).Offset(1, 0)
End If
ETC ..........
comment appliquer la mise en forme enregistrée manuellement à chaque fonction "If" associée à la case N1 dans la macro suivante?
Private Sub CommandButton1_Click()
Sheets("données").Range("m1") = ComboBox1.Value
Sheets("données").Range("n1") = ComboBox2.Value
Sheets("données").Range("o1") = TextBox1.Value
Sheets("données").Range("p1") = ComboBox4.Value
Sheets("données").Range("q2") = ComboBox5.Value
Sheets("données").Range("r2") = ComboBox6.Value
Sheets("données").Range("s1") = TextBox2.Value
Sheets("données").Range("t2") = ComboBox7.Value
Sheets("données").Range("u1") = TextBox3.Value
If Sheets("données").Range("m1") = "Administratif" Then
Sheets("Administratif").Select
Dim a As Integer
a = Range("a65536").End(xlUp).Offset(1, 0).Row
Range("a" & a) = Sheets("données").Range("o1")
Sheets("données").Range("l1").Copy
Range("b" & a).Select
ActiveCell.PasteSpecial
If ActiveCell.Value = "Photo" Then ActiveCell.Comment.Visible = False
Range("c" & a) = Sheets("données").Range("p1").Value
Range("d" & a) = Sheets("données").Range("q1").Value
Range("e" & a) = Sheets("données").Range("r1").Value
Range("f" & a) = Sheets("données").Range("w1").Value
Range("h" & a) = Sheets("données").Range("t1").Value
Range("i" & a) = Sheets("données").Range("w1").Value
Range("l" & a) = Sheets("données").Range("u1").Value
Range("g" & a) = Sheets("données").Range("s1").Value
Range("j" & a) = Sheets("données").Range("x1").Value
Range("k" & a) = Sheets("données").Range("y1").Value
If Sheets("données").Range("n1") = "Tous les bâtiments administratifs" Then
Dim nuli As Integer
nuli = Sheets("administratif").Cells.Find(What:="Tous les bâtiments administratifs", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
Sheets("administratif").Range("A" & nuli).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Sheets("administratif").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & nuli).Offset(1, 0)
End If
If Sheets("données").Range("n1") = "Poste de travail informatique" Then
Dim nuli1 As Integer
nuli1 = Sheets("administratif").Cells.Find(What:="Poste de travail informatique", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
Sheets("administratif").Range("A" & nuli1).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Sheets("administratif").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & nuli1).Offset(1, 0)
End If
If Sheets("données").Range("n1") = "Salle de repas" Then
Dim nuli2 As Integer
nuli2 = Sheets("administratif").Cells.Find(What:="Salle de repas", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
Sheets("administratif").Range("A" & nuli2).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Sheets("administratif").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & nuli2).Offset(1, 0)
End If
If Sheets("données").Range("n1") = "Vestiaires" Then
Dim nuli3 As Integer
nuli3 = Sheets("administratif").Cells.Find(What:="Vestiaires", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
Sheets("administratif").Range("A" & nuli3).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Sheets("administratif").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & nuli3).Offset(1, 0)
End If
ETC ..........
Perso je ferais ceci :
Créer une fonction "mise en forme" dans le même module que ton code ci dessus;
de ce style :
Ensuite, il suffit d'appeler cette fonction sous tout tes If comme ceci :
Créer une fonction "mise en forme" dans le même module que ton code ci dessus;
de ce style :
Function mise_en_forme() Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Interior .ColorIndex = 36 .Pattern = xlSolid End With End Function
Ensuite, il suffit d'appeler cette fonction sous tout tes If comme ceci :
If Sheets("données").Range("n1") = "Vestiaires" Then Dim nuli3 As Integer nuli3 = Sheets("administratif").Cells.Find(What:="Vestiaires", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row Sheets("administratif").Range("A" & nuli3).Offset(1, 0).EntireRow.Insert Shift:=xlDown Sheets("administratif").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & nuli3).Offset(1, 0) Range(Cells(1, nuli3 + 1),Cells(12, nuli3 + 1)).Select 'sélectionne tes cellules A à L call mise_en_forme End If
If Sheets("données").Range("n1") = "Tous les bâtiments administratifs" Then
Dim nuli As Integer
nuli = Sheets("administratif").Cells.Find(What:="Tous les bâtiments administratifs", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
Sheets("administratif").Range("A" & nuli).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Sheets("administratif").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & nuli).Offset(1, 0)
Range(Cells(1, nuli + 1), Cells(12, nuli + 1)).Select
Call Mise_en_forme
Range(Cells(1, nuli + 11)).Select
Call Colour
J'ai séparé ma macro manuelle en deux fonctions (vu que ce ne sont pas les mêmes cellules concernées)
Pourquoi la ligne en gras bug t elle?
Dim nuli As Integer
nuli = Sheets("administratif").Cells.Find(What:="Tous les bâtiments administratifs", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
Sheets("administratif").Range("A" & nuli).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Sheets("administratif").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & nuli).Offset(1, 0)
Range(Cells(1, nuli + 1), Cells(12, nuli + 1)).Select
Call Mise_en_forme
Range(Cells(1, nuli + 11)).Select
Call Colour
J'ai séparé ma macro manuelle en deux fonctions (vu que ce ne sont pas les mêmes cellules concernées)
Pourquoi la ligne en gras bug t elle?
Salut,
Comme on te l'a expliqué sur plusieurs post dans la discussion, lorsqu'on commence en programmation, le plus simple est d'utiliser l'assistant macro.
Je te conseille d'écrire sur une feuille la chronologie de ton enregistrement, parce qu'une fois l'assistant macro ouvert, il enregistre tout ce qui est fait.
Un fois l'enregistrement terminé il est possible de supprimer des lignes inutiles mais avant pour tester une ligne il est possible de la neutraliser en mettant une apostrophe au début exemple
'Cells(i, 1).Value = Cells(1, i).Value
S'il n'y a pas d'incidence sur le code la supprimer
Comme on te l'a expliqué sur plusieurs post dans la discussion, lorsqu'on commence en programmation, le plus simple est d'utiliser l'assistant macro.
Je te conseille d'écrire sur une feuille la chronologie de ton enregistrement, parce qu'une fois l'assistant macro ouvert, il enregistre tout ce qui est fait.
Un fois l'enregistrement terminé il est possible de supprimer des lignes inutiles mais avant pour tester une ligne il est possible de la neutraliser en mettant une apostrophe au début exemple
'Cells(i, 1).Value = Cells(1, i).Value
S'il n'y a pas d'incidence sur le code la supprimer