[VBA] - Boucle for qui s'arrête à la première ligne Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
L
Le Drosophile
Membre dévoué
Membre dévoué
Messages : 565
Appréciations reçues : 3
Inscrit le : 27 juin 2018
Version d'Excel : 2016

Message par Le Drosophile » 20 octobre 2019, 10:42

Bonjour,

J'ai un problème avec mon code, une boucle for s'arrête dès la première ligne.
En utilisant F8, je vois bien le code s'arrête ici :
.Cells(i, 2) = colec(i)

Savez-vous d'où ça peut provenir ?

Voici le code en entier :
SpoilerAfficher
Option Explicit

Dim lf As Worksheet, tf As Worksheet
Dim S As Object
Dim lrtf&, lctf&, i&
Dim cib%, ii&
Dim tabl As Variant
Dim col As New Collection

Sub listingflore()
Set lf = Worksheets("Listing flore")
Set tf = Worksheets("Table flore")

lrtf = tf.Cells(Rows.Count, 1).End(xlUp).Row
lctf = tf.Cells(1, tf.Columns.Count).End(xlToLeft).Column

With tf
    'For cib = 1 To lctf
        'If tf.Cells(1, cib) = "LB_NOM" Then
                tabl = .Range("H2", "I" & lrtf) '(Cells(2, cib), Cells(lrtf, cib + 1))
     '   End If
    'Next cib
        
        'création collection
        On Error Resume Next
            For i = LBound(tabl, 1) To UBound(tabl, 1)
                If tabl(i, 1) > 0 Then
                    col.Add tabl(i, 1) & " " & tabl(i, 2), CStr(tabl(i, 1))
                End If
                'Exit For
            Next i
        On Error GoTo 0
    End With

'export collection dans resultat
If col.Count > 0 Then
    For i = 1 To col.Count
        'For ii = 1 To col.Count
        'Range("A1") = col.Count
        With lf
            .Cells(i, 2) = col(i)
        End With
            'tf.Activate
        'Next ii
    Next i
End If

End Sub
Je joins mon fichier test avec ça.
Sur internet, il est dit de bien vérifier que la boucle ne se poursuive pas dans l'autre feuille, mais ce n'est pas le cas normalement ; et le code s'arrête tout simplement à la ligne citée, rien de plus.

Je vous remercie de votre attention.
A plus tard :)

EDIT : Savez-vous s'il est également possible de faire fonctionner la partie qui variabilise la colonne
EDIT 2 : il faut penser à désactiver le Exit For dans fichier que j'ai transmis
    'For cib = 1 To lctf
        'If tf.Cells(1, cib) = "LB_NOM" Then
                tabl = .Range(Cells(2, cib), Cells(lrtf, cib + 1)) '("H2", "I" & lrtf)
     '   End If
    'Next cib
Quand je m'y prends comme ça, j'ai une erreur.
Text04.xlsm
(30.62 Kio) Téléchargé 4 fois
L
Le Drosophile
Membre dévoué
Membre dévoué
Messages : 565
Appréciations reçues : 3
Inscrit le : 27 juin 2018
Version d'Excel : 2016

Message par Le Drosophile » 20 octobre 2019, 11:39

Bonjour,

J'ai copié-collé le code dans un nouveau sub pour travailler sur une table plus grande ; désormais tout fonctionne... c'est étrange.
A
AlgoPlus
Membre dévoué
Membre dévoué
Messages : 706
Appréciations reçues : 59
Inscrit le : 27 février 2019
Version d'Excel : 2007

Message par AlgoPlus » 20 octobre 2019, 11:51

Bonjour,

dans Private Sub CommandButton1_Click() de l'USF, on trouve ce code:
.../...
            For i = LBound(tabl, 1) To UBound(tabl, 1)
                If tabl(i, 1) > 0 Then
                    col.Add tabl(i, 1) & " " & tabl(i, 2), CStr(tabl(i, 1))
                End If
                Exit For 'contrairement au code présenté dans le post 1 cette ligne n'est pas en commentaire
            Next i
.../...
dès la première itération, on rencontre l'instruction Exit For ; donc la boucle ne va pas plus loin! Et on aura au mieux un seul élément dans la collection. Donc col.count = 1 !


    For i = 1 To col.Count
la boucle va tourner de 1 à ... 1 , donc une seule itération

A+
L
Le Drosophile
Membre dévoué
Membre dévoué
Messages : 565
Appréciations reçues : 3
Inscrit le : 27 juin 2018
Version d'Excel : 2016

Message par Le Drosophile » 20 octobre 2019, 12:03

Bonjour,

Oui, c'est pour ça que je précisais dans mon premier post
EDIT 2 : il faut penser à désactiver le Exit For dans fichier que j'ai transmis
J'avais mis Exit For, pour ne pas avoir à répéter 96 000 fois la boucle (en utilisant F8), j'activais Exit For au bout de quelques lignes et je regardais ce qui se passait ensuite. Et j'ai oublié de l'enlever dans le document que j'ai transmis. L'erreur ne provenait, a priori, pas de cette ligne ; mais elle n'apparaît plus désormais.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message