Transpose et rapidité

O

olivierd

Guest
bonjour ami lecteur(rice)

j'utilise bêtement sans comprendre une fonction VBA ( TRANSPOSE )qui tournait très correctement jusqu'à la mise à jour de notre Excel..maintenant, elle fonctionne, mais elle est très longue pour quelques données à transposer.

euh... ami savant, aurais-tu une alternative pour faire la même chose en plus rapido ? ( si oui, je promet de me prosterner devant ton pseudo pendant 8 jours )

Cordialement

olivierd

Option Explicit
Sub Transpose()
Application.ScreenUpdating = False
Dim DerniereColonne As Integer
Dim DerniereLigne As Integer
Dim i As Integer
DerniereColonne = Range("B1").End(xlToRight).Column
DerniereLigne = 161
For i = 1 To DerniereColonne - 1
Range("A1").Offset(0, i).Select
Range(ActiveCell, ActiveCell.Offset(DerniereLigne, 0)).Copy
Range("A" & CStr(DerniereLigne * i + 1)).Select
Selection.PasteSpecial Paste:=xlAll
Next
Range("B1", Range("B1").Offset(DerniereLigne, DerniereColonne)).Clear
Range("A1").Select
End Sub
 
W

wilfried

Guest
Salut olivier,

Tous d'abord, il manque dans ton code la remise en plase du rafraichissement de l'écran :

Application.screenupdating = false (enlève le rafraichissement)
Application.screenupdating = true (remet le rafraichissement)

Pour cette commande :

Range("A" & CStr(DerniereLigne * i + 1)).Select

Pourquoi ne pas utilisé la fonction offset(rows,column) ?

Cela pourrait peu être te faire gagné un peu de temps car pas de conversion.

Je ne vois pas grand chose d'autre.

Désolé

Wilfried.
 
O

olivierd

Guest
bonjour à tous,

merci pour ta réponse Wilfried
Si tu as quelques minutes, pourrais-tu me dire commentb remplacer par la fonction offset(rows,column) ? ainsi je ferais un essai de rapidité...

Cordialement

A+
 
W

wilfried

Guest
Salut olivier

Voici un exemple de syntaxe pour remplacer :

Range("A" & CStr(DerniereLigne * i + 1)).Select

range("A1").offset(derniereligne*i,0).select

cela selectionnera la cellue A7 si derniereligne=2 et i=3 (A1 +6).

A+
Wilfried
 
M

Michel_M

Guest
Option Explicit

Sub Transpose()
Dim DerniereColonne As Integer
Dim DerniereLigne As Long
Dim i As Integer

Application.ScreenUpdating = False

DerniereColonne = Range("B1").End(xlToRight).Column
DerniereLigne = 161

For i = 1 To DerniereColonne - 1
Range(Cells(1, i + 1), Cells(DerniereLigne, i + 1)).Copy Cells(DerniereLigne * i + 2, 1)
Next

Range(Cells(1, 2), Cells(DerniereLigne, DerniereColonne)).Clear
Range("A1").Select
End Sub

A+
Michel
 
Y

Yeahou

Guest
Bonjour Olivierd,Wilfried,MichelM, le forum

juste un mot pour wilfried
Application.screenupdating = true (remet le rafraichissement)
n'est pas necessaire car le rétablissement du rafraichissement écran est automatique en fin d'exécution de code, celui n'étant désactivable que pendant l'exécution de VBA. Il n'est necessaire de l'utiliser que pour réactiver l'affichage sur une partie de code en cours.

Cordialement, A+
 

Discussions similaires

Réponses
3
Affichages
607
Réponses
23
Affichages
1 K

Statistiques des forums

Discussions
312 497
Messages
2 088 995
Membres
104 001
dernier inscrit
dessinbecm