Transpose et rapidité

  • Initiateur de la discussion Initiateur de la discussion olivierd
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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.
 
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+
 
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
 
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
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
917
Retour