Permuter 2 blocs de 3 colonnes chacun entre eux

Bonjour à tous,

Mes données que je souhaite permuter, se trouvent dans deux blocs différents :

Le 1er bloc se compose de 3 colonnes : "B", "C" et "D", la dernière ligne de ce 1er bloc est déterminée en colonne "B".

Le deuxième bloc, se compose lui aussi de 3 colonnes : "F", "G" et "H", la dernière ligne est déterminée en colonne "F".

Ce que je souhaite faire, c’est de prendre toutes les données du 1er bloc pour les mettre à la place du 2e bloc et prendre toutes les données du 2e bloc pour les mettre à la place du 1er bloc, y compris les entêtes.

Autrement dit, c’est une permutation des données entre les deux blocs.

Je reste à votre disposition pour d’autres informations supplémentaires au besoin.

Merci pour vos contributions.

24permutation.xlsm (41.80 Ko)

Bonsoir,

Pourquoi ne pas copier ces deux blocs plus loin, par exemple en P, Q et R pour le premier et en T, U et V pour le second
Ensuite effacer les colonnes B, C, D, F, G, H pour pouvoir y recopier les blocs, qui furent transposés plus loin, dans les colonnes qui vous conviennent

Ma proposition est peut être ridicule mais si j'ai bien compris la question posée, elle y répondra
A+

Salut Harzer,
Salut Jacky,

proposition nullement ridicule, Jacky, mais Harzer a, je pense, tellement de données à manipuler qu'un coup de pouce de VBA lui facilite beaucoup la vie!

Sub Permuter_Blob_B_Avec_Bloc_F()
'
Dim tTab1, tTab2
'
Application.ScreenUpdating = False
'
tTab1 = Range("B1:D" & Range("B" & Rows.Count).End(xlUp).Row).Value
Range("B1").Resize(UBound(tTab1, 1), 3).ClearContents
tTab2 = Range("F1:H" & Range("F" & Rows.Count).End(xlUp).Row).Value
Range("F1").Resize(UBound(tTab2, 1), 3).ClearContents
'
Range("B1").Resize(UBound(tTab2, 1), 3).Value = tTab2
Range("F1").Resize(UBound(tTab1, 1), 3).Value = tTab1
'
Application.ScreenUpdating = True
'
End Sub
15permutation.xlsm (40.93 Ko)

A+

Bonjour Jacky,

C’est évident que votre solution réponds à ce que je veux faire.

Il faut savoir que le projet que je fait se compose de plusieurs macros qui s’exécutent les unes après les autres, si je procède de cette manière le code final risque à un moment ou un autre d’être plus lent à s’exécuter (surtout le copier-coller) dans un autre endroit, copier-coller à la bonne place et puis ensuite effacer ce que j’ai copier tout au début.

Cette manière de copier manuellement ne me permet pas d’automatiser mes Macros.

Bien à vous et merci pour votre retour.

@Curulis,

Je suis totalement d'accord avec toi et évidemment je sous-entendais d'utiliser une procédure sous VBA pour faire ce que je proposais.
C'est ce que tu as fait avec beaucoup de brio.

Bonne soirée et au plaisir sur le Forum

@Harzer,

Le code que te propose Curulis devrait répondre très favorablement à ta question. En utilisant des tableaux comme il le fait, il me semble que tu ne devrais pas avoir de problèmes.
Bonne soirée et bon courage.

Autre manière..

Sub Permuter_Blob_B_Avec_Bloc_F()
'
Dim tTab
'
Application.ScreenUpdating = False
'
iMax = WorksheetFunction.Max(Range("B" & Rows.Count).End(xlUp).Row, Range("F" & Rows.Count).End(xlUp).Row)
tTab = Range("B1").Resize(iMax, 3).Value
Range("F1").Resize(iMax, 3).Cut Destination:=Range("B1").Resize(iMax, 3)
Range("F1").Resize(iMax, 3).Value = tTab
'
Application.ScreenUpdating = True
'
End Sub

A+

Bonjour Curulis & Jacky,

Ta proposition (Curulis) fonctionne très bien et répond totalement à mes attentes.

Grand Merci à tous les deux de vos retour respectifs.

Cordiale poignée de mains à tous les deux.

Au plaisir de vous relire.

Bonsoir,

une autre proposition (un peu tard), à voir si cela ne perturbe pas trop le tableau :

Sub Permute_LRD()
    Application.ScreenUpdating = False
    Range("F:H").Cut: Range("B:B").Insert shift:=xlToRight
    Range("H:H").Cut: Range("E:E").Insert shift:=xlToRight
End Sub

@ bientôt

LouReeD

Bonjour Curulis, Jacky & LouReeD

Merci Curulis pour ta 2e proposition, elle fonctionne aussi bien que la précédente.

Je ferais des tests sur des données très importantes, histoire de savoir laquelle adopter.

Je te renouvelle mes remerciements.

Maintenant je vais tester la proposition de LouReeD.

Salutations à tous.

Wouaw, LouReed!

moi qui aime condenser, je prends une belle claque!
Non, ton code ne perturbe rien du tout! J'ai fait plusieurs aller-retours : impec!

Bravo!

Bonjour Curulis, Jacky & LouReeD

C’est vraiment le temps de l’abondance et je suis heureux et reconnaissant de votre soutiens à tous. Plusieurs solutions sont maintenant à ma disposition.

Ta proposition LouReeD est très efficace et n’occasionne aucun conflit dans mes données.

Merci à tous.

Je sais je sais... Hors PQ et fonctions nouvelles pour les formules, je ne suis pas si mauvais !
En plus le cadre de couleur suit les colonnes, non ?

Merci de vos retours et remerciements, et ce type d'encouragement permet de persister dans l'effort ! Aller Jacky ! on y va !
On pose la caravane sur la boule !

@ bientôt

LouReeD

Bonjour à tous,

J'ai adapté un code trouvé sur le net à mes besoins. c'est une autre manière de faire.

Bien à vous.

Voici le code :

Sub Permuter_BloC_B_Avec_Bloc_F()

 Application.ScreenUpdating = False
    With Sheets("Impression").UsedRange
        'mettre les colonnes que l'on veut dans l'ordre souhaité et voulues
        vA = Application.index(.Value, Evaluate("ROW(1:" & .Rows.count & ")"), [{1,6,7,8,5,2,3,4,9,10,11,12,13,14}])
        .ClearContents
        .Range("A1").Resize(UBound(vA, 1), UBound(vA, 2)) = vA
    End With
 Application.ScreenUpdating = True

End Sub

Bonjour,

Merci pour ce retour !

Du Mferrand ou du BsAlv ? A moins que ce soit JBoisgontier... ou bien quelqu'un d'autre

Bonne continuation.

@ bientôt

LouReeD

Bonjour à tous,

LouReed, quand arriveras-ru à ne plus m'impressionner .....
Il est vrai, comme le dis Curulis, ton code, qui marche à merveille, répond bien à la question posée mais surtout il est on ne peut plus condensé

moi qui aime condenser, je prends une belle claque!

Allez ! J'ai posé ma caravanne sur la boule, tu peux démarrer

Excellente journée à vous deux et au plaisir
Jacky

Bonjour,

je viens de tester le code qui fonctionne très bien !
Mais alors le cadre de couleur ne correspond plus aux données... ce n'est pas une "vraie permutation" !
on se rassure comme on peut !

Il est vrai, contrairement à d'autre fois, je suis allé plus loin que la demande, car à l'origine c'est bien les données qui devaient être permutées !

Bonne fin de dimanche.

@ bientôt

LouReeD

Rechercher des sujets similaires à "permuter blocs colonnes chacun entre"