Accelerer ma procedure

Bonjour,

je viens d ecrire un scripte en vba excel pour une liste box

mais j ai des probleme pour le conditionner de la facon optimal c est a dire ajouter les jobs selectionner si il ne sont pas existante dans la liste deja choisis et en plus il prend beaucoup de temps car il check toute la liste avant d ecrire les jobs selectionner dans lisbox
le code que j avais ecris si il il ya quelqu un qui peut m aider avec ca
merci d avance

code ecris en vba (excel) pour userform avec une lisbox avec option multiselect

Private Sub CommandButton2_Click()
Dim nbre_ligne As Integer
nbre_ligne = ListBox2.ListCount

Dim MyTable() As Variant
Dim i As Integer
Dim j As Integer
j = 1

ReDim MyTable(1 To nbre_ligne, 1 To 7)

For i = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(i) Then
MyTable(j, 1) = Format(ListBox2.List(i, 0), "YYYY-MM-DD")
MyTable(j, 2) = ListBox2.List(i, 1)
MyTable(j, 3) = ListBox2.List(i, 2)
MyTable(j, 4) = ListBox2.List(i, 3)
MyTable(j, 5) = ListBox2.List(i, 4)
MyTable(j, 6) = ListBox2.List(i, 5)
MyTable(j, 7) = ListBox2.List(i, 6)
j = j + 1
End If
Next i
For j = 1 To UBound(MyTable)
'Worksheets("Liste_selectionnée").Select

Worksheets("Liste_selectionnée").Cells(j + 5, 1) = MyTable(j, 1)
Worksheets("Liste_selectionnée").Cells(j + 5, 2) = MyTable(j, 2)
Worksheets("Liste_selectionnée").Cells(j + 5, 3) = MyTable(j, 3)
Worksheets("Liste_selectionnée").Cells(j + 5, 4) = MyTable(j, 4)
Worksheets("Liste_selectionnée").Cells(j + 5, 5) = MyTable(j, 5)
Worksheets("Liste_selectionnée").Cells(j + 5, 6) = MyTable(j, 6)
Worksheets("Liste_selectionnée").Cells(j + 5, 7) = MyTable(j, 7)

Next

End Sub

11 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour

    a la place de
    For j = 1 To UBound(MyTable) 
     ....
    Next

    essaies
    Application.ScreenUpdating = False
    Worksheets("Liste_selectionnée").Range("A6").Resize(j, 7) = MyTable


    "Application.ScreenUpdating = False" est une instruction précieuse qui fige le défilement de l'cran à utiliser dans la plupart des procédures modifiant des feuille
    1. Bonjour a vous tous,

      Une autre facon de voir.

      Propriete multiselectmulti ou pas.

      Private Sub ListBox2_Change()
        Dim i As Integer, j As Integer, Plage As Range, c
        
        'Index liste
        i = ListBox2.ListIndex
        'Feuille a adapter
        With Worksheets("feuil2")
          'pour la dernière cellule de la colonne A
          j = .Range("A" & Rows.Count).End(xlUp).Row + 1
          'defintion plage a tester pour eviter doublon
          With Worksheets("feuil2").Range("A6:G" & j)
            'Choix du test:
            Set c = .Find(ListBox2.List(i, 1), LookIn:=xlValues)
            If Not c Is Nothing Then
              MsgBox "deja existante"
              Exit Sub
            End If
          End With
          'ecriture ligne
          .Cells(j, 1) = Format(ListBox2.List(i, 0), "YYYY-MM-DD")
          .Cells(j, 2) = ListBox2.List(i, 1)
          .Cells(j, 3) = ListBox2.List(i, 2)
          .Cells(j, 4) = ListBox2.List(i, 3)
          .Cells(j, 5) = ListBox2.List(i, 4)
          .Cells(j, 6) = ListBox2.List(i, 5)
          .Cells(j, 7) = ListBox2.List(i, 6)
        End With
      End Sub


      Bonne suite
      1. un grand merci je vais essayer vos proposition et je vous reviens :)
        1. J ai essayer les deux
          les deux marche mais celle a f894009927 son execution plus rapides que la mienne avec la modification de notre ami Michel_M
          Encore merci pour vous deux de m avoir aide

          La maintenant j ai encore besoin de votre aide c est que la colonne deux de ma liste selectionnee je veux l utilise comme un filter de ma base de donnee (range data_Live) pour l extraire et faire un nouveau range des donnee brute relies a cette liste

          si vous avez une idee ou vous avez deja passee par une experience pareil j aimerai bien savoir comment faire merci et mille merci de votre aide d avance
          1. Rebonjour
            J ai travaille comme je peux pour regler mon probleme je suis arrive au code suivant
            mais je le trouve trop long et j aimerai bien votre point de vue ou une autre facon de faire
            le code est le suivant:
            Sub Pivot_table()
            '
            ' Supprime_ancien_cree_un_nouveau Macro

            Cells.Select
            Selection.ClearContents

            Range("B4").Select
            ActiveWorkbook.Worksheets("Feuil3").PivotTables("Tableau croisé dynamique2"). _
            PivotCache.CreatePivotTable TableDestination:="Feuil1!R4C2", TableName:= _
            "Tableau croisé dynamique6", DefaultVersion:=xlPivotTableVersion14
            Sheets("Feuil1").Select
            Cells(4, 2).Select

            ' affectation_Pt Macro
            '
            With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Due date")
            .Orientation = xlRowField
            .Position = 1
            End With
            With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Customer Name")
            .Orientation = xlRowField
            .Position = 2
            End With
            Range("B14").Select
            With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Description")
            .Orientation = xlRowField
            .Position = 3
            End With
            With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("OP#")
            .Orientation = xlRowField
            .Position = 4
            End With
            With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("W/C")
            .Orientation = xlRowField
            .Position = 5
            End With
            With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Dev W/C" _
            )
            .Orientation = xlRowField
            .Position = 6
            End With
            ActiveSheet.PivotTables("Tableau croisé dynamique6").AddDataField ActiveSheet. _
            PivotTables("Tableau croisé dynamique6").PivotFields("Estimated"), _
            "Somme de Estimated", xlSum
            ActiveSheet.PivotTables("Tableau croisé dynamique6").AddDataField ActiveSheet. _
            PivotTables("Tableau croisé dynamique6").PivotFields("Actuel " & Chr(10) & "Used"), _
            "Somme de Actuel " & Chr(10) & "Used", xlSum
            ActiveSheet.PivotTables("Tableau croisé dynamique6").AddDataField ActiveSheet. _
            PivotTables("Tableau croisé dynamique6").PivotFields("Unused"), _
            "Somme de Unused", xlSum
            With ActiveSheet.PivotTables("Tableau croisé dynamique6")
            .RowGrand = False
            .InGridDropZones = True
            .RowAxisLayout xlTabularRow
            End With
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Order#"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Line#"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("WO"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Customer Name").Subtotals = Array(False, False, False, False, False, False, False, _
            False, False, False, False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Description") _
            .Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Date"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Status"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("W/C"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("OP#"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Estimated"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Used"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Unused"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Dev W/C"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Dev used"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Due date"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Actuel " & Chr(10) & "WC"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Actuel " & Chr(10) & "Used" _
            ).Subtotals = Array(False, False, False, False, False, False, False, False, False, False _
            , False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Desc/WC"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Actual WC"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Actual used") _
            .Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Criteria1"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Criteria2"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Occurrence"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Time Used"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Time Unused") _
            .Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Estimated2"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Month"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Week"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Year"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("jour"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Capacity"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Cumul/" & Chr(10) & "WC-Sem-Used").Subtotals = Array(False, False, False, False, False, False, _
            False, False, False, False, False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Cumul/" & Chr(10) & "WC-Sem-Estimated").Subtotals = Array(False, False, False, False, False, _
            False, False, False, False, False, False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Month2"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Year2"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Poste de travail").Subtotals = Array(False, False, False, False, False, False, False _
            , False, False, False, False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Ligne_OP"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Nbre_hr_Cmd") _
            .Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
            ActiveWindow.ScrollColumn = 2
            ActiveWindow.ScrollColumn = 3
            ActiveWindow.ScrollColumn = 2
            ActiveWindow.ScrollColumn = 1
            Columns("B:B").ColumnWidth = 16.43
            Columns("E:E").ColumnWidth = 6.57
            Columns("F:F").ColumnWidth = 7.43
            ActiveSheet.PivotTables("Tableau croisé dynamique6").RepeatAllLabels _
            xlRepeatLabels
            End Sub
            1. Bonjour,

              La maintenant j ai encore besoin de votre aide c est que la colonne deux de ma liste selectionnee je veux l utilise comme un filter de ma base de donnee (range data_Live) pour l extraire et faire un nouveau range des donnee brute relies a cette liste

              Pas facile a tester, il faudrait votre fichier ou une maquette pour vous aider a avancer.

              click sur ce lien pour mettre a dispo.

              https://www.cjoint.com/

              A+
              1. Bonjour j ai adapter le code a mon fichier mais il reste encore un probleme
                c est que c est vrai qui avise msgbox que c est deja existant si in fait le choix sur une commande deja selectionné mais il apprend quand meme dan la liste

                voila le code
                ''
                Private Sub ListBox2_Change()
                Dim i As Integer, j As Integer, Plage As Range, c

                'Index liste
                i = ListBox2.ListIndex
                'Feuille a adapter
                With Worksheets("Liste_selectionnée")
                'pour la dernière cellule de la colonne A
                j = .Range("A" & Rows.Count).End(xlUp).Row + 1
                'defintion plage a tester pour eviter doublon
                With Worksheets("Liste_selectionnée").Range("A4:G" & j)
                'Choix du test:
                Set c = .Find(ListBox2.List(i, 1), LookIn:=xlValues)
                If Not c Is Nothing Then
                MsgBox "Cette commande est deja existante"
                Exit Sub
                End If
                End With
                'ecriture ligne
                .Cells(j, 1) = Format(ListBox2.List(i, 0), "YYYY-MM-DD")
                .Cells(j, 2) = ListBox2.List(i, 1)
                .Cells(j, 3) = ListBox2.List(i, 2)
                .Cells(j, 4) = ListBox2.List(i, 3)
                .Cells(j, 5) = ListBox2.List(i, 4)
                .Cells(j, 6) = ListBox2.List(i, 5)
                .Cells(j, 7) = ListBox2.List(i, 6)
                End With
                End Sub
                1. Bonjour,

                  Meme si le choix fait parti de la liste, il ne faut pas le copier plus d'une fois. Vous pouvez mettre la ligne msgbox en commentaire.

                  Bonne suite
                  1. Re,

                    Alors, prenez le code ci-dessous:

                    Private Sub ListBox2_Change() 
                      Dim i As Integer, j As Integer, Plage As Range, c 
                       
                      'Index liste 
                      i = ListBox2.ListIndex 
                      'Feuille a adapter 
                      With Worksheets("Liste_selectionnée") 
                        'pour la dernière cellule de la colonne A 
                        j = .Range("A" & Rows.Count).End(xlUp).Row + 1 
                        'ecriture ligne 
                        .Cells(j, 1) = Format(ListBox2.List(i, 0), "YYYY-MM-DD") 
                        .Cells(j, 2) = ListBox2.List(i, 1) 
                        .Cells(j, 3) = ListBox2.List(i, 2) 
                        .Cells(j, 4) = ListBox2.List(i, 3) 
                        .Cells(j, 5) = ListBox2.List(i, 4) 
                        .Cells(j, 6) = ListBox2.List(i, 5) 
                        .Cells(j, 7) = ListBox2.List(i, 6) 
                      End With 
                    End Sub 
                    


                    Bonne suite