IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

optimisation suppression de lignes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 60
    Par défaut optimisation suppression de lignes
    Bonjour,

    J'utilise actuellement un code qui me permet de "selectionner" les lignes de mon tableau situes entre 2 dates. je rentre dans des textbox les 2 dates de mon choix et mon programme supprime toute les lignes qui ne sont pas compris entre c'est deux dates.
    Comme je travaille sur de grand tableau le temps de suppression est execivement long. J'aimerais donc optimiser ce programme.

    voici mon code actuel:

    +
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub CommandButton1_Click()
    Dim D1 As Long
    Dim D2 As Long
    Dim EndNolig As Long
    Dim Nolig As Long
    Dim D1Lig As Long
    Dim D2Lig As Long
    Dim compt As Boolean
    Dim j As Long
    Dim i As Long
     
    compt = 0
    D1 = UserForm1.TextBox1.Value
    D2 = UserForm1.TextBox2.Value
     
    EndNolig = Worksheets("TED Defects 501").Range("A" & Rows.Count).End(xlUp).Row + 2
    Nolig = EndNolig
    For Nolig = EndNolig To 3 Step -1
     
        If Worksheets("Do not Alter 501").Cells(Nolig, 4).Value = D1 Then
            D1Lig = Nolig
        End If
        If Worksheets("Do not Alter 501").Cells(Nolig, 4).Value = D2 And compt = 0 Then
            D2Lig = Nolig
            compt = 1
        End If
        Nolig = Nolig - 1
    Next
     
    For j = EndNolig To D2Lig + 1 Step -1
        Worksheets("Do not Alter 501").Cells(j, 1).EntireRow.Delete Shift:=xlUp
     
    Next
    For i = D1Lig - 1 To 3 Step -1
        Worksheets("Do not Alter 501").Cells(i, 1).EntireRow.Delete Shift:=xlUp
    Next
    UserForm1.Hide
    End Sub
    J'ai pense a faire un copier coller de la zone que je souhaite garder est-ce une bonne idee?
    Avez vous d'autre idees ?
    merci
    Adam

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    J'avais un problème comme ça à l'époque aussi, et pour la suppression je faisais la même chose. Jusqu'à que je trouve une méthode plus rapide. j'ai pas le code sous la main, mais je peux t'expliquer le fonctionnement, qu'il faudra que tu mettes en pratique.

    En gros, le procédé était de faire un tri, tout d'abord de mes données sur les dates.
    Ensuite, étant données que les données étaient triées, il fallait que je trouve la ligne de ma première date.
    Une fois ce numéro en ma possession, je cherchais aussi la dernière ligne avec ma date de fin.

    Une fois ces 2 données, je supprimer, non pas les ligne une par une, mais par bloc ce qui m'a énormément fait gagné du temps

    Finalement, et rapidement, ton code donnerait ça, après tri :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    'recherche de la ligne du début
    For Nolig = 2 To range("D10000").end(xlup).row
        If Worksheets("Do not Alter 501").Cells(Nolig, 4).Value = D1 Then
            D1Lig = Nolig
           exit for
        End If
    Next
    'recherche de la ligne de fin
    For Nolig = range("D10000").end(xlup).row To 2 step -1
        If Worksheets("Do not Alter 501").Cells(Nolig, 4).Value = D2 Then
            D2Lig = Nolig
            Exit For
        End If
    Next
    'on supprime les blocs, en commencant par le dernier bloc (sinon, ton D1Lig voudra plus rien dire...)
    Worksheets("Do not Alter 501").Rows(D2Lig +1 & ":" & range("D10000").end(xlup).row).delete Shift:=xlUp
    Worksheets("Do not Alter 501").Rows("2:" & D1Lig -1).delete Shift:=xlUp
    je t'avoue que je suis plus sur de l'écriture de supprimer d'une ligne, mais c'est pour te donner une idée
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    commencer par désactiver l'affichage en début de procédure via la propriété ScreenUpdating (cf aide VBA intégrée) …

    Si des cellules contiennent des formules de calcul, désactiver aussi le calcul automatique via la propriété Calculation.
    Ne pas oublier de réactiver cette dernière avant la fin de la procédure …

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 60
    Par défaut
    @ illight
    Merci je vois l'idee je vais essayer de la mettre en pratique !

    @ Marc-L
    Comme mon application tourne sur plusieurs page dois-je desactiver ces deux fonctions sur toute les pages ?
    Merci pour l'idee

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    en début de procédure …
    Avant les boucles …

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 60
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Avant les boucles …
    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Excel - VBA] Problème de suppression de lignes...
    Par beholder2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/01/2005, 17h27
  2. Suppression de lignes dans un fichier
    Par bubu dans le forum Linux
    Réponses: 2
    Dernier message: 13/01/2005, 10h36
  3. Dbgrid : Comment interdire Suppression de Ligne
    Par Francis dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/11/2004, 08h31
  4. Réponses: 4
    Dernier message: 02/07/2004, 19h14
  5. [VB.NET] Suppression de ligne dans un DataTable
    Par seemax dans le forum Windows Forms
    Réponses: 7
    Dernier message: 06/05/2004, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo