Programme excel lent ...

Résolu
Zer0Termi Messages postés 32 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 20 mai 2010 - 26 avril 2010 à 08:43
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

8 réponses

fngoagouni Messages postés 22 Date d'inscription vendredi 3 juillet 2009 Statut Membre Dernière intervention 3 mai 2010
1 mai 2010 à 19:27
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.
3
Zer0Termi Messages postés 32 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 20 mai 2010
26 avril 2010 à 08:55
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
0
fngoagouni Messages postés 22 Date d'inscription vendredi 3 juillet 2009 Statut Membre Dernière intervention 3 mai 2010
26 avril 2010 à 16:41
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 ^^...
0
Zer0Termi Messages postés 32 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 20 mai 2010
27 avril 2010 à 08:28
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 ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fngoagouni Messages postés 22 Date d'inscription vendredi 3 juillet 2009 Statut Membre Dernière intervention 3 mai 2010
27 avril 2010 à 23:33
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.
0
Zer0Termi Messages postés 32 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 20 mai 2010
28 avril 2010 à 08:24
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
0
fngoagouni Messages postés 22 Date d'inscription vendredi 3 juillet 2009 Statut Membre Dernière intervention 3 mai 2010
1 mai 2010 à 18:59
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
0
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
Merci à toi de m'avoir apporté ton aide :)

Réponse accepté !
0
Rejoignez-nous