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

VBA peut-on réduire le nombre de boucle

  • Initiateur de la discussion Initiateur de la discussion Arpette
  • 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 !

Arpette

XLDnaute Impliqué
Bonsoir à toutes et à tous,
j'aimerais savoir si il est possible de réduire le nombre de boucle dans ma macro. Je poste que la partie qui prend du temps.
Merci de votre aide
@+

Code:
With Worksheets("Feuil1")
Set c = .Range("D2")
            Do While c.Offset(0, -1) <> ""
                c = c(1, 0) & "-" & Format(c(1, 23), "000")
                Set c = c.Offset(1, 0)
            Loop
        
        Set c = .Range("D2")
            Do While c.Offset(0, 0) <> ""
                If c(1, 25) = "C" Or c(1, 25) = "x" Or c(1, 25) = "X" Then
                    c(1, 25) = "c"
                End If
                Set c = c.Offset(1, 0)
            Loop
            
        Set c = .Range("D2")
            Do While c.Offset(0, 0) <> ""
                If c(1, 3) = c(1, 4) And c(1, 25) = "c" Then
                    c(1, 3) = 0
                    c(1, 4) = 0
                End If
                Set c = c.Offset(1, 0)
            Loop
End With
 
Re : Re: VBA peut-on réduire le nombre de boucle

Bonsoir Softmama, j'ai terminé de mettre sous forme de formule la plus part des boucles. Il m'en reste une, penses tu que l'on puisse faire quelque chose pour améliorer.
Merci de ton aide
@+
Code:
Set c = Worksheets("5-9-12").Range("D" & Worksheets("5-9-12").Range("D65536").End(xlUp).Row)
Do While c.Row > 1
'Remise à 0 des compteurs somme à chaque boucle
Somme& = 0
Somme1& = 0
Somme2& = 0
  With Worksheets("5-17").Range("F2:F" & Worksheets("5-17").Range("F65536").End(xlUp).Row)
    Set d = .Find(c)
        If Not d Is Nothing Then
            Départ = d.Address
            Do
                c(2, 1).EntireRow.Insert
                c(2, 0) = "N° ASN"
                
                'n° d'ASN
                c(2, 1) = d(1, 26)
                If c(2, 0) = "N° ASN" Then
                   c(2, 3) = 0
                   c(2, 4) = 0
                   c(2, 5) = 0
                   c(2, 6) = 0
                   c(2, 7) = 0
                   Else
                End If
                'qt dans l'ASN
                c(2, 8) = d(1, 6)
                'Qté en transit
                c(2, 12) = d(1, 7)
                'Qté réceptionnée C3D
                If c(1, 3) > c(1, 4) And c(2, 10) = "" And c(2, 12) = "" Then
                    c(1, 6) = c(1, 3) - c(1, 4)
                    Else
                    If c(2, 12) <> 0 Then
                        c(2, 10) = 0
                        Else
                    c(2, 10) = c(2, 8)
                    End If
                End If
                'Répète le fournisseur
                c(2, -1) = c(1, -1)
                'Répète le modèle
                c(2, -2) = c(1, -2)
                'date rct-po
                c(2, 9) = d(1, 5)
                'date rct-c3d
                c(2, 11) = d(1, 19)
                'date prévue c3d
                c(2, 13) = d(1, 36)
                'Somme des RCT-PO
                Somme& = d(1, 6) + Somme&
                'Somme des réceptions C3D
                Somme1& = c(2, 10) + Somme1&
                'Somme des quantités en transit
                Somme2& = c(2, 12) + Somme2&
                
                Set d = .FindNext(d)
            Loop While Not d Is Nothing And d.Address <> Départ
        End If
  End With
   
'Fait le total de tout (qt dans l'ASN = RCT-PO, Qté réceptionnée C3D, Qté en transit)
c(1, 5) = Somme&
c(1, 6) = Somme1&
c(1, 7) = Somme2&
Set c = c(0, 1)

Loop
 
Re : VBA peut-on réduire le nombre de boucle

Bonsoir Arpette,

J'ai regardé ta portion de macro et je ne pense pas que l'on puisse faire plus efficace. Le souci est que cette macro identifie des plages de cellules discontinues sous lesquelles elle insère une ligne et copie des données dedans. Or, insérer des lignes sur une plage de cellules discontinues, je ne pense pas que qqun sache le faire par VBA de façon globale : tu es obligé de partir d'en bas, de définir les cellules une à une en remontant et d'y inclure les lignes au fur et à mesure... Ça prend du temps et c'est bien ce que fait déjà ta macro.
 
Re : VBA peut-on réduire le nombre de boucle

Bonsoir Softmama, je m'en doutais, mais je pense insérer dans la boucle, une fonction. Ce qui est bien, c'est que la macro fonctionne très bien et traite un nombre d'informations impressionnant, dans un temp très correcte et le résultat est la réalité contrairement à un "bouibi" qui nous coute très cher.
Merci pour toute ton aide sur le sujet et de m'avoir ouvert les yeux avec les fonctions que je connaissais en Excel, mais je ne
pensais pas pouvoir les interpétrer en VB.
@+ et merci encore
 
- 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

Discussions similaires

Réponses
5
Affichages
700
Réponses
4
Affichages
577
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…