Optimisation d'un code VBA

azertyh Messages postés 131 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

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

    Pourquoi parametrer sur un programme complet ??
    0
  2. azertyh Messages postés 131 Statut Membre 21
     
    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".
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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

    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
      0