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 :

Suppression et Insertion de lignes lentes à cause de listes de Validation


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [Résolu en Partie] Delete/Insert de lignes lent à cause de listes de Validation
    Bonjour à tous sur le forum (je suis nouveau ici)

    J'ai actuellement quelques problèmes Excel

    Dans une sheet Excel, je crée dynamiquement des listes de validations ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                With ws.Range(ws.Cells(lRow + 2, currentCol), ws.Cells(lRow + 1 + nbLignesPerLevel, currentCol)).Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:=schemesList
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = ""
                    .ErrorTitle = ""
                    .InputMessage = ""
                    .ErrorMessage = "Incorrect Scheme!"
                    .ShowInput = True
                    .ShowError = True
                End With
    schemesList est une liste de valeurs (ex "Val1,Val2,Val3" faisant en moyenne 7 éléments
    Le range fait en moyenne 6 cellules
    Cette méthode est appelée environ une centaine de fois (les ranges et les listes étant différents à chaque fois).

    Le problème est que une fois les formules de validations crées, l'insertion ou la suppression de ligne deviennent extrémement longues (quasiment 1s). Ceci est inacceptable vu l'utilisation faite de la feuille.

    Comment serait-il possible de créer de telles listes de validation sans provoquer utlérieurement ce ralentissement?

    Ce problème s'est déjà trouvé dans ce forum: http://www.developpez.net/forums/sho...d.php?t=376156
    Toutefois, la solution proposée est d'accélérer la suppression de ligne en le faisant de façon groupé. Pour moi, ce n'est pas applicable.

    Au sujet de ces listes, j'ai d'ailleurs un autre problème (beaucoup moins grave pour moi): si la chaine pour la liste est trop grande, cela va causer une exception à l'éxécution:
    Automation error
    The object invoked has disconnected from its clients.

    Ce problème a déjà été évoqué sur ce forum sans réponse: http://www.developpez.net/forums/sho...d.php?t=284336

    Merci beaucoup pour votre aide.

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Aprés le conseil d'un collégue, j'ai défini la liste en fonction d'un nom de range, la liste étant défini dans ce range dans une autre sheet.

    Toutefois, cela reste toujours aussi long. Je suis à court d'idéee..

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    Bonjour
    Une question?
    Es tu obligé de redéfinir à chaque fois tout tes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                    xlBetween, Formula1:=schemesList
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = ""
                    .ErrorTitle = ""
                    .InputMessage = ""
                    .ErrorMessage = "Incorrect Scheme!"
                    .ShowInput = True
                    .ShowError = True
    Si tu peux en virer, ça va gagner du temps
    Slts
    Denis

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse.

    Oui, en effet, il faudrait que je les redénisse tous à la création de la sheet. Les listes étant différentes les unes des autres, je suis obligé de les rajouter une par une.

    Je ne vois donc pas comment faire pour accélerer l'utilisation de la sheet ensuite.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Résolution partielle
    Bon, mon problème n'aura pas soulevé une masse de réponses. J'ai toutefois trouvé une solution partielle, qui me permet d'avoir mes validations sans compromettre les performances de ma sheet:

    - Je crée un range pour chaqune de mes listes précédents que je nomme
    - Sur l'événement Worksheet_SelectionChange, je regarde s'il y a une liste de validation pour la cellule où je suis actuellement, et, si oui, je la crée (par le code ci-dessus)
    - Dés que l'événement Worksheet_SelectionChange est réappelé (donc que je séléctionne une autre cellule), je retourne supprimer la validation que j'ai mise.

    Ainsi, en permanence, il n'y a qu'une seule formule de validation dans la sheet.

    Toutefois, la solution n'est pas trés élégante. Je reste ouverte à toute autre proposition.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Non, le problème est toujours là
    Je me suis réjoui un peu trop vite.

    En effet, au bout de quelques jours d'utilisation de ma sheet (aprés cliquer sur la plupart des validations), ma feuille redevient lente d'utilisation (suppression et insertion de lignes). Et cela malgré le fait que je supprime au fur et à mesure les validations.

    Cela rejoint une remarque que je me suis faite. Quand je créais en masse mes validations, ma feuille devenait trés lente. Quand je faisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.Cells.Validation.Delete
    Je supprimais bien mes validations mais la feuille restait lente.

    Comme si les formules restaient quelque part... Quoique je fasse (suppression de toutes les lignes ou colonnes contenant des validations...), rien à faire.

    La seule solution est alors de supprimer la sheet et d'en recréer une avec le même nom.

    Voili voilou, toujours pas d'idée mais si quelqu'un en a ...

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Je ne permets que très rarement aux utilisateurs de travailler directement dans la feuille.

    Je travaille principalement par Userforms sur lesquels j'ai plein contrôle et dans lesquels je peux travailler avec des Combobox permettant l'autocomplétion.

    Je n'ai donc pas de problèmes de lenteur liés à des calculs et validations dans les feuilles.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

Discussions similaires

  1. Suppression et insertion de lignes
    Par Eleanorale dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 17/05/2013, 11h01
  2. [XL-2003] Insertion de ligne vierges, recopie de valeur et suppression de ligne référente.
    Par zewho dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/12/2009, 08h31
  3. Réponses: 13
    Dernier message: 10/03/2009, 22h37
  4. suppression des sauts de ligne
    Par mrtatou dans le forum C
    Réponses: 1
    Dernier message: 30/01/2006, 17h11

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