Programme excel lent ... [Résolu]

Messages postés
32
Date d'inscription
mercredi 14 avril 2010
Statut
Membre
Dernière intervention
20 mai 2010
- - Dernière réponse : Zer0Termi
Messages postés
32
Date d'inscription
mercredi 14 avril 2010
Statut
Membre
Dernière intervention
20 mai 2010
- 3 mai 2010 à 08:51
Bonjour à tous,

Après avoir créer mon programme en VBA, je l'exécute sous VBA ( petit bouton lecture ^^) et tout se passe bien, mais lorsque je le lance via un bouton placé sur ma feuille de calcul, le logiciel rame tellement qu'il bug....
Dans mon programme je lui demande de faire un test sur toutes les cellules de 3 colonnes, ça pourrait venir de ça???? Quelqu'un a une solution? Merci
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
24
Date d'inscription
vendredi 3 juillet 2009
Statut
Membre
Dernière intervention
3 mai 2010
3
Merci
J'ai détaillé pour que ce soit plus clair,
mais tu peux bien sûr résumer çà aux 2 lignes suivante:

' Déclaration de la variable range pour le tableau complet
Dim TableauComplet as range
' Sélection du tableau complet
Set TableauComplet =  Range(Range("A2"), Range("A2").SpecialCells(xlLastCell))


Ca c'est pour résoudre le problème du n° de ligne max.

Mais si ton but c'est de mettre dans une combo, le contenu d'une plage, tu peux aussi affecter la plage en question à la propriété "RowSource" de ta combo.

ComboBox4.RowSource  = SelectionTotale.Address


Quant à la proriété activate de ton forms, évite parceque si tu change momentanément d'appli (ALT+TAB) (par exemple pour vérifier un mail), l'évènement activate sera relancé qd tu reviendras sur ton document, alors que tu n'aura rien fait de spécial.

Utilise plutôt le initialise du forms, ou rajoute un bouton de ré-initialisation.

JE pense que l'év. Enter de ta combo n'est pas le bon endroit, parceque si sa se trouve, qd tu ré-initialise le contenu de ta combo il déclenche un nouvel évènement "Enter", et du coup il boucle.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 140 internautes nous ont dit merci ce mois-ci

Commenter la réponse de fngoagouni
Messages postés
32
Date d'inscription
mercredi 14 avril 2010
Statut
Membre
Dernière intervention
20 mai 2010
0
Merci
RE

Voici mon bout de programme , qui je pense, me fait ramer



Private Sub ComboBox4_Enter()
Dim AllCells As Range, Cell As Range
Dim NoDupes As New Collection
Dim i As Integer, j As Integer, X As Integer
Dim Swap1, Swap2, Item


ComboBox4.Clear 'nettoie la combobox1

Set AllCells = Worksheets("Listes").Range("B7", Range("B7").End(xlDown).Address)

' La ligne suivante ignore l'erreur causée
' par la tentative d'ajout d'une clé dupliquée dans la collection.
' Le duplicat n'est pas ajouté
On Error Resume Next
For Each Cell In AllCells
NoDupes.Add Cell.Value, CStr(Cell.Value)
' Note: le 2nd argument (key) avec la méthode Add doit être un string
Next Cell
Wend
............


Si quelqu'un a une autre méthode qui me permettrait de pas tester toutes les cellules de la colonnes (End(xlDown).Address) et que les cellules écrites... Merci
Commenter la réponse de Zer0Termi
Messages postés
24
Date d'inscription
vendredi 3 juillet 2009
Statut
Membre
Dernière intervention
3 mai 2010
0
Merci
T'es sur de ce que te ramène ton code dans ta variable "AllCells".
Parceque s'il n'y a rien aprés ta premiere celulle, je pense qu'Excel risque de sélectionner toutes les cellules vers le bas jusqu'à la dernière qu'il trouve (comme spécifié dans ton code), çàd un peu plus de 64000 lignes !!!
Dans ce cas forcément çà peu trainer un peu ^^...
Commenter la réponse de fngoagouni
Messages postés
32
Date d'inscription
mercredi 14 avril 2010
Statut
Membre
Dernière intervention
20 mai 2010
0
Merci
Hey fngoagouni, merci d'avoir répondu :D

Oui je pense qu'il fait ça pour les 64 000 lignes à cause de l'instruction
Set AllCells = Worksheets("Listes").Range("B7", Range("B7").End(xlDown).Address)

tu n'aurais pas une instruction qui permettrait de prendre que les lignes écrites ??
Commenter la réponse de Zer0Termi
Messages postés
24
Date d'inscription
vendredi 3 juillet 2009
Statut
Membre
Dernière intervention
3 mai 2010
0
Merci
Bé c pas forcément simple.
Moi j'ai eu à le faire, j'ai utilisé la même métho que toi, mais je me positionnais sur une celulle non nulle (ligne de titre en A1), je vérifiais si A2 était renseignée, et si oui j'appliquait la métho, si non c'est mon tableau est vide.

Mais dans mon cas, la colonne A était forcément renseignée pour toute mes lignes (pas de trou). Si y a des trous çà marchera pas.

Autre métho : Enregistre une macro automatique en partant de la cellule A1 et en faisant Shift+Ctr+Fin et regarde le code.

Ca marche pas mal aussi, sauf quand tu effaces des contenu de cellule manuellement.
Commenter la réponse de fngoagouni
Messages postés
32
Date d'inscription
mercredi 14 avril 2010
Statut
Membre
Dernière intervention
20 mai 2010
0
Merci
Re et merci fngoagouni

Je suis dans le même cas que toi je n'ai pas de trou dans mon tableau, les valeurs se suivent.... avant j'avais mis une variable X qui donnait la fin du tableau avec l'instruction

While Worksheets("Listes").Cells(X, 2) <> ""
X = X + 1
wend

Mais je n'arrive pas la mettre dans mon COMBOBOX enter(), de plus si je la mets dans userform activate lorsque je mets l'instruction....
Set Cellules = Worksheets("Listes").Range("B7", "B" & X)

.... ça ne fonctionne pas. :(
Tu aurais la solution? Merci de ton aide
Commenter la réponse de Zer0Termi
Messages postés
24
Date d'inscription
vendredi 3 juillet 2009
Statut
Membre
Dernière intervention
3 mai 2010
0
Merci
Voilà qui devrait résoudre ton pb.

Tu n'a plus qu'a modifier la cellule de départ, et enlever la commande ".Select" à la fin et tu as à peu près le code qu'il te faut (si j'ai bien compris ton pb)

Sub SelectionnerTout()
'
' Macro SelectionnerTout
' Sélectionne jusqu'à la dernière cellule utilisée.
'
Dim CelluleDeDepart As Range
Dim SelectionTotale As Range

    ' Défini la cellule à partir de laquelle on "selectionne tout"
    Set CelluleDeDepart = Range("A2")
    ' Détermine la plage de "selection totale" à partir de la cellule initiale
    ' Comme si on se plaçait en A2 et qu'on enchainait les touche Ctl+Fin
    Set SelectionTotale = Range(CelluleDeDepart, CelluleDeDepart.SpecialCells(xlLastCell))
    
    ' Selectionne réellement la plage pour aperçu visuel
    SelectionTotale.Select

End Sub
Commenter la réponse de fngoagouni
Messages postés
32
Date d'inscription
mercredi 14 avril 2010
Statut
Membre
Dernière intervention
20 mai 2010
0
Merci
Merci à toi de m'avoir apporté ton aide :)

Réponse accepté !
Commenter la réponse de Zer0Termi