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 -
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'aimerais optimiser le code suivant :
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.
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
-
Bonjour,
Ce n'est pas de l'optimsation mais du parametrage de recuperation.
Pourquoi parametrer sur un programme complet ?? -
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".
-
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
-
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érifierSub 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 variablesApplication.screenupdating=false
-