Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

accélération code et doublons

  • Initiateur de la discussion Initiateur de la discussion JJ1
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

JJ1

Guest
Bonjour,

J'ai créé un code de listage qui fonctionne mais pas assez vite?

De plus, les limites des nombres m n o p q se chevauchant, j'ai évidemment des doublons (rouge), est-il possible d'accélérer le code et de 'sauter" les doublons?

Ne pas tenir compte de la ligne test qui fonctionne bien avec mes formules en Y et Z1 (ici 0 et 5 pour test vrai).

Merci de votre aide.

Bon dimanche.
 

Pièces jointes

Re : accélération code et doublons

Bonjour

Je n'ai pas le temps de te faire le code mais je te donne une piste

Pour accélérer le code il faut mettre tes données dans une variable tableau et travailler sur cette variable au lieu de la feuille excel
Tu trouveras des exemples sur le forum
 
Re : accélération code et doublons

Bonjour Pascal,

Merci pour ta réponse, mais Tablo et dictionary sont pas très silmples à adapter.
Et en plus j'ai des doublons (pour les éviter je ne voudrais pas ralentir le code déjà lent)


Merci et bonne journée
 
Re : accélération code et doublons

Bonjour JJ11 le forum
un tableau ou une feuille c'est pareil, par contre ta demande elle est n'est pas très claire
c'est quoi ton affaire de doublon????? tu veux obtenir quoi?? ou??? comment ???
tu veux obtenir des combinaison ou il n'y a jamais deux chiffres identiques???
a te relire
a+
Papou😱
 
Re : accélération code et doublons

Bonjour à tous

Je m'étais dit:

Je vais essayer avec les MEFC. Donc voici le code:

Code:
Sub MEFC_Doublon()
t1 = Timer
Application.ScreenUpdating = False
For Each cell In Selection
    ActiveCell.Range("A1:E1").Select
    Selection.Copy
    ActiveCell.Offset(1, 0).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        Next
        Application.ScreenUpdating = True
MsgBox Timer - t1
End Sub

Outre, que c'est quand même long, même sur 450 lignes, après c'est une calamité, avec de nombreux ralentissements sur le fichier. Conclusion, les MEFC c'est pas toujours top 🙁.


Il faudrait donc attendre les spécialistes des tableaux 🙂.
 
Re : accélération code et doublons

Bonjour Michel JJ le forum
bon alors pour l'histoire des doublons si vous m'expliquez je referai mais pour le moment
les 2590 lignes c'est moins de 0,1 secondes
a+
Papou😱

Code:
Option Explicit
Option Base 1

Sub combinaisons()
    Dim m&, n&, o&, p&, q&, i&, aa, x$, t$, mondico As Object, a&, bb, nn
    t = Timer
    ReDim aa(3 * 5 * 7 * 8 * 9, 5)
    i = 1
        For m = 1 To 3
            For n = 2 To 5
                For o = 2 To 7
                    For p = 3 To 8
                        For q = 4 To 9
                            aa(i, 1) = m
                            aa(i, 2) = n
                            aa(i, 3) = o
                            aa(i, 4) = p
                            aa(i, 5) = q: i = i + 1
                        Next q
                    Next p
                Next o
            Next n
        Next m
    Set mondico = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(aa)
        For a = 1 To UBound(aa, 2)
            x = x & "#" & aa(i, a)
        Next a
        If Not mondico.exists(x) Then mondico.Add x, x
        x = ""
    Next i
aa = mondico.items
ReDim bb(UBound(aa), 5)
For i = 1 To UBound(aa)
nn = Split(aa(i), "#"): bb(i, 1) = nn(1): bb(i, 2) = nn(2): bb(i, 3) = nn(3): bb(i, 4) = nn(4): bb(i, 5) = nn(5)
Next i
Feuil1.Range("T2:X10000").Clear
Feuil1.Range("T2").Resize(UBound(bb), UBound(bb, 2)) = bb
MsgBox "Terminé en " & Format(Timer - t, "0.00 s")
End Sub
 

Pièces jointes

Dernière édition:
Re : accélération code et doublons

Bonjour MJ13, Papou,

Oup! ça décoiffe, 0.1 sec ...
pour les doublons, je voulais dire aucun nombre identique dans une combinaison, la première par exemple 1 2 2 4 5 pas top avec 2*2.

merci beaucoup pour ce tableau.
 
Re : accélération code et doublons

Re JJ11 Michel😱 le forum
alors celle là va vous plaire, tu as le droit JJ de me mettre un Like !!!!! 673 combinaisons en 0,02 seconde
Je fais de l'autosatisfaction on n'est jamais aussi bien servi que par soi même
a+
papou😱

Code:
Option Explicit
Option Base 1

Sub combinaisons()
    Dim m&, n&, o&, p&, q&, i&, aa, x$, t$, mondico As Object, a&, bb, nn, y&, z&
    t = Timer
    ReDim aa(3 * 5 * 7 * 8 * 9, 5)
    i = 1
    For m = 1 To 3
        For n = 2 To 5
            For o = 2 To 7
                For p = 3 To 8
                    For q = 4 To 9
                        aa(i, 1) = m
                        aa(i, 2) = n
                        aa(i, 3) = o
                        aa(i, 4) = p
                        aa(i, 5) = q: i = i + 1
                    Next q
                Next p
            Next o
        Next n
    Next m
    Set mondico = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(aa)
        For z = 1 To UBound(aa, 2)
            For y = z + 1 To UBound(aa, 2)
                If aa(i, z) = aa(i, y) Then GoTo 1
            Next y
        Next z
        For a = 1 To UBound(aa, 2)
            x = x & "#" & aa(i, a)
        Next a
        If Not mondico.exists(x) Then mondico.Add x, x
        x = ""
1   Next i
    aa = mondico.items
    ReDim bb(UBound(aa) + 1, 5)
    For i = 0 To UBound(aa)
        nn = Split(aa(i), "#"): bb(i + 1, 1) = nn(1): bb(i + 1, 2) = nn(2): bb(i + 1, 3) = nn(3): bb(i + 1, 4) = nn(4): bb(i + 1, 5) = nn(5)
    Next i
    Feuil1.Range("T2:X10000").Clear
    Feuil1.Range("T2").Resize(UBound(bb), UBound(bb, 2)) = bb
    MsgBox "Terminé en " & Format(Timer - t, "0.00 s")
End Sub
 

Pièces jointes

Dernière édition:
Re : accélération code et doublons

Bonjour Pascal le forum
la réponse était par rapport à la réponse faite par JJ11
Merci pour ta réponse, mais Tablo et dictionary sont pas très silmples à adapter.
Donc j'ai répondu que le travail sur une feuille ou un tableau c'est exactement pareil, et je le répète.

Je suis content que tu m'apprennes que j'ai utilisé un tableau!! (là j'ai appris quelque chose)
Mais moi cher PascalXLD je n'utilise que les tableaux, le travail sur les feuilles et 100 fois plus long et quand je dis que un tableau ou une feuille c'est pareil, c'est simplement que la différence est de déclarer le tableau , après on l'utilise de la même manière qu'une feuille car un tableau c'est exactement le reflet de la feuille sauf que l'on écrit rien en dur tout se fait en mémoire donc pas de perte de temps à l'écriture, de même pour recopier le résultat on recolle tout en une seule fois même si le tableau fait 10000 lignes et 50 colonnes, donc là aussi pas de perte de temps. et Pour les calculs c'est exactement pareil faite la différence entre des formules et des calculs en tableaux et vous n'utiliserez jamais plus les formules, bien entendu pour des fichiers long, pour 50 lignes on en parle même pas, les formules on leurs intérêts, mais des que les listes s'allongent il n'y a pas photo les tableaux gagnent toujours.
a+
Papou😱
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
7
Affichages
173
Réponses
2
Affichages
526
Réponses
5
Affichages
522
Réponses
5
Affichages
662
Réponses
5
Affichages
748
Réponses
10
Affichages
1 K
E
Réponses
3
Affichages
794
ExcelBeginner
E
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…