Formulaire , tri , ligne vide

Résolu
julia Namor Messages postés 532 Statut Membre -  
julia Namor Messages postés 532 Statut Membre -
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. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    0
  2. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
    0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    0
  4. julia Namor Messages postés 532 Statut Membre 33
     
    Merci les gars , j'ai hate de tester vos propositions
    Je reviens vers vous ...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. julia Namor Messages postés 532 Statut Membre 33
     
    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
    0
  7. julia Namor Messages postés 532 Statut Membre 33
     
    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
    0
  8. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    0
  9. julia Namor Messages postés 532 Statut Membre 33
     
    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
    0
  10. julia Namor Messages postés 532 Statut Membre 33
     
    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
    0