XL 2013 Selection périodique de données dans 2 colonnes Excel

MathieuF

XLDnaute Nouveau
Bonjour tout le monde,


18​
10​
18​
10​
40​
25​
40​
25​
55​
45​
45​
55​
66​
77​
77​
66​
10​
99​
10​
99​
77​
32​
77​
32​
45​
51​
51​
45​
88​
78​
78​
88​
Voilà, je galère un peu: j'ai 2 colonnes de plusieurs milliers de valeurs, et je souhaite sélectionner et copier périodiquement les valeurs d'une colonne dans une autre.
Mettons que j'ai 1800 valeurs dans Colonne A et Colonne B, et 2 autres colonnes vides C et D, je veux prendre les 600 premières valeurs de la Colonne A et les copier dans Colonne C, prendre les 600 suivantes et les copier dans colonne D, et les 600 dernières de nouveau copiées dans la Colonne C.
Voici un tableau pour imager ce que je recherche, j'ai conscience que c'est pas forcément commun ^^
Voilà, merci aux courageux!
 
Solution
C'était précisé :
Un essai en PJ sans aucune boucle, peut être optimisée modifiée si les plages étaient plus grandes
Un essai en PJ avec :
VB:
Sub Transfert()
    Dim L%, i%, j%, Flag%
    L = 600         ' Longueur des segments
    i = 1:  Flag = 0 ' Index et Flag ( si 0 A sur C B sur D, si 1 B sur C et A sur D )
    [C:D].ClearContents
    While Cells(i, "A") <> ""
        If Flag = 0 Then
            Range("C" & i & ":C" & i + 599) = Range("A" & i & ":A" & i + 599).Value
            Range("D" & i & ":D" & i + 599) = Range("B" & i & ":B" & i + 599).Value
            Flag = 1
        Else
            Range("D" & i & ":D" & i + 599) = Range("A" & i & ":A" & i + 599).Value
            Range("C" & i & ":C" & i + 599) = Range("B" &...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Mathieu et bienvenu sur XLD,
Un essai en PJ sans aucune boucle, peut être optimisée modifiée si les plages étaient plus grandes mais le principe resterait le même, avec :

VB:
Sub Transfert()
    [C:D].ClearContents
    
    Range("C1:C600") = Range("A1:A600").Value
    Range("C601:C1200") = Range("B1:B600").Value
    Range("C1201:C1800") = Range("A601:A1200").Value
    
    Range("D1:D600") = Range("B1:B600").Value
    Range("D601:D1200") = Range("A1:A600").Value
    Range("D1201:D1800") = Range("B601:B1200").Value
End Sub
 

Pièces jointes

  • CopieColle.xlsm
    65.9 KB · Affichages: 2

MathieuF

XLDnaute Nouveau
Bonjour Mathieu et bienvenu sur XLD,
Un essai en PJ sans aucune boucle, peut être optimisée modifiée si les plages étaient plus grandes mais le principe resterait le même, avec :

VB:
Sub Transfert()
    [C:D].ClearContents
   
    Range("C1:C600") = Range("A1:A600").Value
    Range("C601:C1200") = Range("B1:B600").Value
    Range("C1201:C1800") = Range("A601:A1200").Value
   
    Range("D1:D600") = Range("B1:B600").Value
    Range("D601:D1200") = Range("A1:A600").Value
    Range("D1201:D1800") = Range("B601:B1200").Value
End Sub
Merci pour votre réponse rapide ! si je comprends bien, pour chaque 600 valeurs, je dois écrire une ligne de code c'est cela? Est-ce possible d'automatiser cela, dans la mesure où je pense que pour mon cas ( une vingtaine de fichier contenant chacun 2 colonnes de 30000 valeurs), cela resterait assez contraignant.
Sinon votre solution est super intéressante ! merci beaucoup de me l'avoir partagé
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
C'était précisé :
Un essai en PJ sans aucune boucle, peut être optimisée modifiée si les plages étaient plus grandes
Un essai en PJ avec :
VB:
Sub Transfert()
    Dim L%, i%, j%, Flag%
    L = 600         ' Longueur des segments
    i = 1:  Flag = 0 ' Index et Flag ( si 0 A sur C B sur D, si 1 B sur C et A sur D )
    [C:D].ClearContents
    While Cells(i, "A") <> ""
        If Flag = 0 Then
            Range("C" & i & ":C" & i + 599) = Range("A" & i & ":A" & i + 599).Value
            Range("D" & i & ":D" & i + 599) = Range("B" & i & ":B" & i + 599).Value
            Flag = 1
        Else
            Range("D" & i & ":D" & i + 599) = Range("A" & i & ":A" & i + 599).Value
            Range("C" & i & ":C" & i + 599) = Range("B" & i & ":B" & i + 599).Value
            Flag = 0
        End If
        i = i + L
    Wend
End Sub
Ca s'arrête lorsqu'une cellule de A est vide.
"L" est à modifier si la longueur des segments changeait.
 

Pièces jointes

  • CopieColle (V2).xlsm
    64.7 KB · Affichages: 2

Discussions similaires

Réponses
7
Affichages
351

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote