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 :

Optmisation d'une boucle supprimant des images [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut Optmisation d'une boucle supprimant des images
    Bonjour,

    J'essaye d'optimiser une macro pour l'utilisateur mais aussi pour ma compréhension personnelle,après des essais en pas en pas, j'ai trouvé la boucle qui prend tout le temps (une minute) d'exécution de la macro, voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For i = derligPdf To 1 Step -1
    If Cells(i, 40).Value = "X" Then
        For Each shap In ActiveSheet.Shapes
        If shap.TopLeftCell.Row = i Then shap.Delete
        Next
    Cells(i, 40).EntireRow.Delete
    End If
    Next i
    en fait il n'y a qu'une image maximum (ou pas) par ligne à supprimer et je me demande si ce code n'est pas optimisable en précisant je ne sais quoi dans la position de l'image

    j'ai fait pas mal d'essai mais j'ai rien trouvé de mieux que ce code

    pour info derligPDF = 1350 et il y a au maximum 80 lignes contenant une seule image

    si vous pouvez me conseiller des pistes merci

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir

    Pas besoin d'une double boucle

    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
    Sub test()
    Dim Shp As Shape
    Dim i As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        For Each Shp In .Shapes
            i = Shp.TopLeftCell.Row
            If .Range("AN" & i).Value = "X" Then
                Shp.Delete
                .Rows(i).Delete
            End If
        Next Shp
    End With
    End Sub

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    on peut même se passer de se promener dans le code une la variable ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
        Dim Shp As Shape
        Application.ScreenUpdating = False
        For Each Shp In Worksheets("Feuil1").Shapes
            With Shp.TopLeftCell.EntireRow
                If .Cells(1, "AN").Value = "X" Then
                    Shp.Delete
                    .Delete
                End If
            Next Shp
        End With
    End Sub
    la cellule contrôlée c'est la .Cells(1, "AN") de la Shp.TopLeftCell.EntireRow
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    et puis c'est long d'effacer des objets, il lui faut du temps
    eric

  5. #5
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    Bonjour,

    j'ai testé vos 2 suggestions, les lignes ne sont pas supprimées…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With Sheets("Imprimable")
        For Each shap In .Shapes
            i = shap.TopLeftCell.Row
            If .Range("AN" & i).Value = "X" Then
                shap.Delete
                .Rows(i).Delete
            End If
        Next shap
    End With
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With Sheets("Imprimable")
     For Each shap In Worksheets("Imprimable").Shapes
            With shap.TopLeftCell.EntireRow
                If .Cells(1, "AN").Value = "X" Then
                    shap.Delete
                    .Delete
                End If
            End With
    Next shap

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Il n'y a pas de raison pour que les shapes soient supprimées et non les lignes .

    Colorie la ligne contenant la shape et le X en colonne AN et fais un pas à pas .

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

Discussions similaires

  1. Supprimer des images générées par boucle et xml dans un clip qui contient un bouton
    Par yuyuboy dans le forum ActionScript 1 & ActionScript 2
    Réponses: 3
    Dernier message: 28/04/2010, 15h39
  2. actualiser une DIV contenant des images
    Par jc_cornic dans le forum Langage
    Réponses: 6
    Dernier message: 21/10/2006, 15h42
  3. [PHP-JS] Comment créer une boucle avec des headers
    Par djinnwatcher dans le forum Langage
    Réponses: 10
    Dernier message: 17/07/2006, 15h48
  4. [Upload] Supprimer des images
    Par kevinf dans le forum Langage
    Réponses: 23
    Dernier message: 17/06/2006, 16h28
  5. Faire une boucle avec des variables vides ?
    Par byloute dans le forum Linux
    Réponses: 5
    Dernier message: 23/02/2006, 09h33

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