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 :

Tableau dynamique - Supprimer des lignes si condition remplie [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Par défaut Tableau dynamique - Supprimer des lignes si condition remplie
    Bonjour,

    Je commence tout juste à manipuler les tableaux dynamiques afin d'améliorer le temps d'exécution de mes macros.

    Il semblerait que mon premier test soit concluant, au sens où ce que je demande est bien réalisé et ce, plus rapidement. POUR AUTANT, je suis intimement persuadé que la façon de le taper n'est pas génial. Ainsi , j'aimerais savoir ce qu'il me faut améliorer selon vous (autant voir cela tout de suite avant d'aller plus avant).

    L'idée est de supprimer la ligne si on croise cancel dans la cellule de la colonne C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Test_avec_tableau()
     
        Lastrow = Range("A1").End(xlDown).Row
     
        Dim tablo() As Variant
        Dim i As Long
     
        For i = Lastrow To 2 Step -1
            If Range("C" & i).Value Like "*CANCEL*" Then Range("C" & i).EntireRow.Delete
            ReDim tablo(i)
        Next i
     
    End Sub
    D'avance merci pour vos retours.

    Cordialement,
    Camzo

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 548
    Par défaut
    BOnjour

    On ne peut supprimer de ligne ou autre cellule dans un TCD: seulement filtrer

  3. #3
    Membre confirmé Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Par défaut
    Bonjour Chris,

    Merci pour l'explication mais je ne comprends pas car ma macro supprime bel et bien les lignes. Mais peut-être ai-je mal compris.

    Camzo

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Un TDC est un tableau de mise en forme dont la source des données ce trouve sur un autre onglet!

    Qu'appel tu un tableau dynamique? Pas un Tableau Dynamique Croisé (TDC) je suppose?

  5. #5
    Membre confirmé Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Par défaut
    Bonjour dysorthographie,

    Je suis dans la série des tableaux multidimensionnels, et non dans les TCD.
    J'ai employé le terme de tableau dynamique car c'est appelé comme tel par SilkyRoad dans son tuto

    Camzo

  6. #6
    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,

    s'il est question de supprimer des lignes de feuille de calculs alors utiliser le B-A-BA d'Excel reste assez rapide (sans boucle !)
    et rend le code bien plus simple qu'un tableau en mémoire - pas si dynamique en fait … - surtout si non maîtrisé !

    Si continuation dans la voie d'une variable tableau dynamique , conformément aux règles de ce forum,
    merci de poster le code entrepris et d'expliquer la difficulté technique rencontrée …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  7. #7
    Membre confirmé Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Par défaut
    Bonsoir,

    Bon, je crois que j'y suis arrivé.

    Tableau de départ:

    TXT1 A
    TXT2 B
    TXT3 C
    CANCELLED-TXT4 D
    TXT5 E

    la macro:


    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
    Sub tablo()
     
        Dim Lastrow As Variant
     
        Lastrow = ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Row
     
        Dim start As Single
        start = Timer
     
        Dim I As Long
        Dim J As Long
        Dim tablo()
     
        tablo = Range("A1:B" & Lastrow)
     
        For I = 1 To UBound(tablo, 1)
            If Cells(I, 1).Value Like "*CANCEL*" Then Cells(I, 1).EntireRow.Delete
            tablo(I, 1) = Cells(I, 1) & Cells(I, 2)
        Next I
     
        Range("C1:C" & Lastrow).Value = tablo
     
        MsgBox "temps de traitement: " & Timer - start & " secondes"
    End Sub
    Le tableau à l'arrivée:

    TXT1 A TXT1A
    TXT2 B TXT2B
    TXT3 C TXT3C
    TXT5 E TXT5E

    Cela reste ma première variable donc, si c'est mal fichu ou mal pensé, vos remarques sont les bienvenues.

    Camzo

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    si c'est mal fichu ou mal pensé, vos remarques sont les bienvenues.
    le code montré n'est valable que si une seule ligne est à supprimer et "casse-pipe" si plusieurs.
    Lorsque l'on supprime ou ajoute des lignes, faire la boucle de bas en haut et non de haut en bas (sinon : croche-pieds assurés avec les n°s de lignes).

  9. #9
    Membre confirmé Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Par défaut
    Merci pour ton retour,

    Voici mon nouveau code qui va de bas en haut et qui supporte bien les multiples lignes à supprimer.

    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
    Sub tablo_supp_lign()
     
        Dim Lastrow As Variant
     
        Lastrow = ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Row
     
        Dim start As Single
        start = Timer
     
        Dim I As Long
        Dim J As Long
        Dim tablo()
     
        tablo = Range("A1:B" & Lastrow)
     
        For I = 1 To UBound(tablo, 1)
            For J = Lastrow To 2 Step -1
                If Cells(I, 1).Value Like "*CANCEL*" Then Cells(I, 1).EntireRow.Delete
            Next J
            tablo(I, 1) = Cells(I, 1) & Cells(I, 2)
        Next I
     
        Range("C1:C" & Lastrow).Value = tablo
     
        MsgBox "temps de traitement: " & Timer - start & " secondes"
    End Sub
    Chiche, c'est bon.

    Camzo

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

Discussions similaires

  1. Redimensionner un range tableau en supprimant des lignes
    Par langerspeck dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/10/2014, 00h22
  2. [Toutes versions] Supprimer des lignes sous conditions selon résultat fonction
    Par Chtik dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/11/2012, 21h29
  3. [XL-2007] Macro pour supprimer des lignes sous conditions de valeur de cellule
    Par frisco75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/09/2011, 14h33
  4. [XL-2007] Code VBA pour supprimer des lignes sous condition - problème
    Par PeaceMaker dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/06/2011, 09h09
  5. [VBA-E] Supprimer des lignes à partir d'une variable tableau
    Par humbp dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2008, 08h09

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