Souci Userform multiligne + col, et mise en forme

Beast464

XLDnaute Junior
Re,

Comme prevu, je me casse les dents sur un userform...bcp bcp d'excel et de vba ces dernieres semaines... moi qui ne m'en etaitjms servi.

Voici mon souci, trainant sur le site de boisgontier, j'ai trouve un formulaire super pratique, aui me permet de recup les donnees d'une feuille et de les recopier sur une autre.

Pour qu'il soit parfait j'ai voulu activer la multi selection, pour ne copier que les lignes voulues...helas sans resultat, j'ai active le multi select et fait kkes manip.

Mais le code est tres proche de Regarde la pièce jointe FormIntuitive42.zip

Je pense que mon souci se trouve par la :
Code:
Private Sub b_recupLigne_Click()
  Sheets("Recup").Cells.ClearContents
  Sheets("Recup").Range("A2").Resize(, nbcol) = _
     Application.Index(Me.ListBox1.List, Me.ListBox1.ListIndex + 1)
  For i = 1 To nbcol
    Sheets("recup").Cells(1, i) = Me("label" & i).Caption
    Sheets("recup").Cells(1, i).Font.Bold = True
  Next i
  
End Sub
J'ai essayer de rajouter une boucle For j = 2 to 150
mais ca ne m'a donner qu'une vilaine boucle infinie...

et question subsidiaire.. peut on conserver la mise en forme source?

Merci d'avance.
 

Pièces jointes

  • FormIntuitive42.zip
    26.3 KB · Affichages: 36
  • FormIntuitive42.zip
    26.3 KB · Affichages: 45

Pierrot93

XLDnaute Barbatruc
Re : Souci Userform multiligne + col, et mise en forme

Bonjour,

pas tout compris de ta question, vois pas de "multiselect" dans ton fichier.... un exemple ci-dessous pour renvoyer les éléments sélectionnés de la 1ère colonne d'une "listbox" "multiselect"...

Code:
Dim i As Byte, j As Integer
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then
        j = j + 1
        Cells(j, 1) = ListBox1.List(i, 0)
   End If
Next i

bonne journée
@+
 

Beast464

XLDnaute Junior
Re : Souci Userform multiligne + col, et mise en forme

Oups j'ai transmis le fichier original, mais il n'ya presque rien qui chqnge, j'qi supprime le tri, et tester la multiselection dessus, m'evite d'anonymiser un fichier de plusieurs centaines de lignes sans parler du bordel mal ranger de mes macros :p

Regarde la pièce jointe FormMulti.zip

Mon probleme et que ce code me permet de copier la ligne selectionne, ou toutes les lignes, mais pas une selection multiple.

donc soit j'ai une ligne, soit tout.
Et si je veux rajouter ligne par ligne , ca m'efface et laisse que le premiere.
 

Beast464

XLDnaute Junior
Re : Souci Userform multiligne + col, et mise en forme

Ui je l'ai regarde, c'est ce que j'avais tente de faire la premiere fois.
Mais mon probleme a mon avis est que je n'arrive pas a faire a la fois sur les lignes et a la fois sur les colonnes.
Ton code me copierai la premiere colonne.
m'est avis que j'ai un probleme tout bete sur l'adaptation d'un double compteur.
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Souci Userform multiligne + col, et mise en forme

Re,

pour renvoyer vers les cellules toutes les colonnes de la "listbix" dont les lignes sont sélectionnées :


Code:
Dim i As Byte, j As Integer, k As Byte
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then
        j = j + 1
        For k = 0 To ListBox1.ColumnCount - 1
            Cells(j, k + 1) = ListBox1.List(i, k)
        Next k
   End If
Next i
 

Beast464

XLDnaute Junior
Re : Souci Userform multiligne + col, et mise en forme

Ca marche presque nickel, sauf que j'arrive pas a garder le titre en premiere ligne, faut une troisieme boucle?

Code:
Private Sub b_recupLigne_Click()
    Sheets("Result").Cells.ClearContents
    Sheets("Result").Range("A2").Resize(, nbcol) = Application.Index(Me.ListBox1.List, Me.ListBox1.ListIndex + 1)
    Sheets("Result").Cells(1, 1) = Me("label" & 1).Caption
    Sheets("Result").Cells(1, 1).Font.Bold = True
Dim i As Byte, j As Integer, k As Byte
j = 1
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then
        j = j + 1
        For k = 0 To ListBox1.ColumnCount - 1
            Cells(j, k + 1) = ListBox1.List(i, k)
        Next k
   End If
Next i
 

Pierrot93

XLDnaute Barbatruc
Re : Souci Userform multiligne + col, et mise en forme

Re,

pour tes labels, tu rajouter ceci :

Code:
Dim i As Byte, j As Integer, k As Byte
For i = 1 To 4
    Cells(1, i) = Me.Controls("Label" & i).Caption
Next i
j = 1
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then
        j = j + 1
        For k = 0 To ListBox1.ColumnCount - 1
            Cells(j, k + 1) = ListBox1.List(i, k)
        Next k
   End If
Next i
 

Beast464

XLDnaute Junior
Re : Souci Userform multiligne + col, et mise en forme

Nickel ca marche :p
grand merci pour ta patience.

Pour la mise en forme une idée? La y en a pas sur l'exemple, mais si je voulais la garder?

Edit : Seul souci si je faitu ne fois la manip , et qu'apres je veux rajouter une ligne manquante ca marche po.
Mais je suppose qu'il faudrait que je rajoute une autre série de commande, qui colle les ligne a partir de la derniere ligne utilisée, je vais etudier ca
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Souci Userform multiligne + col, et mise en forme

Re,

peut être comme ceci, en déterminant i par rapport à la première cellule vide qui suit la dernière renseignée de la colonne A :

Code:
Dim i As Byte, j As Integer, k As Byte
For i = 1 To 4
    Cells(1, i) = Me.Controls("Label" & i).Caption
Next i
j = Range("A65536").End(xlUp).Row
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then
        j = j + 1
        For k = 0 To ListBox1.ColumnCount - 1
            Cells(j, k + 1) = ListBox1.List(i, k)
        Next k
   End If
Next i

Pour la mise en forme, comprends pas trop, celle des cellules de destination ne devrait pas bouger....

@+
 

Beast464

XLDnaute Junior
Re : Souci Userform multiligne + col, et mise en forme

Oui tout a fait, c'est la manip que j'ai deja utilisé pas mal de fois sur mes macros, dès qu'on sait pas la ligne de fin hop ^^

J'adapte tout ca sur mon fichier, je risque d'avoir les doublon a gérer je regarde.

C'est la mise en forme source que je voudrais garder :p pas celle destination ^^
 

Beast464

XLDnaute Junior
Re : Souci Userform multiligne + col, et mise en forme

Voila j'ai rajoute une fonction, qui tri selon les 4 premieres colonnes, et qui supprime les double lignes si les 4 premieres colonnes sont identiques.

J aimerai avoir ton avis :
Code:
Sub DeleteSameRows()
Application.ScreenUpdating = False
    Range("A2").Select
        ' Tri sur la colonne B & C & D
        Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("C2") _
        , Order2:=xlAscending, Key3:=Range("D2"), Order3:=xlAscending, Header:= _
        xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
        xlSortNormal
        'Derniere cellule a inclure dans le tri
        Limite = (Range("A2").End(xlDown).Row - 1)
        Range("A2:A" & Limite + 1).Select
        ' Tri sur la colonne A
        Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

    For i = Range("A65535").End(xlUp).Row To 3 Step -1
        If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
            If Cells(i, 2).Value = Cells(i - 1, 2).Value Then
                If Cells(i, 3).Value = Cells(i - 1, 3).Value Then
                    If Cells(i, 4).Value = Cells(i - 1, 4).Value Then
                        Rows(i).Delete Shift:=xlUp
                    End If
                End If
            End If
        End If
    Next i
Application.ScreenUpdating = True
Range("A1").Select

Grand Merci pour ton aide, ca prend forme :p
 

Beast464

XLDnaute Junior
Re : Souci Userform multiligne + col, et mise en forme

oula quelle horreur, ca me tri pas du tout dans le bon ordre! qu'est ce que j'ai fait....

J'ai modif pour avoir tri en fonction de A de B et de C en meme temps et j'ai une erreur ..

Quelqu'un voit il pourquoi? :
Code:
        Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2"), Order2:=xlAscending, Key3:=Range("C2"), Order3:=xlAscending, Key4:=Range("D2"), Order4:=xlAscending, _
        Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal, DataOption4:=xlSortNormal

Parceque avec le code precedent mon tri melange tout les colonnes, un reference va sur un objet qui ne devrait pas avoir celle ci etc...
Peut on me dire si il trie par cellule si il deplace els lignes entieres?

Edit Bon apparemment il veut pas trier la derniere colonne pas bien important
 
Dernière édition:

Statistiques des forums

Discussions
312 201
Messages
2 086 174
Membres
103 152
dernier inscrit
Karibu