ecrire le code le plus rapide pour lire une plage

oscar.cesar

XLDnaute Nouveau
bonjour
je cherche à ecrire un code mais il doit etre le plus rapide car il y a beaucoup de passage à faire .
a) je dois lire une plage qui commence à la ligne 4 jusqu'a la derniere non vide
b) de la colonne F à y en sachant la longeur (nb de colonne vide) peut varier par ligne.
c) les donnees dans chq cellules de la plage sont des entiers 1 à 20
d) j'affecte par ligne une variable VA à la cellule F, VB à la cellule G etc...
pour chaque ligne je vide toutes mes variables.
Mais avant de les vides je m'en sers :)

merci
 

jms31

XLDnaute Junior
Re : ecrire le code le plus rapide pour lire une plage

Bonsoir,

voici une routine de parcours qui met dans un tableau (redimensionné à chaque ligne en fonction du nombre de colonne remplies) les valeurs de chaque cellule de chaque ligne.

Je suis parti de ton hypothèse ou les colonnes remplies vont de F à Y et de la ligne 1 à n.
Par contre, je ne sais pas si ce sera assez rapide pour ce que tu souhaites faire.

Code:
Sub parcours()
Dim MesVar() As Integer
Dim Nbcol As Integer
For i = 1 To [F1].End(xlDown).Row

    Nbcol = Cells(i, 6).End(xlToRight).Column - 5
    ReDim MesVar(Nbcol)
    For j = 1 To Nbcol
        MesVar(j) = Cells(i, j + 5)
    Next j
Next i
End Sub
 

oscar.cesar

XLDnaute Nouveau
Re : ecrire le code le plus rapide pour lire une plage

bonjour à tous , jmb31

ce code va bien m'aider.
j'apporte la precision que dans ma plage de colonne F à Y , toutes les colonnes ne sont pas remplies.
le remplissage est contigu mais peut etre different d'une ligne à une autre.
ex ligne 1 les colonnes remplies sont de F à H les autres sont vides
ligne 2 les colonnes remplies sont de F à Y ,etc
ligne3 les colonnes remplies sont Fà J , les autres vides
etc.....
 

wilfried_42

XLDnaute Barbatruc
Re : ecrire le code le plus rapide pour lire une plage

bonjour à tous

un essai en passant
analyse
avec currentregion, on recupere toutes la plage ayant des cellules contigues
Code:
Dim maplage as range
set maplage = Range("F4").currentregion
en masquant les lignes et les colonne voulues
et en recuperant uniquement les cellules visible
Code:
Dim maplage as range
Rows("1:3").hidden = true
Columns("A:E").hidden = true
set maplage = Range("F4").currentregion.specialcells(Xlcelltypevisible)
ensuite on met tout dans un tablo permettant un travail en memoire plus rapide
Code:
Sub macro1()
    Dim maplage As Range
    Dim tablo()
    Rows("1:3").Hidden = True
    Columns("A:E").Hidden = True
    Set maplage = Range("F4").CurrentRegion.SpecialCells(xlCellTypeVisible)
    tablo = maplage.Value
End Sub
esuite on réaffiche les ligne et colonne
Code:
Sub macro1()
    Dim maplage As Range
    Dim tablo()
    Rows("1:3").Hidden = True
    Columns("A:E").Hidden = True
    Set maplage = Range("F4").CurrentRegion.SpecialCells(xlCellTypeVisible)
    tablo = maplage.Value
    Rows("1:3").Hidden = False
    Columns("A:E").Hidden = False
End Sub
 
Dernière édition:

jms31

XLDnaute Junior
Re : ecrire le code le plus rapide pour lire une plage

Bonjour oscar.cesar,

j'avais bien compris tes containtes
b) de la colonne F à y en sachant la longeur (nb de colonne vide) peut varier par ligne.
ex ligne 1 les colonnes remplies sont de F à H les autres sont vides
ligne 2 les colonnes remplies sont de F à Y ,etc
ligne3 les colonnes remplies sont Fà J , les autres vides
et le code le prends bien en compte. A chaque ligne on recalcul le nombre de colonne remplies pour redimensionner le tableau.
Code:
Nbcol = Cells(i, 6).End(xlToRight).Column - 5
Pour être plus efficace et comme le nombre de colonne est faible.
Tu peux déclarer un tableau de taille fixe 20 et ne pas faire de "redim" dessus. Par contre comme il ne sera pas effacé à chaque ligne, il ne faut pas exploiter les valeurs du tableau au delà de l'index "Nbcol", car les valeurs présentes seront celles de lignes précédentes dont les colonnes était remplies

Les variables dont tu parlais deviennent:
VA ~ MesVar(1)
VB ~ MesVar(2)
...
bonne journée
 

ROGER2327

XLDnaute Barbatruc
Re : ecrire le code le plus rapide pour lire une plage

Bonjour à tous
D'accord avec vous, wilfried_42, la rapidité sera au rendez-vous en chargeant les données dans un tableau, en traitant les données dans le tableau et en déchargeant le tableau dans la plage originelle.
Pour ma part, je verrais bien le code suivant (facilement paramétrable en modifiant la valeur de coin_haut_gauche) :
Code:
Sub toto()
   Dim coin_haut_gauche As String, tablo()
   coin_haut_gauche = "$F4"
    tablo = Intersect(Range(coin_haut_gauche).CurrentRegion, Range(Range(coin_haut_gauche), Cells(Rows.Count, Columns.Count))).Value
    '
    ' TRAITEMENT DES DONNEES de [B]tablo[/B]
    '
    Intersect(Range(coin_haut_gauche).CurrentRegion, Range(Range(coin_haut_gauche), Cells(Rows.Count, Columns.Count))).Value = tablo
End Sub
Contrainte : au moins une cellule non vide à droite et en dessous de coin_haut_gauche.​
Bonne journée !
ROGER2327
 

Discussions similaires

Réponses
7
Affichages
255

Statistiques des forums

Discussions
312 839
Messages
2 092 678
Membres
105 508
dernier inscrit
Albator