Mon code tourne a l'infini et se plante

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

JessK

XLDnaute Nouveau
Bonjour à tous,

Je suis en train d'écrire un code pour insérer des données d'un fichier "référence" à mon fichier de données, si le texte dans une des cellules est égal a celles d'une cellule dans le fichier "référence". Si je lance le code, il commence à tourner et il tourne à l'infinie. Si j'enlève cette boucle de code, le code marche, donc c'est bien ce morceau de code qui pose problème.
Voici mon code (je l'ai adapté d'un autre code qui fonctionne très bien, mais c'était une recherche par rapport a des intitulés egales). Les variables sont définies plus haut. Je me demande s'il plante car c'est trop long a faire? (pour l'instant pour un fichier données de 170 lignes et un fichier référence de 32 lignes).

Merci de vos suggestions 🙂

VB:
For i = 2 To lstrw 'les lignes du ws

    j = 2 'les lignes du ws_ref

    Do While j <= row_count

        If ws.Cells(i, 1) = ws_ref.Cells(j, 16).Text Then
        
            ws.Cells(i, 4) = ws_ref.Cells(j, 15)
            ws.Cells(i, 5) = ws_ref.Cells(j, 22)
            ws.Cells(i, 6) = ws_ref.Cells(j, 25)
            ws.Cells(i, 7) = ws_ref.Cells(j, 4)
            ws.Cells(i, 8) = ws_ref.Cells(j, 5)
            ws.Cells(i, 9) = ws_ref.Cells(j, 6)
            ws.Cells(i, 10) = ws_ref.Cells(j, 12)
            ws.Cells(i, 12) = ws_ref.Cells(j, 13)
            ws.Cells(i, 13) = ws_ref.Cells(j, 7)
            ws.Cells(i, 14) = ws_ref.Cells(j, 8)
            ws.Cells(i, 15) = ws_ref.Cells(j, 9)
            ws.Cells(i, 16) = ws_ref.Cells(j, 10)
            ws.Cells(i, 17) = ws_ref.Cells(j, 11)
            j = line_count
            
        End If
        
    j = j + 1
    
    Loop
    
    Next i
 
Bonjour.
Votre variable line_count n'étant pas recalculée, j a toujours la même valeur et est donc toujours <= row_count s'il l'est au départ
remarque: vous auriez intérêt à travailler avec deux tableaux dynamique, ce serait beaucoup plus rapide.
 
Je l'aurais sans doute écrit à peu près comme ça :
VB:
Sub Test()
   Dim WshSrc As Worksheet, WshCbl As Worksheet, TSrc(), RngCbl As Range, _
      TCbl(), LCbl As Long, LSrc As Long, C As Integer
   Set WshSrc = Worksheets(1)
   Set WshCbl = Worksheets(2)
   TSrc = WshSrc.[A2].Resize(WshSrc.[A1000000].End(xlUp).Row - 1, 25).Value
   Set RngCbl = WshCbl.[A2].Resize(WshCbl.[A1000000].End(xlUp).Row - 1, 17)
   TCbl = RngCbl.Value
   For LCbl = 1 To UBound(TCbl, 1)
      For LSrc = 1 To UBound(TSrc, 1)
         If TSrc(LSrc, 16) = TCbl(LCbl, 1) Then Exit For
         Next LSrc
      If LSrc <= UBound(TSrc, 1) Then
         For C = 4 To 17
            TCbl(LCbl, C) = TSrc(LSrc, Choose(C - 3, 15, 22, 25, 4, 5, 6, 12, 13, 7, 8, 9, 10, 11))
            Next C
         End If
      Next LCbl
   RngCbl.Value = TCbl
   End Sub
À tester
 
- 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

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
649
Réponses
3
Affichages
582
Réponses
3
Affichages
951
Réponses
1
Affichages
685
Réponses
3
Affichages
668
Retour