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

arnaoke

XLDnaute Occasionnel
Bonjour le forum !

Je suis censé faire une fonction qui va parcourir un tableau excel, celui-ci étant composé de + de 2K lignes.

J'ai commencé ceci :
Code:
Private Sub nouvelImport_Click()
Dim ligne As Integer, 
ThisWorkbook.Sheets("Import").Activate
For ligne = 1 To Range("G65536").End(xlUp).Row Step 1
    
Next ligne

MsgBox " ligne " & Range("G65536").End(xlUp).Row

End Sub

cette fonction est donc censé me donner la dernière ligne du tableau, se situant dans les 2000+ .. bah non, puisque Range().end.row me renvoi 61 ...

comment pouije parcourir mon tableau en entier ?
 
Re : Forcer boucle for ?

Bonjour arnaoke:
Une proposition:
VB:
Private Sub nouvelImport_Click()
Dim ligne As Long
With ThisWorkbook.Sheets("Import")
    .Activate
    For ligne = 1 To .Range("G65536").End(xlUp).Row Step 1
        
    Next ligne
    
    MsgBox " ligne " & .Range("G65536").End(xlUp).Row
End With
End Sub
Cordialement
 
Re : Forcer boucle for ?

le point devant les Range me pose un soucis apparemment .... en procédant autrement j'ai testé ceci
qui va me renvoyer la dernière ligne non vide de mon tableau normalement

Code:
Private Sub nouvelImport_Click()
Dim ligne As Long

ThisWorkbook.Sheets("Import").Activate

MsgBox " ligne " & Range("a1").End(xlDown).Row

End Sub

j'ai changé p un xlDown, car a 2K ligne on est plus proche de 1 que de 65536 ^^

par contre il me renvoi 65536, au lieu de la dernière case non vide ... bizarre !
 
Re : Forcer boucle for ?

Bonjour Arnaok, fg

pas tout compris moi, pourquoi une boucle ?
ceci devrait te donner la denière ligne dont la cellule est renseignée dans la colonne G :
Code:
MsgBox Range("G65536").End(xlUp).Row

bonne journée
@+
 
Re : Forcer boucle for ?

Re
Essaye ceci:
VB:
MsgBox " ligne " & ThisWorkbook.Sheets("Import").Range("G65536").End(xlUp).Row
Si non fait le test "à la main" : tu te mets sur la cellule G65536 et Alt + Maj + flèche du haut. Ceci te montrera la cellule trouvée.
Cordialement

EDIT : Bonjour Pierrot
 
Dernière édition:
Re : Forcer boucle for ?

Problème partiellement résolu, en fait c'était tout bete, je n'avais pas spécifié la feuille ou exercé la fonction Range, qui n'était pas celle ou je plaçais le code ...

Maintenant j'en ai un autre ... en mettant ceci
Code:
Private Sub nouvelImport_Click()
Dim ligne As Long, derniereLigne As Integer


ThisWorkbook.Sheets("Import").Activate
For ligne = 1 To Range("a1").End(xlDown).Row Step 1
    MsgBox "ligne " & ligne & " valeur = " & Worksheets("Import").Range("g" & ligne).Value
Next ligne


End Sub

l'ordi me prend toutes les lignes, et pas seulement les non vides ....
 
Dernière édition:
Re : Forcer boucle for ?

Re
Tu devrais utiliser le With / End With.
Comme tu utilise un bouton tes ranges seront toujours sur la feuille qui possède le bouton.
Pour la seconde question:
Une boucle For i = 1 T oX va vérifier toutes les lignes de 1 à X.
Si tu ne veux agir que sur les lignes dont la cellule en colonne G est vide, il faut mettre une condition (If "Ma condition" Then "Mon action" End IF
Exemple:
VB:
Private Sub nouvelImport_Click()
Dim ligne As Long, derniereLigne As Integer
With Sheets("Import")
    .Activate
    For ligne = 1 To .Range("a1").End(xlDown).Row Step 1
        If .Range("g" & ligne).Value = "" Then MsgBox "ligne " & ligne
    Next ligne
End With
End Sub
Cordioalement
 
Re : Forcer boucle for ?

Re
Pour l'utilisation de With / End With:
Au lieu d'écrire:
VB:
Sheets("Import").Activate
For ligne = 1 To Sheets("Import").Range("a1").End(xlDown).Row Step 1
If Sheets("Import").Range("g" & ligne).Value = "" Then MsgBox "ligne " & ligne
Next ligne
On met With Sheets("Import"). Ceci permet de ne pas répéter le nom de la feuille.
Toutes les instructions, ranges et autres qui commencent par un point . seront prises en compte avec le With.
Donc:
VB:
Private Sub nouvelImport_Click()
Dim ligne As Long, derniereLigne As Integer
With Sheets("Import")
    .Activate
    For ligne = 1 To .Range("a1").End(xlDown).Row Step 1
        If .Range("g" & ligne).Value = "" Then MsgBox "ligne " & ligne
    Next ligne
End With
End Sub
Est la même chose (en plus rapide) que:
VB:
Sub deux()
Dim ligne As Long, derniereLigne As Integer
Sheets("Import").Activate
For ligne = 1 To Sheets("Import").Range("a1").End(xlDown).Row Step 1
If Sheets("Import").Range("g" & ligne).Value = "" Then MsgBox "ligne " & ligne
Next ligne
End Sub
Cordialement
 
Re : Forcer boucle for ?

Re,

pas tout compris du résultat à atteindre, mais une autre approche est d'utiliser la méthode "SpecialCells", l'exemple ci-dessous sélectionnera uniquement les cellules contenant une constante dans la plage spécifiée... le "on error" au cas ou aucune cellule ne correspond au critère...
Code:
On Error Resume Next
Range("A1:A30").SpecialCells(xlCellTypeConstants).Select
On Error GoTo 0

@+
 
- 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
10
Affichages
664
Réponses
3
Affichages
332
Réponses
5
Affichages
914
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
3
Affichages
564
Retour