Macro

Résolu
Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -  
pijaku Messages postés 13513 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?

--
Après Open Office essayez Opin Offece :P
Configuration: ...

7 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Qu'entends tu par "quadrillée"? Tu veux une bordure? Fine? grosse? Sinon essaie avec l'enregistreur de macro.
    0
  2. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Je veux bordure fine pour chaque case de ma ligne (de a à l)
    Et les couleurs conditionnelles pour la case K
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  3. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    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
  4. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  7. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402 > pijaku Messages postés 13513 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
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Farfadet88 Messages postés 19 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
    4. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402 > pijaku Messages postés 13513 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
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Farfadet88 Messages postés 19 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
  8. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
    1. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
       
      pas de souci pour l'enregistrement

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