Faire une boucle sans connaître le nombre de lignes

10test.xlsm (19.93 Ko)

Bonjour à tous,

Je suis face à un problème sur les boucles, j'espère que vous pourrez m'aider (une fois de plus, vous m'aidez à chaque fois )

Je bosse sur un fichier de reporting dont je souhaite automatiser la mise en page et jusque-là tout fonctionne. Mon problème est que dans mon fichier j'ai 2 colonnes (je vous ai seulement mis les 2 colonnes problématiques dans le fichier joint) :

- Date de début d’exécution

- Arrêté (correspond au mois précédent la date de début d'exécution)

Ce que je cherche à faire : en fonction de la date de début d'exécution, il doit m'inscrire le mois d'arrêté correspondant

J'ai réussi à faire la boucle sur un nombre défini de lignes (ici 174), le problème est que mon fichier n'aura pas toujours le même nombre de lignes (le nombre changera chaque semaine), ma question est donc de savoir si c'est possible de créer une boucle comme celle que j'ai faite sans savoir le nombre de ligne à l'avance.

J'avais pensée à ajouter une boucle "Tant que la colonne B est non vide alors la boucle If est lancé" mais je sais pas si c'est possible. J’ai aussi pensé au « Tant que c’est pas vide » + Select case mais je tâtonne donc je sais pas si c’est possible.

Merci à ceux qui pourront me répondre !

Bonjour,

Ci-joint un fichier test en espérant que cela réponde a votre problème

25test.xlsm (21.74 Ko)

J'utilise une formule de ce type pour compter le nombre de cellules non-vides de la colonne B

Range("b1").Select
X = Range("b1", Selection.End(xlDown)).Cells.Count

Bonjour,

Pas besoin de boucle.

Pas besoin de multiplier les tests If.

Une simple formule et un format de cellule suffiront :

Sub MacroTest()
Dim Dl As Long
    With Sheets("Feuil1") '*******************ADAPTER : le nom de la feuille
        Dl = derlig_reelle(.Columns(2))
        .Range("A2:A" & Dl).FormulaR1C1 = "=RC[1]-1"
        .Range("A2:A" & Dl).NumberFormat = "mmmm"
    End With
End Sub
Private Function derlig_reelle(Plage As Range) As Long
   If WorksheetFunction.CountA(Plage) = 0 Then derlig_reelle = Plage.Cells(1, 1).Row: Exit Function
   derlig_reelle = Plage.Find("*", , , , , xlPrevious).Row
End Function

Ahhhh top ca marche, j'ai compris et je pourrai m'en resservir, merci Cognomen !!!

Merci aussi Pijaku, mais j'ai pas compris tout ton code, c'est trop poussé pour moi (je me poserai tranquillement plus tard pour bien comprendre)

Mon code est très simple.

En colonne A, si B = 01/02/2020, tu veux afficher : janvier, si B = 01/03/2020 : février, etc...

En formule Excel, il suffit de retirer 1 à la date saisie en B pour obtenir le dernier jour du mois précédent.

exemple : Si en B2 tu as : 01/02/2020, en A2, la formule "=B2-1" renvoie : 31/01/2020.

En mettant A2 au format personnalisé "mmmm", Excel n'affiche plus que le mois, soit "janvier" dans l'exemple.

Mon code se contente de faire ceci, sur toute la plage "utile" colonne A.

La fonction derlig_reelle(Plage As Range) retourne le numéro de la dernière ligne saisie d'une plage...

Rechercher des sujets similaires à "boucle connaitre nombre lignes"