La boucle ne se fait pas

Bonjour tout le monde. Dans le but d'automatiser ou semi-automatiser beaucoup de tâches professionnelles à divers postes de mon travail, j'ai entrepris de me former de manière autodidacte (pas de formations possibles...) au code VBA, puisque nous travaillons beaucoup avec des documents Excel (gestion des stocks, gestions comptables, extraction de logiciels de GEF, ...). Voici un premier sub, lequel est lancé depuis un fichier pattern, récupère les info d'un autre fichier, et les place dans un tableau modèle. Le code est le suivant, donc :

Sub Facture_CDS_Pasteur()

Application.DisplayAlerts = False ' n'affichera pas les messages d'alertes et d'invit
Application.ScreenUpdating = False ' n'affichera pas les maj successives de la procédure à l'écran, donc l'exécution sera plus rapide
Application.Calculation = xlCalculationManual ' le calcul est effectué sur demande de l'utilisateur, et non automatiquement si changement (de données, formules, ...)

Workbooks.Open "C:\Users\pha33\Downloads\2022_Facture_CDS_Pasteur.xlsx"

'pour simplifier la navigation, on copie et colle le feuillet du doc BI4 dans un feuillet de la facture

Dim cln As Worksheet, colonne As Worksheet, clnn As New Worksheet

Set cln = Workbooks("2022_Facture_CDS_Pasteur.xlsx").Sheets(1)
Set colonne = Workbooks("lancement macro CDS PASTEUR - Mmmm yy.xlsm").Sheets(1)
Set clnn = Workbooks("lancement macro CDS PASTEUR - Mmmm yy.xlsm").Sheets(2)

cln.Columns("F:F").Select
Selection.NumberFormat = "0.00%"
Selection.Columns.AutoFit

cln.Copy Before:=Workbooks("lancement macro CDS PASTEUR - Mmmm yy.xlsm").Sheets(2)
Workbooks("2022_Facture_CDS_Pasteur.xlsx").Close Savechanges:=True

'renomme le premier onglet

colonne.Select
colonne.Name = Format(Now, "dd-mm-yyyy")

' remplir la facture

Dim lgn As Integer, ligne As Integer, deux As Integer, cinq As Integer, dix As Integer, vingt As Integer

lgn = 5
ligne = 20

'deux = clnn.Application.WorksheetFunction.CountIf(Columns("F:F"), "2.10%")
'cinq = clnn.Application.WorksheetFunction.CountIf(Columns("F:F"), "5.50%")
'dix = clnn.Application.WorksheetFunction.CountIf(Columns("F:F"), "10%")
'vingt = clnn.Application.WorksheetFunction.CountIf(Columns("F:F"), "20%")

Do While clnn.Cells(lgn, 6).Value = "0.021"

    If colonne.Range("A" & ligne).MergeArea = "" Then

        colonne.Cells(ligne, "1:4") = clnn.Cells(lgn, 1).Value
        colonne.Cells(ligne, 5) = clnn.Cells(lgn, 4).Value
        colonne.Cells(ligne, 6) = clnn.Cells(lgn, 5).Value

    ElseIf colonne.Range("A" & ligne).MergeArea <> "" Then

        colonne.Rows(ligne).EntireRow.Select
        Selection.Copy
        Selection.Insert Shift:=xlDown
        colonne.Cells(ligne, "1:4") = clnn.Cells(lgn, 1).Value
        colonne.Cells(ligne, 5) = clnn.Cells(lgn, 4).Value
        colonne.Cells(ligne, 6) = clnn.Cells(lgn, 5).Value

    End If

    lgn = lgn + 1
    ligne = ligne + 1

Loop

End Sub

Mon problème est que la tableau ne se rempli pas ; il devait prendre les valeurs à un endroit précis (cellules A5, D5, E5) selon une condition (tva = 2.1%), et les mettre dans le tableau voulu selon condition ( si cellule vide, alors ok, sinon création d'une ligne identique juste au-dessus et on rempli).

J'ai fait des tests msgbox (clnn.cells(5,6).value)), et la fenêtre n'affiche aucune valeur, tandis qu'elle devrait afficher 2.1% ou 0.021. Idem pour cln. Ceci soutendrait donc que ma déclaration range clnn ou cln n'est pas bonne, d'où la non réaction du sub ?

Voici le tableau pattern, pour que vous compreniez où et comment le remplissage doit se faire. J'espère avoir été assez complet et compréhensible. Pouvez-vous m'y aider svp ?

Bonjour

Au lieu de

Do While clnn.Cells(lgn, 6).Value = "0.021"

tester (avec cln, pas clnn) et col 8 au lieu de 6 et la valeur sans la partie entière et une virgule

Do While Format(cln.Cells(20, 8).Value, "#.###") = ",021"

Re! Merci pour votre prompt retour. En effet, le fait de passer par l'application "format" passe bien ! Un fois ceci corrigé, la boucle s'est mise à opérer, mais des messages d'erreur sont apparus pour las applications .MergeArea et Cells(ligne, "1:4"). Comment déclare-t'on une application MergeArea du coup ? Si on souhaite déclarer uns cellule résultant d'une fusion, comment la déclarer dans un objet range ou cells ?

Sinon, quand les cellules sont vides, elles se remplissent convenablement, mais si la cellule devant récupérer les valeurs est pleine, l'insert de la ligne ne s'effectue pas et la boucle s'arrête. Auriez-vous une explication ?

C'est bon, j'ai trouvé la faille!

Le fichier qui servait de "donneur de valeurs", des cellules fusionnées existaient!!!!! Ainsi, dès que la boucle tombait sur la première ligne fusionnée, cela s'arrêtait, car considérée comme vide je suppose... Aaaaah, ces requêteurs!!!!!!!

Il a donc fallut qu'après le copier-coller du feuillet voulu, je sélectionne le tout, unmerge et suppressions de lignes vides. C'est fait donc, merci beaucoup ^^

Rechercher des sujets similaires à "boucle fait pas"