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   -
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?

A voir également:

7 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 762
 
Qu'entends tu par "quadrillée"? Tu veux une bordure? Fine? grosse? Sinon essaie avec l'enregistreur de macro.
0
Farfadet88 Messages postés 6295 Date d'inscription   Statut Membre Dernière intervention   1 370
 
Je veux bordure fine pour chaque case de ma ligne (de a à l)
Et les couleurs conditionnelles pour la case K
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 762
 
As tu essayé l'enregistreur de macro?
Tu fais : Outils/Macros/Nouvelle macro
et tu exécutes toutes les manipulations à automatiser. Y compris ta MFC.
Ensuite tu va voir le code dans l'un des Modules Visual Basic
0
Farfadet88 Messages postés 6295 Date d'inscription   Statut Membre Dernière intervention   1 370
 
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
0

 
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 762
 
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.
0
Farfadet88 Messages postés 6295 Date d'inscription   Statut Membre Dernière intervention   1 370
 
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 ..........

0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 762
 
Perso je ferais 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
0
Farfadet88 Messages postés 6295 Date d'inscription   Statut Membre Dernière intervention   1 370 > pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention  
 
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?
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 762 > Farfadet88 Messages postés 6295 Date d'inscription   Statut Membre Dernière intervention  
 
La syntaxe lorsque tu utilises Cells dans un Range est :
Range(Cells1, Cells2)

Tu écris :
Range(Cells1)
0
Farfadet88 Messages postés 6295 Date d'inscription   Statut Membre Dernière intervention   1 370 > pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention  
 
que dois je mettre pour sélectionner la case K de la ligne active alors?
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 762 > Farfadet88 Messages postés 6295 Date d'inscription   Statut Membre Dernière intervention  
 
Range("K" & nuli + 11)
tout simplement...
Je te propose de boire un p'tit café non?


ps je plaisante...
0
Mike-31 Messages postés 18407 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
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
0
Farfadet88 Messages postés 6295 Date d'inscription   Statut Membre Dernière intervention   1 370
 
pas de souci pour l'enregistrement

Juste des problèmes pour modifier le code après
0