Mon code tourne a l'infini et se plante

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
 

Dranreb

XLDnaute Barbatruc
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.
 

Dranreb

XLDnaute Barbatruc
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
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 227
Membres
103 159
dernier inscrit
FBallea