Optimisation d'un code VBA

Fermé
azertyh Messages postés 121 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 23 janvier 2016 - 21 janv. 2016 à 09:47
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 23 janv. 2016 à 08:55
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.





A voir également:

3 réponses

f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024 1 703
21 janv. 2016 à 13:35
Bonjour,

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

Pourquoi parametrer sur un programme complet ??
0
azertyh Messages postés 121 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 23 janvier 2016 21
23 janv. 2016 à 02:03
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 janv. 2016 à 08:23
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 23/01/2016 à 09:04
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