Optimisation d'un code VBA

Bonjour,
j'aimerais optimiser le code suivant :

Sub tableaucroisé_en_liste()
'
' tableaucroisé_en_liste Macro
' transforme un tableau croisé en une liste de données
'

'

'i = numéro de ligne où commence la liste de données - la ligne 1 étant l'en-tête.
i = 2

'B = nom des onglets à copier.
For Each B In Array("02", "03", "41", "Sema", "NBM", "Malto")

'A = une cellule dans les onglets à copier.
'RANGE A MODIFIER.

For Each A In Worksheets(B).Range("L25:O33")

Worksheets("data").Cells(i, 1).Value = Worksheets(B).Cells(5, A.Column)
'Copie la colonne L (qui s'incrémente à chaque boucle), ligne 5 dans l'onglet B vers colonne 1, ligne i dans l'onglet data.

Worksheets("data").Cells(i, 2).Value = Worksheets(B).Cells(A.Row, 3)
'Copie la colonne C, ligne 25 (qui s'incrémente à chaque boucle) dans l'onglet B vers colonne 2, ligne i dans l'onglet data.

Worksheets("data").Cells(i, 3).Value = Worksheets(B).Cells(A.Row, A.Column)

Worksheets("data").Cells(i, 4).Value = B

i = i + 1

Next A
Next B
End Sub


J'aimerais saisir dans des boîtes de dialogue :
- les onglets à copier ("02", "03", etc).
- le champ (L25:O33).
- le numéro de ligne à copier (5 dans le code Worksheets(B).Cells(5, A.Column)).
- le numéro de colonne à copier (3 dans le code Worksheets(B).Cells(A.Row, 3)).

Merci d'avance.

Si vous trouvez d'autres optimisations, je suis prenant.



--
fait est meilleur que parfait.

3 réponses

  1. Bonjour,

    Ce n'est pas de l'optimsation mais du parametrage de recuperation.

    Pourquoi parametrer sur un programme complet ??
    1. bonsoir,
      après moult recherches, j'ai ce code :

      Sub boite_saisie()
      '
      ' boite_saisie Macro
      '

      '

      ' Sheets(Array("Jan", "Fév", "Mar", "déc", "nov")).Select

      Dim B As Worksheet

      i = 2

      C = Application.InputBox("Entrez la sélection à copier")

      For Each B In ActiveWorkbook.Worksheets
      B.Select False

      For Each A In B.Range(C)

      Worksheets("data").Cells(i, 1).Value = B.Cells(1, A.Column)
      Worksheets("data").Cells(i, 2).Value = B.Cells(A.Row, 1)
      Worksheets("data").Cells(i, 3).Value = B.Cells(A.Row, A.Column)
      Worksheets("data").Cells(i, 4).Value = B.Name

      i = i + 1

      Next A
      Next B

      End Sub


      le problème est que ce code s'applique à toutes les feuilles du classeur alors que dans l'idéal, je sélectionne les feuilles à copier (disons Jan, Fév, Mar), je lance le macro, et je n'ai que les données de ces 3 feuilles dans ma feuille "data".
      1. Contributeur
        Bonjour

        exemple (xl2000) pour sélectionner des données (ici, mois) par cliquer-glisser (drag and drop) d'une listbox à une autre
        http://www.cjoint.com/c/FAxhwfO2rUj

        1. Contributeur
          Ensuite par "paramétrer les transferts de données (L25....) de chaque mois
          change le code du bouton valider en

          Private Sub Btn_valider_Click()
          Dim Cptr As Byte
          With Lbx_arrive
          For Cptr = 0 To .ListCount - 1
          Call tamacro(.List(Cptr))
          Next Cptr
          End With


          et pour vérifier
          Sub tamacro(onglet)
          MsgBox onglet
          End Sub


          a toi de jouer avec les transferts:
          pour faciliter la maintenance change 'i" par "Lig" et "A" par "Cellule"

          et commencer ton code par figer le défilement de l'écran et déclarer tes variables
          Application.screenupdating=false