1. #1
    Membre du Club
    Profil pro
    Assistant aux utilisateurs
    Inscrit en
    avril 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : avril 2007
    Messages : 55
    Points : 46
    Points
    46

    Par défaut Suppression de ligne par macro

    Bonjour,

    Je dois supprimer des lignes d'un tableau qui comporte 1 millier de lignes environ, j'ai adapté différents morceaux de code pour aboutir à cela:

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    REM  *****  BASIC  *****
     
    'range est la zone de cellules à traiter
    'searchColumn l'index (dans range, à partir de 0) de la colonne à comparer
    'txt la chaîne de caractères à chercher
    Sub DeleteLines(range As Object, searchColumn As Integer, txt As String)
    	Dim rows As Object, rowIndex As Integer
    	rows = range.rows
    	For rowIndex = rows.count-1 To 0 Step -1
    		If range.GetCellByPosition(searchColumn,rowIndex).string = txt Then rows.RemoveByIndex(rowIndex,1)
    	Next rowIndex
    End Sub
     
    Sub Essai(val as string)
     
    	Dim oDoc As Object , Feuille As Object 
     
    	oDoc=ThisComponent 
     
    	Feuille = oDoc.getCurrentController().getActiveSheet() 
     
    	range = Feuille.GetCellRangeByName("A9:K1150")
    	searchColumn = 0 'tester la 1ere colonne, A
    	txt = val
    	DeleteLines(range,searchColumn,txt)
    End Sub
     
    Sub ListeDpt
     
       '
       Dim Dpt (100 ) As String ' Tableau de 100 départements maximum
       Dim i As Integer
       Dim val as string
       '
       Dpt( 1)= ""
       Dpt( 2)= "02"
       Dpt( 3)= "04"
       Dpt( 4)= "05"
       Dpt( 5)= "06"
       Dpt( 6)= "08"
       Dpt( 7)= "09"
       Dpt( 8)= 10
       Dpt( 9)= 11
       Dpt( 10)= 12
       Dpt( 11)= 13
       Dpt( 12)= 14
       Dpt( 13)= 16
       Dpt( 14)= 17
       Dpt( 15)= 18
       Dpt( 16)= 19
       Dpt( 17)= 201
       Dpt( 18)= 202
       Dpt( 19)= 22
       Dpt( 20)= 23
       Dpt( 21)= 24
       Dpt( 22)= 27
       Dpt( 23)= 28
       Dpt( 24)= 29
       Dpt( 25)= 30
       Dpt( 26)= 31
       Dpt( 27)= 32
       Dpt( 28)= 33
       Dpt( 29)= 34
       Dpt( 30)= 35
       Dpt( 31)= 36
       Dpt( 32)= 37
       Dpt( 33)= 40
       Dpt( 34)= 41
       Dpt( 35)= 44
       Dpt( 36)= 45
       Dpt( 37)= 46
       Dpt( 38)= 47
       Dpt( 39)= 48
       Dpt( 40)= 49
       Dpt( 41)= 50
       Dpt( 42)= 51
       Dpt( 43)= 52
       Dpt( 44)= 53
       Dpt( 45)= 54
       Dpt( 46)= 55
       Dpt( 47)= 56
       Dpt( 48)= 57
       Dpt( 49)= 59
       Dpt( 50)= 60
       Dpt( 51)= 61
       Dpt( 52)= 62
       Dpt( 53)= 64
       Dpt( 54)= 65
       Dpt( 55)= 66
       Dpt( 56)= 67
       Dpt( 57)= 68
       Dpt( 58)= 72
       Dpt( 59)= 75
       Dpt( 60)= 76
       Dpt( 61)= 77
       Dpt( 62)= 78
       Dpt( 63)= 79
       Dpt( 64)= 80
       Dpt( 65)= 81
       Dpt( 66)= 82
       Dpt( 67)= 83
       Dpt( 68)= 84
       Dpt( 69)= 85
       Dpt( 70)= 86
       Dpt( 71)= 87
       Dpt( 72)= 88
       Dpt( 73)= 91
       Dpt( 74)= 92
       Dpt( 75)= 93
       Dpt( 76)= 94
       Dpt( 77)= 95
       Dpt( 78)= 971
       Dpt( 79)= 972
       Dpt( 80)= 973
       Dpt( 81)= 974
       Dpt( 82)= 976
       Dpt( 83) ="2A"
       Dpt( 84) ="2B"
     
     
     
       '
       ' Ecriture avec une boucle For.. To.. Next
       For i = 1 To 84
             val = Dpt (i )
             Essai (val)
       Next i
    msgbox "OK"
    end sub
    Le résultat obtenu est correcte mais l'exécution traine en longueur. Des pistes pour optimiser le code?

    Cordialement
    Eric

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    janvier 2005
    Messages
    9 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2005
    Messages : 9 216
    Points : 58 408
    Points
    58 408
    Billets dans le blog
    11

    Par défaut

    Salut,

    Au vu de ce que je vois et ce que l'on comprend du code, une des solutions pourrait être de faire l'inverse.
    Actuellement, vous faîtes pour chaque valeur Dpt, les contrôles sur 1000 lignes. Vous devriez essayer de faire pour chaque lignes le contrôle de la valeur Dpt.

    Cdlt.
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  3. #3
    Membre du Club
    Profil pro
    Assistant aux utilisateurs
    Inscrit en
    avril 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : avril 2007
    Messages : 55
    Points : 46
    Points
    46

    Par défaut

    Bonjour,

    je vais essayer

    Merci
    Eric

Discussions similaires

  1. [XL-2010] Suppression de lignes par segment de contenu dans une case.
    Par Anto_NEX dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/06/2012, 11h42
  2. [XL-2003] Suppression de lignes par masques & doublons
    Par microb76 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/06/2012, 11h50
  3. Suppression de ligne par une case à cocher
    Par adam974 dans le forum Langage
    Réponses: 15
    Dernier message: 09/01/2009, 16h55
  4. suppression de ligne par macro
    Par stefano dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/02/2008, 15h41
  5. Supprimer ligne par macro
    Par a.dequidt dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/09/2007, 12h36

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