Formulaire , tri , ligne vide

Résolu
Bonjour,

Je bloque sur un projet .
J'ai crée un formulaire de saisie .Les données saisies s’inscrivent à la suite dans la colonne A de la feuill1.
Je voudrais qu’après chaque donnée inscrite il se crée une ligne vide et que cette ligne vide soit liée à la donnée de telle sorte que lorsque je fais le tri il y ai toujours la ligne vide associée en dessous de la donnée.
Ouf!!!! , j’espère que je suis claire...
je vous joins un fichier d'exemple

https://www.transfernow.net/?utm_source=partagefichierscom&utm_medium=download

merci de votre aide
Cordialement

10 réponses

  1. Bonjour

    Est ce que la "ligne vide" reste toujours vide ou bien est ce qu'elle est susceptible d'être remplie et si oui, avec quoi (valeur, formule)?

    Cdlmnt
    1. Bonjour julia

      Si j'ai bien compris il faut rajouter une colonne B dans laquelle inscrire sur 2 lignes les valeurs de A , de manière ensuite à faire le tri sur cette colonne mais tu peux parfaitement masquer cette colonne B
      Modifie alors ta macro ainsi :
      Private Sub CommandButton1_Click()
      M = ComboBox1.Value
      Compt = Sheets("FEUIL1").Range("B" & Rows.Count).End(xlUp).Row
      
      With Sheets("FEUIL1")
      
      .Range("A" & Compt + 1).Value = Me.ComboBox1.Value
      .Range("B" & Compt + 1).Value = Me.ComboBox1.Value
      .Range("B" & Compt + 2).Value = Me.ComboBox1.Value
      .Range("A" & Compt + 1).Borders(xlEdgeLeft).LineStyle = xlContinuous
      .Range("A" & Compt + 1).Borders(xlEdgeLeft).Weight = xlThin
      .Range("A" & Compt + 1).Borders(xlEdgeTop).LineStyle = xlContinuous
      .Range("A" & Compt + 1).Borders(xlEdgeTop).Weight = xlThin
      .Range("A" & Compt + 1).Borders(xlEdgeBottom).LineStyle = xlContinuous
      .Range("A" & Compt + 1).Borders(xlEdgeBottom).LineStyle = xlThin
      .Range("A" & Compt + 1).Borders(xlEdgeRight).LineStyle = xlContinuous
      .Range("A" & Compt + 1).Borders(xlEdgeRight).Weight = xlThin
      .Range("A" & Compt + 2).Value = ""
      .Range("A" & Compt + 2).Borders(xlEdgeLeft).LineStyle = xlContinuous
      .Range("A" & Compt + 2).Borders(xlEdgeLeft).Weight = xlThin
      .Range("A" & Compt + 2).Borders(xlEdgeTop).LineStyle = xlContinuous
      .Range("A" & Compt + 2).Borders(xlEdgeTop).Weight = xlThin
      .Range("A" & Compt + 2).Borders(xlEdgeBottom).LineStyle = xlContinuous
      .Range("A" & Compt + 2).Borders(xlEdgeBottom).LineStyle = xlThin
      .Range("A" & Compt + 2).Borders(xlEdgeRight).LineStyle = xlContinuous
      .Range("A" & Compt + 2).Borders(xlEdgeRight).Weight = xlThin
      .Range("A" & Compt + 3).Value = ""
      .Range("A" & Compt + 3).Borders(xlEdgeLeft).LineStyle = xlContinuous
      .Range("A" & Compt + 3).Borders(xlEdgeLeft).Weight = xlThin
      .Range("A" & Compt + 3).Borders(xlEdgeTop).LineStyle = xlContinuous
      .Range("A" & Compt + 3).Borders(xlEdgeTop).Weight = xlThin
      .Range("A" & Compt + 3).Borders(xlEdgeBottom).LineStyle = xlContinuous
      .Range("A" & Compt + 3).Borders(xlEdgeBottom).LineStyle = xlThin
      .Range("A" & Compt + 3).Borders(xlEdgeRight).LineStyle = xlContinuous
      .Range("A" & Compt + 3).Borders(xlEdgeRight).Weight = xlThin
      
      
         Columns("A:B").Select
          ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
          ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("B2:B1000" _
              ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          With ActiveWorkbook.Worksheets("Feuil1").Sort
              .SetRange Range("A1:B1000")
             .Header = xlYes
              .MatchCase = False
              .Orientation = xlTopToBottom
              .SortMethod = xlPinYin
              .Apply
          End With
          
      End With
      maj_USER1
      MsgBox "Enregistré"
      Me.ComboBox1.Value = ""
      End Sub


      Ne pas oublier non plus de modifier la plage dans la macro RAZ pour effacer aussi la colonne B

      Cdlmnt
      Via
      1. Option 1. la "ligne vide" reste toujours vide
        http://www.cjoint.com/c/GCktDUuoDzg
        Option 2. la "ligne vide" peut être remplie ou non à la main dans la feuille
        http://www.cjoint.com/c/GCktFRU6PRg

        Cdlmnt
        1. Merci les gars , j'ai hate de tester vos propositions
          Je reviens vers vous ...
          1. Bonjour
            Tous mes remerciements pour ces fichiers , vous répondez exactement à mes besoins .
            Le fichier Option 1 de ccm81 me convient le plus .

            Pour aller plus loin ; quelques soucis apparaissent

            -Comment l'adapter si mes lignes débutent à la 12éme.
            - Je voudrais fusionner la cellule vide et la cellule non vide ; pas de soucis . mais je n'arrive plus à appliquer un filtre en fonction des autres colonnes .
            Je pense que c'est lié aux cellules fusionnées , y a t il un moyen de contourner?
            ci joint un fichier exemple
            https://mon-partage.fr/f/Rq72iS32/
            merci beaucoup
            1. Bonjour
              Apres plusieurs tests , j'abandonne les cellules fusionnées ( problématiques)
              du coup je voudrais modifier le merveilleux code de ccm81 au niveau du tri
              en fait , dans mon projet les données sont inscrites à partie de la cellule F12
              mais le tri s'applique sur toute la colonne F.
              Comment appliquer le tri qu'a partir de f12

              Option Explicit

              Private Sub CommandButton1_Click()
              Dim M As String, lifin As Long, k As Long, t(), n As Long
              Application.ScreenUpdating = False
              M = Me.ComboBox1.Value
              With Sheets("FEUIL1")
              lifin = .Range("F" & Rows.Count).End(xlUp).Row
              If lifin Mod 2 = 0 Then lifin = lifin + 1
              .Range("F" & lifin + 1).Value = M
              .Range("F" & lifin + 1).Borders.LineStyle = xlContinuous
              .Range("F" & lifin + 2).Borders.LineStyle = xlContinuous
              .Range("F" & lifin + 2).Borders.Weight = xlThin
              n = (lifin + 1) \ 2
              ReDim t(1 To n, 1 To 2)
              For k = 1 To n
              t(k, 1) = Range("F" & 2 * k).Value
              t(k, 2) = Range("F" & 2 * k + 1).Value
              Next k
              Call TriSel(t, 1)
              For k = 1 To n
              Range("F" & 2 * k).Value = t(k, 1)
              Range("F" & 2 * k + 1).Value = t(k, 2)
              Next k
              End With
              maj_USER1
              MsgBox "Enregistré"
              Me.ComboBox1.Value = ""
              Application.ScreenUpdating = True
              End Sub



              Public Sub TriSel(ByRef t, ByVal cle As Long)
              Dim lideb As Long, lifin As Long, codeb As Long, cofin As Long
              Dim i As Long, j As Long, rangmini As Long, aux, k As Long
              lifin = UBound(t, 1)

              cofin = UBound(t, 2)
              lideb = LBound(t, 1)
              codeb = LBound(t, 2)
              If cle > cofin Then Exit Sub
              For i = lideb To lifin - 1
              rangmini = i
              For j = i To lifin
              If t(j, cle) < t(rangmini, cle) Then rangmini = j
              Next j
              For k = codeb To cofin
              aux = t(i, k)
              t(i, k) = t(rangmini, k)
              t(rangmini, k) = aux
              Next k
              Next i
              End Sub


              merci beaucoup
              1. Peux tu envoyer un bout de ton fichier, dans ton dernier envoi, il y avait 3 colonnes au lieu de deux, ça change pas mal de choses.

                Cdlmnt
                1. Bonsoir ccm81

                  J'étais lancée dans la réalisation du tri en utilisant la méthode de via55 a savoir la création d'une colonne supplémentaire et y effectuer le tri
                  Du coup je te confie le bébé à tes bons soins

                  https://mon-partage.fr/f/QFEtdUDe/

                  merci énormément
                  1. Bonsoir ccm81

                    Juste une chose à dire. MERCI
                    J'avoue que c'était un peu laborieux de ma part mais bravo , tu as répondu exactement à mon souhait.

                    Merci