Optimisation : quelles boucles/astuces pour traiter une zone avec peu de données ?

  • Initiateur de la discussion Initiateur de la discussion Charly88
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Charly88

XLDnaute Occasionnel
Bonjour,
Une macro que je dois développer modifiera des données sur plusieurs colonnes et plusieurs pages, l'opération sera une simple multiplication.
Je cherche à faire une boucle optimisée sachant que, dans ces zones, j'aurais beaucoup plus de cellules
vides (aucun traitement à faire) que de cellules contenant des valeurs.

Y'a-t-il quelque chose à savoir / appliquer dans ce cas de figure ? Une différence entre for i / for each / do loop ?
Ou bien une ruse de vieux sioux pour ne pas boucler sur les cellules vides ?
Ce n'est pas un besoin primordial mais plus ces macros s'effectueront rapidement, mieux je m'en porterai 🙂

J'aurai une autre macro avec la même problématique, cette fois il sera question de copier les données non-vides et éventuellement de les modifier.
 
Re : Optimisation : quelles boucles/astuces pour traiter une zone avec peu de données

Bonjour
Essayez peut être d'engendrer le squelette de votre macro en faisant sous enregistrement une copie d'une cellule contenant le facteur, selection de la plage touchée et collage spécial avec Opération Multiplication, Blancs non compris.
À+
 
Re : Optimisation : quelles boucles/astuces pour traiter une zone avec peu de données

Bonjour Charly, re Bernard

une solution parmi d'autre avec l'utilisation d'un "SpecialCells", boucle sur les cellules de la colonne A qui sont renseignées par des nombres :
Code:
Dim p As Range, c As Range
On Error Resume Next 'au cas ou aucune cellule renvoyé par "SpecialCells"
Set p = Range("A1", Range("A65536").End(xlUp)).SpecialCells(xlCellTypeConstants, xlNumbers)
On Error GoTo 0
For Each c In p
    'ton code
Next c

après tout cela est fonction de ton modèle de donnée...

bon après midi
@+
 
Re : Optimisation : quelles boucles/astuces pour traiter une zone avec peu de données

Bonjour, encore une fois merci de votre aide.

Pierrot, j'ai repris ton code hier soir mais j'ai un problème avec la gestion d'erreur. La zone-range de travail est variable, j'ai donc mis ton code dans une boucle pour rendre le range variable mais cela plante rapidement (mais pas du premier coup) si la zone est vide.
Je me demande si ma combinaison d'une boucle contenant les On Error n'est pas la cause du problème.

Je reviens un peu plus tard avec un fichier exemple à moins que quelqu'un n'ai une idée d'ici là.
 
Re : Optimisation : quelles boucles/astuces pour traiter une zone avec peu de données

Bonjour,

La zone-range de travail est variable, j'ai donc mis ton code dans une boucle pour rendre le range variable mais cela plante rapidement (mais pas du premier coup) si la zone est vide.

sans au moins voir le code utilisé, difficile à dire...

bonne journée
@+
 
Re : Optimisation : quelles boucles/astuces pour traiter une zone avec peu de données

Pour le moment, j'ai mis une rustine qui évite le risque :

Code:
Public Sub V5()

Dim p As Range, c As Range

With Workbooks("Book1.xlsm").Sheets("Sheet1")
For i = 1 To 10
    If WorksheetFunction.CountA(.Range(.Cells(9 + 1, 2 + i), .Cells(.Cells(10000, 2 + i).End(xlUp).Row + 2, 2 + i))) > 0 Then
        .Range(.Cells(9 + 1, 2 + i), .Cells(.Cells(10000, 2 + i).End(xlUp).Row + 2, 2 + i)).Select
        Set p = .Range(.Cells(9 + 1, 2 + i), .Cells(.Cells(10000, 2 + i).End(xlUp).Row + 2, 2 + i)).SpecialCells(xlCellTypeConstants, xlNumbers)
        For Each c In p
            c = c / 2
        Next c
    End If
Next i

End With
End Sub

Mais si tu peux, j'aimerais bien comprendre quel est le problème plus haut.
 
Re : Optimisation : quelles boucles/astuces pour traiter une zone avec peu de données

Re,

les 2 premières lignes de la plage ne sont jamais concernées.... pas top de travailler sur des tableaux ainsi faits... préférable d'avoir une organisation sous forme de base de donnée.. toujours plus facile à manier...
 
Re : Optimisation : quelles boucles/astuces pour traiter une zone avec peu de données

Re,

sur la base du code déjà donné et en ne considérant pas les 2 premières lignes de la plage :
Code:
Option Explicit
Sub test()
Dim p As Range, c As Range
With Sheets("Sheet1").UsedRange.Offset(2)
    On Error Resume Next 'au cas ou aucune cellule renvoyé par "SpecialCells"
    Set p = .Resize(.Rows.Count - 2).SpecialCells(xlCellTypeConstants, xlNumbers)
    On Error GoTo 0
End With
For Each c In p
    'ton code
Next c
End Sub

tu devrais pouvoir adapter...
 
Re : Optimisation : quelles boucles/astuces pour traiter une zone avec peu de données

Re,

les 2 premières lignes de la plage ne sont jamais concernées.... pas top de travailler sur des tableaux ainsi faits... préférable d'avoir une organisation sous forme de base de donnée.. toujours plus facile à manier...

Tu veux dire avoir un tableau qui commence en ligne 1 et données en ligne 2 ?
J'ai déjà lu quelques discussions qui évoque une présentation en "base de données", il faut que je creuse le sujet parce que à première vue, je ne vois pas où est la différence (je suis convaincu qu'il y en a une bien sûr).

Merci pour le nouveau code, je testerai un peu plus tard.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour