OVH Cloud OVH Cloud

limitation du nombre de colonne dans une macro....

3 réponses
Avatar
Hervé Frank-Dangel
voici le prob:

j'ai cette macro :


> >Sub copy()
> > Dim rangeToCopy As Range
> > Dim i As Long
> > With Worksheets("Feuil1")
> > Set rangeToCopy = .Rows(1)
> > For i = 11 To 33401 Step 10
> > Set rangeToCopy = Union(rangeToCopy, .Rows(i))
> > Next
> > End With
> > rangeToCopy.copy Worksheets("Feuil2").Range("A1")
> > Set rangeToCopy = Nothing
> > End Sub




...............(Comme ta plage de cellules est très grande, il y aurait
> avantage à délimiter le nombre réel de colonnes que ta plage
> > possède... car ça bouffe beaucoup de mémoire
> !)..............................
>
>
> excellent ça a marché !!!!!
>
> moi je veux bien delimiter le nombre de colonnes, surtoutqu'il y'en a une
> (la I ) qui est sans importance, mais je sais pas comment on fait....
>
>
>****************> Le but est d'optimiser cette macro en limitant le nombre
de colonne (de A à G)

si une ame charitable sait comment je pourrais faire.....


(la macro marche très bien, c'est juste pour l'optimiser et la rendre
exploitable sur des petites config....)

merci d'avance !!!!

3 réponses

Avatar
JpPradier
Bonjour Hervé
ta macro modifiée pour selectionner uniquement les colonnes A à G :

j-p


Sub copy()
Dim rangeToCopy As Range
Dim i As Long
With Worksheets("Feuil1")
Set rangeToCopy = .Range("A1:G1")
For i = 11 To 33401 Step 10
Set rangeToCopy = Union(rangeToCopy, .Range("A1:G1").Offset(i-1))
Next
End With
rangeToCopy.copy Worksheets("Feuil2").Range("A1")
Set rangeToCopy = Nothing
End Sub
Avatar
Hervé
Bonsoir Hervé,
Je pense que le mieux est de passer par un tableau, comme il n'est pas
possible de redimensionner la 1ère dimension de celui-ci, je supprime les
lignes excédentaires après collage du tableau sur la feuille 2.
Il y a sûrement mieux mais je n'ai pas trouvé :o(. Chez la proc a mis une
seconde ??
Teste avant pour voir si le résultat te convient :

Sub Tableau()
Dim Tbl
Dim I As Long
Dim J As Integer
Dim K As Long
Tbl = Worksheets("Feuil1").[A1:G33401]
K = 1
For I = 11 To 33401 Step 10
K = K + 1
For J = 1 To 7
Tbl(K, J) = Tbl(I, J)
Next J
Next I
With Worksheets("Feuil2")
.Range("A1:G" & K) = Tbl
'suppression des lignes inutiles car pas possible de
'redimensionner le tableau
.Range(.Cells(K, 1), .Cells(33401, 1)).EntireRow.Delete
End With
Erase Tbl
End Sub

Hervé.


"Hervé Frank-Dangel" a écrit dans le
message news:
voici le prob:

j'ai cette macro :


Sub copy()
Dim rangeToCopy As Range
Dim i As Long
With Worksheets("Feuil1")
Set rangeToCopy = .Rows(1)
For i = 11 To 33401 Step 10
Set rangeToCopy = Union(rangeToCopy, .Rows(i))
Next
End With
rangeToCopy.copy Worksheets("Feuil2").Range("A1")
Set rangeToCopy = Nothing
End Sub






...............(Comme ta plage de cellules est très grande, il y aurait
avantage à délimiter le nombre réel de colonnes que ta plage
possède... car ça bouffe beaucoup de mémoire
!)..............................



excellent ça a marché !!!!!

moi je veux bien delimiter le nombre de colonnes, surtoutqu'il y'en a
une


(la I ) qui est sans importance, mais je sais pas comment on fait....


****************> Le but est d'optimiser cette macro en limitant le
nombre


de colonne (de A à G)

si une ame charitable sait comment je pourrais faire.....


(la macro marche très bien, c'est juste pour l'optimiser et la rendre
exploitable sur des petites config....)

merci d'avance !!!!






Avatar
Hervé
Oups,
J'ai dis une bêtise
Il n'est pas la peine de supprimer les lignes car le fait de limiter la
plage tronque le tableau : >>.Range("A1:G" & K) = Tbl
Bien sûr il faut lire Chez "moi" la proc a mis une seconde

Sub Tableau()
Dim Tbl As Variant
Dim I As Long
Dim J As Integer
Dim K As Long
Tbl = [A1:G33401]
K = 1
For I = 11 To 33401 Step 10
K = K + 1
For J = 1 To 7
Tbl(K, J) = Tbl(I, J)
Next J
Next I
With Worksheets("Feuil2")
.Range("A1:G" & K) = Tbl
End With
Erase Tbl
End Sub

Hervé.

"Hervé" a écrit dans le message news:
#
Bonsoir Hervé,
Je pense que le mieux est de passer par un tableau, comme il n'est pas
possible de redimensionner la 1ère dimension de celui-ci, je supprime les
lignes excédentaires après collage du tableau sur la feuille 2.
Il y a sûrement mieux mais je n'ai pas trouvé :o(. Chez la proc a mis une
seconde ??
Teste avant pour voir si le résultat te convient :

Sub Tableau()
Dim Tbl
Dim I As Long
Dim J As Integer
Dim K As Long
Tbl = Worksheets("Feuil1").[A1:G33401]
K = 1
For I = 11 To 33401 Step 10
K = K + 1
For J = 1 To 7
Tbl(K, J) = Tbl(I, J)
Next J
Next I
With Worksheets("Feuil2")
.Range("A1:G" & K) = Tbl
'suppression des lignes inutiles car pas possible de
'redimensionner le tableau
.Range(.Cells(K, 1), .Cells(33401, 1)).EntireRow.Delete
End With
Erase Tbl
End Sub

Hervé.


"Hervé Frank-Dangel" a écrit dans le
message news:
voici le prob:

j'ai cette macro :


Sub copy()
Dim rangeToCopy As Range
Dim i As Long
With Worksheets("Feuil1")
Set rangeToCopy = .Rows(1)
For i = 11 To 33401 Step 10
Set rangeToCopy = Union(rangeToCopy, .Rows(i))
Next
End With
rangeToCopy.copy Worksheets("Feuil2").Range("A1")
Set rangeToCopy = Nothing
End Sub






...............(Comme ta plage de cellules est très grande, il y aurait
avantage à délimiter le nombre réel de colonnes que ta plage
possède... car ça bouffe beaucoup de mémoire
!)..............................



excellent ça a marché !!!!!

moi je veux bien delimiter le nombre de colonnes, surtoutqu'il y'en a
une


(la I ) qui est sans importance, mais je sais pas comment on fait....


****************> Le but est d'optimiser cette macro en limitant le
nombre


de colonne (de A à G)

si une ame charitable sait comment je pourrais faire.....


(la macro marche très bien, c'est juste pour l'optimiser et la rendre
exploitable sur des petites config....)

merci d'avance !!!!