XL 2010 Extraire 3 colonnes d'un champ au-delà de 65536 lignes

cp4

XLDnaute Barbatruc
Bonjour:),

En fouinant sur le site de Boisgontier, j'ai trouvé des codes permettant de récupérer des colonnes choisies d'une plage.
Dans mon cas colonnes: 2, 3 et 16.
Cependant, ces codes plantent si la plage contient plus de 65536 lignes.
Comment contourner cette limitation à 65536 lignes.
Avec mes remerciements anticipés.

nb: je répondrai ce soir car très occupé ces derniers jours.
 

Pièces jointes

  • Extraire Col_2_3_16.xlsm
    22.5 KB · Affichages: 54

Staple1600

XLDnaute Barbatruc
Bonjour

Petite précision avant de télécharger ou installer.
Gardez à l’esprit que la mise à jour du Microsoft Download Center s’applique à Microsoft Installer (.msi)-en fonction de l’édition d’Office 2013. Il ne s’applique pas aux éditions Office 2013-clic, tel que Microsoft Office 365 Home.
=>patricktoulon
Tu n'as donc pas une version Click-To-Run
(Quand j'ai acheté mon Office 2013 Famille, ils ne vendaient que des "clés" en supermarché (Leclerc Fnac ou) et ensuite il fallait télécharger l'install
(A l'époque pas vu de version CD/DVD d'Office 2013 en magasin)
 

patricktoulon

XLDnaute Barbatruc
moi j'ai téléchargé l'iso avec le Windows-ISO-Downloader.exe (outils officiel pour les pros pour téléchargement d'iso MS)

et j'ai acheté la licence sur version-complete.fr 59.90€

quand je pense que j'avais payé a l’époque 219€ a planète saturne mon coffret 2007 :eek:

[edit]
maintenant que je sais que de 2013 à 2019 il y a un correctif pour le LAA ,JE vais peut être m’intéresser au version supérieures

je suis content de cette trouvaille ça m'a quand même miné de passer par ado pour mes grosse bases
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
tiens ChTi160
j'en reviens pas !!!!même cette version néandertalienne qui est lourde; fuse de feu de dieu
VB:
Public Property Get presse_papier_Mac_window()
    With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): .GetFromClipboard: presse_papier_Mac_window = .GetText(1): End With
End Function

Sub test()
    Range("b1:c" & Rows.Count).Copy: x1 = Split(presse_papier_Mac_window, vbCrLf)
    Range("p1:p" & Rows.Count).Copy: x2 = Split(presse_papier_Mac_window, vbCrLf)
    ReDim tbl(LBound(x1) To UBound(x1), 3)
    For i = LBound(tbl) To UBound(tbl) - 1
        tbl(i, 0) = Split(x1(i), vbTab)(0)
        tbl(i, 1) = Split(x1(i), vbTab)(1)
        tbl(i, 2) = Split(x2(i), vbTab)(0)
    Next
    [r1].Resize(UBound(x1), 3) = tbl
End Sub
Sub rempli()
    ReDim tbl(1 To Int(70000 + (Rnd * 9000)), 1 To 16)
    For i = 1 To UBound(tbl)
        tbl(i, 1) = "toto" & Int(1 + (Rnd * 10000))
        tbl(i, 2) = "tutu" & Int(1 + (Rnd * 10000))
        tbl(i, 15) = Int(1 + (Rnd * 10000))
    Next
    [B1].Resize(UBound(tbl), 15) = tbl
End Sub
 

patricktoulon

XLDnaute Barbatruc
@ChTi160 oui
des que je fait un code solide si ça marche sur fichier ouvert je te donne y a pas de soucis
je teste toutes mes astuces evaluate là
pour l'instant pour la plus part je reviens a la vitesse 2007 quasiment
c'est long je compare sur 2 pc l'un 2013 l'autre 2007 mais c'est un vieux portable un peu déglingué
j'y vais avec précautions
 

patricktoulon

XLDnaute Barbatruc
avec ces deux là c'est toi qui gagne
VB:
Sub test2() 'patrick
Dim tabl, plage As Range, tim, colonnes
tim = Timer
Set plage = [A1:p1].Resize(Cells(Rows.Count, 2).End(xlUp).Row, 16)
colonnes = Array(2, 3, 16) 'il est possible de les mettres dans l'ordre que l'on veut
tabl = Application.Index(plage.Value, Evaluate("ROW(" & plage.EntireRow.Address & ")"), colonnes) 'mettre les colonnes que l'on veut dans l'ordre voulues
[r1].Resize(UBound(tabl), 3) = tabl
 MsgBox "pour patricktoulon : " & Format(Timer - tim, "0.000\ sec.")
 End Sub
Sub ExtraitCol1316Champ() 'ChT160
 Dim tim
 tim = Timer
 Set Rng = [A1:p1].Resize(Cells(Rows.Count, 2).End(xlUp).Row, 16)
 Dim tmp(): ReDim tmp(1 To Rng.Rows.Count, 1 To 1): For i = 1 To Rng.Rows.Count: tmp(i, 1) = i: Next
 b = Application.Index(Rng, tmp, Array(2, 3, 16)) 'plante ici'
 [r1].Resize(UBound(b), UBound(b, 2)) = b
 MsgBox "pour ChTi160 : " & Format(Timer - tim, "0.000\ sec.")
End Sub
le redim temp est donc plus rapide tester 20 fois
 

cp4

XLDnaute Barbatruc
Bonsoir l'équipe;),

J'ai bien rempli ma journée mais dans la poussière.
Je constate que la vôtre aussi a été bien remplie. Je vous remercie tous autant que vous êtes.
Mais spécialement @ChTi160 😎 pour avoir relancé Patrick.
Et @patricktoulon ;) pour son entêtement et sa persévérance. Moi content de toi😇

Mais pour moi pas de bol, car j'ai Excel 2010 32 bits sur Win7 64 bits.
Et je ne suis pas sûr de trouver le correctif qui convient à ma version.

En tout cas bravo!
 

cp4

XLDnaute Barbatruc
Re
Bonsoir cp4
Attend Attend !!!!! Lol
Patrick n'a peut être pas dit son dernier mot lol

Jean marie
Merci Jean Marie de me donner espoir.
Pour le moment je me contente de ce code
VB:
Sub ExtraireColonnes()
t = Timer
   Dim Tsource, Col, Tb(), dl As Long, i As Long, j As Integer
   dl = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
   Tsource = Feuil1.[A2].Resize(dl, 16)
   Col = Array(2, 3, 16) 'colonnes à extraire

   ReDim Tb(LBound(Tsource) To UBound(Tsource), 1 To UBound(Col) + 1)
   For i = LBound(Tsource, 1) To UBound(Tsource, 1)
      For j = LBound(Col) To UBound(Col)
         Tb(i, j + 1) = Tsource(i, Col(j))
      Next j
   Next i
Debug.Print Timer - t
'   Feuil2.[A1].CurrentRegion.ClearContents
'   Feuil2.[A1].Resize(UBound(Tb), UBound(Tb, 2)) = Tb
End Sub
Je suis crevé, j'ai juste suivi le lien de Patrick. J'ai fait un effort de lire jusqu'au bout et je crois que ça ne concerne que les versions supérieures à 2013.
On ne sait jamais ce que va nous dénicher Patrick.
Bonne soirée.
 

patricktoulon

XLDnaute Barbatruc
hoh!! les gars vous avez pas le meme moteur de recherche que moi ou quoi ??
Capture.JPG





donc mon cher cp4 si tu a le service pack 2 sur ton 2010 ben y a plus qu'a
t'a intérêt a me l'installer sinon tu va m'entre chanter toi !!!!
et si t'a pas le sp2 ben c'est ici et depeche toi il vont certainement virer cette page vu que 2010 n'est plus suivi que tu ai au moins a jour ta version d'office
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonsoir Patrick, cp4, Jean-marie,

@patricktoulon : merci pour toutes les infos de ton post #44. 🙂

@cp4 : quand j'ai vu « [Clôturé] » dans le titre du sujet, j'étais sûr que c'était la modération
qui l'avait mis ! (et j'me suis demandé pour quelle raison) ; j'ai été vraiment très surpris de
voir qu'il y avait de nouveaux posts malgré la Clôture, mais avec toutes les infos de Patrick,
j'ai compris pourquoi, et ça explique que moi aussi, j'ai pu valider mon post #43 ; si c'est
vraiment toi qui a mis « [Clôturé] » dans le titre du sujet, pourquoi donc ? tu ne veux plus
recevoir de posts dans cette discussion ? ou du moins, tu pensais que ça allait bloquer les
futurs posts ? ce que j'ai écris dans mon post #43 est uniquement par rapport au système
de gestion des posts, ce n'est pas par rapport à toi, et j'aurais écris la même chose avec
n'importe quel auteur d'une discussion où j'aurais vu dans le titre « [Clôturé] ».

@ChTi160 : tiens, c'est bizarre : pour une fois, j'ai rien de spécial à te dire, lolllllll ! :p
bon, ben bonne soirée quand même, et profite bien de ta retraite chanceuse ; oh,
ça m'y fait penser : Luke le chançard, on l'appelle Lucky Luke ; alors peut-être
Lucky ChTi ? (mais si tu m'dis qu'tu tires plus vite que ton ombre, j'te croirais pas ! 😜)


soan
 

Statistiques des forums

Discussions
312 291
Messages
2 086 852
Membres
103 400
dernier inscrit
MINOU WILL