MAC - Boucle "For Each" ne fonctionne pas

Bonjour le forum,

Voiçi maintenant 2 jours que galère sur cette macro a cause d'une boucle "For Each" mal construite...

Je suis débutant en vba alors j'ai un peu de mal...

Si quelqu'un a une petite idée du problème...

Voiçi le code en question :

Function factureCCL()
'Fonction qui remplit une plage de cellules l'une après l'autre.

Dim moisActuel As Integer
Dim prixFMC As Double
Dim prixFMC_2 As Double
Dim marge As Double

moisActuel = Worksheets("Bilan").Range("S8").Value 'Format(Now, "mm")

prixFMC = Worksheets("Métrés").Range("M50").Value 'Fonctionne avec feuille "Métrés"

prixFMC_2 = Worksheets("Devis").Range("V6").Value 'Fonctionne avec feuille "Devis"

marge = Worksheets("Métrés").Range("B5").Value

'-------------------------------------- FONCTIONNE AVEC LA FEUILLE "DEVIS" -------------------------------------------

For Each celluleFMC In Worksheets("Devis").Range("C23:C34")

            If celluleFMC.Value = "FMC" Then

                        If Not IsEmpty(Worksheets("Devis").Range("V6")) = True Then

                                                If IsEmpty(Worksheets("Devis").Range("V17")) = True Then

                                                MsgBox "Veuillez renseigner le ""%"" de marge.", vbExclamation, "Attention !"

'---------------------------------------------------- JANVIER ------------------------------------------------------
                                                ElseIf moisActuel = 1 Then

                                                            For Each celluleVide In Worksheets("Bilan").Range("S12:S16")

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC_2

                                                                        Exit For
                                                                        End If
                                                            Next

                                                            For Each celluleVide In Worksheets("Bilan").Range("S23:S27")

                                                                        If IsEmpty(celluleVide) Then

                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next
'----------------------------------------------------- FEVRIER -----------------------------------------------------
                                                ElseIf moisActuel = 2 Then

                                                            For Each celluleVide In Worksheets("Bilan").Range("T12:T16")

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC_2

                                                                        Exit For
                                                                        End If
                                                            Next

                                                            For Each celluleVide In Worksheets("Bilan").Range("T23:T27")

                                                                        If IsEmpty(celluleVide) Then

                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next
'----------------------------------------------------- MARS -------------------------------------------------------
                                                ElseIf moisActuel = 3 Then

                                                            For Each celluleVide In Worksheets("Bilan").Range("U12:U16")

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC_2

                                                                        Exit For
                                                                        End If
                                                            Next

                                                            For Each celluleVide In Worksheets("Bilan").Range("U23:U27")

                                                                        If IsEmpty(celluleVide) Then

                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next
'----------------------------------------------------- AVRIL -------------------------------------------------------
                                                ElseIf moisActuel = 4 Then

                                                            For Each celluleVide In Worksheets("Bilan").Range("V12:V16")

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC_2

                                                                        Exit For
                                                                        End If
                                                            Next

                                                            For Each celluleVide In Worksheets("Bilan").Range("V23:V27")

                                                                        If IsEmpty(celluleVide) Then

                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next
'----------------------------------------------------- MAI --------------------------------------------------------
                                                ElseIf moisActuel = 5 Then

                                                            For Each celluleVide In Worksheets("Bilan").Range("W12:W16")

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC_2

                                                                        Exit For
                                                                        End If
                                                            Next

                                                            For Each celluleVide In Worksheets("Bilan").Range("W23:W27")

                                                                        If IsEmpty(celluleVide) Then

                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next
'----------------------------------------------------- JUIN --------------------------------------------------------
                                                ElseIf moisActuel = 6 Then

                                                            For Each celluleVide In Worksheets("Bilan").Range("X12:X16")

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC_2

                                                                        Exit For
                                                                        End If
                                                            Next

                                                            For Each celluleVide In Worksheets("Bilan").Range("X23:X27")

                                                                        If IsEmpty(celluleVide) Then

                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next
'----------------------------------------------------- JUILLET ------------------------------------------------------
                                                ElseIf moisActuel = 7 Then

                                                            For Each celluleVide In Worksheets("Bilan").Range("Y12:Y16")

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC_2

                                                                        Exit For
                                                                        End If
                                                            Next

                                                            For Each celluleVide In Worksheets("Bilan").Range("Y23:Y27")

                                                                        If IsEmpty(celluleVide) Then

                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next
'----------------------------------------------------- AOUT -------------------------------------------------------
                                                ElseIf moisActuel = 8 Then

                                                            For Each celluleVide In Worksheets("Bilan").Range("Z12:Z16")

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC_2

                                                                        Exit For
                                                                        End If
                                                            Next

                                                            For Each celluleVide In Worksheets("Bilan").Range("Z23:Z27")

                                                                        If IsEmpty(celluleVide) Then

                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next
'------------------------------------------------------- SEPTEMBRE -------------------------------------------------
                                                ElseIf moisActuel = 9 Then

                                                            For Each celluleVide In Worksheets("Bilan").Range("AA12:AA16")

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC_2

                                                                        Exit For
                                                                        End If
                                                            Next

                                                            For Each celluleVide In Worksheets("Bilan").Range("AA23:AA27")

                                                                        If IsEmpty(celluleVide) Then

                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next
'------------------------------------------------------- OCTOBRE --------------------------------------------------
                                                ElseIf moisActuel = 10 Then

                                                            For Each celluleVide In Worksheets("Bilan").Range("AB12:AB16")

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC_2

                                                                        Exit For
                                                                        End If
                                                            Next

                                                            For Each celluleVide In Worksheets("Bilan").Range("AB23:AB27")

                                                                        If IsEmpty(celluleVide) Then

                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next
'------------------------------------------------------- NOVEMBRE -------------------------------------------------
                                                ElseIf moisActuel = 11 Then

                                                            For Each celluleVide In Worksheets("Bilan").Range("AC12:AC16")

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC_2

                                                                        Exit For
                                                                        End If
                                                            Next

                                                            For Each celluleVide In Worksheets("Bilan").Range("AC23:AC27")

                                                                        If IsEmpty(celluleVide) Then

                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next
'-------------------------------------------------------- DECEMBRE ------------------------------------------------
                                                ElseIf moisActuel = 12 Then

                                                            For Each celluleVide In Worksheets("Bilan").Range("AD12:AD16")

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC_2

                                                                        Exit For
                                                                        End If
                                                            Next

                                                            For Each celluleVide In Worksheets("Bilan").Range("AD23:AD27")

                                                                        If IsEmpty(celluleVide) Then

                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next
                                                End If
                                    End If
                        End If
            Exit For
 Next
'-------------------------------------- FONCTIONNE AVEC LA FEUILLE "METRES" ----------------------------------------
'---------------------------------------------------- JANVIER ------------------------------------------------------

For Each celluleFMC In Worksheets("Devis").Range("C23:C34")

            ElseIf celluleFMC.Value = "FMC" Then

                        If IsEmpty(Worksheets("Devis").Range("V6")) = True Then

                                    If moisActuel = 1 Then

                                                For Each celluleVide In Worksheets("Bilan").Range("S12:S16")

                                                                If IsEmpty(celluleVide) Then
                                                                celluleVide.Value = prixFMC

                                                                Exit For
                                                                End If
                                                Next

                                                For Each celluleVide In Worksheets("Bilan").Range("S23:S27")

                                                                If IsEmpty(celluleVide) Then

                                                                                If marge = 0 Then
                                                                                celluleVide.Value = ""

                                                                                Else
                                                                                celluleVide.Value = marge

                                                                                End If
                                                                                Exit For
                                                                End If
                                                Next
'----------------------------------------------------- FEVRIER -----------------------------------------------------
                                    ElseIf moisActuel = 2 Then

                                                For Each celluleVide In Worksheets("Bilan").Range("T12:T16")

                                                            If IsEmpty(celluleVide) Then
                                                            celluleVide.Value = prixFMC

                                                            Exit For
                                                            End If
                                                Next

                                                For Each celluleVide In Worksheets("Bilan").Range("T23:T27")

                                                            If IsEmpty(celluleVide) Then

                                                                        If marge = 0 Then
                                                                        celluleVide.Value = ""

                                                                        Else
                                                                        celluleVide.Value = marge

                                                                        End If
                                                                        Exit For
                                                            End If
                                                Next
'----------------------------------------------------- MARS -------------------------------------------------------
                                    ElseIf moisActuel = 3 Then

                                                For Each celluleVide In Worksheets("Bilan").Range("U12:U16")

                                                            If IsEmpty(celluleVide) Then
                                                            celluleVide.Value = prixFMC

                                                            Exit For
                                                            End If
                                                Next

                                                For Each celluleVide In Worksheets("Bilan").Range("U23:U27")

                                                            If IsEmpty(celluleVide) Then

                                                                        If marge = 0 Then
                                                                        celluleVide.Value = ""

                                                                        Else
                                                                        celluleVide.Value = marge

                                                                        End If
                                                                        Exit For
                                                            End If
                                                Next
'----------------------------------------------------- AVRIL -------------------------------------------------------
                                    ElseIf moisActuel = 4 Then

                                                For Each celluleVide In Worksheets("Bilan").Range("V12:V16")

                                                            If IsEmpty(celluleVide) Then
                                                            celluleVide.Value = prixFMC

                                                            Exit For
                                                            End If
                                                Next

                                                For Each celluleVide In Worksheets("Bilan").Range("V23:V27")

                                                            If IsEmpty(celluleVide) Then

                                                                        If marge = 0 Then
                                                                        celluleVide.Value = ""

                                                                        Else
                                                                        celluleVide.Value = marge

                                                                        End If
                                                                        Exit For
                                                            End If
                                                Next
'----------------------------------------------------- MAI --------------------------------------------------------
                                    ElseIf moisActuel = 5 Then

                                                For Each celluleVide In Worksheets("Bilan").Range("W12:W16")

                                                            If IsEmpty(celluleVide) Then
                                                            celluleVide.Value = prixFMC

                                                            Exit For
                                                            End If
                                                Next

                                                For Each celluleVide In Worksheets("Bilan").Range("W23:W27")

                                                            If IsEmpty(celluleVide) Then

                                                                        If marge = 0 Then
                                                                        celluleVide.Value = ""

                                                                        Else
                                                                        celluleVide.Value = marge

                                                                        End If
                                                                        Exit For
                                                            End If
                                                Next
'----------------------------------------------------- JUIN --------------------------------------------------------
                                    ElseIf moisActuel = 6 Then

                                                For Each celluleVide In Worksheets("Bilan").Range("X12:X16")

                                                            If IsEmpty(celluleVide) Then
                                                            celluleVide.Value = prixFMC

                                                            Exit For
                                                            End If
                                                Next

                                                For Each celluleVide In Worksheets("Bilan").Range("X23:X27")

                                                            If IsEmpty(celluleVide) Then

                                                                        If marge = 0 Then
                                                                        celluleVide.Value = ""

                                                                        Else
                                                                        celluleVide.Value = marge

                                                                        End If
                                                                        Exit For
                                                            End If
                                                Next
'----------------------------------------------------- JUILLET ------------------------------------------------------
                                    ElseIf moisActuel = 7 Then

                                                For Each celluleVide In Worksheets("Bilan").Range("Y12:Y16")

                                                            If IsEmpty(celluleVide) Then
                                                            celluleVide.Value = prixFMC

                                                            Exit For
                                                            End If
                                                Next

                                                For Each celluleVide In Worksheets("Bilan").Range("Y23:Y27")

                                                            If IsEmpty(celluleVide) Then

                                                                        If marge = 0 Then
                                                                        celluleVide.Value = ""

                                                                        Else
                                                                        celluleVide.Value = marge

                                                                        End If
                                                                        Exit For
                                                            End If
                                                Next
'----------------------------------------------------- AOUT -------------------------------------------------------
                                    ElseIf moisActuel = 8 Then

                                                For Each celluleVide In Worksheets("Bilan").Range("Z12:Z16")

                                                            If IsEmpty(celluleVide) Then
                                                            celluleVide.Value = prixFMC

                                                            Exit For
                                                            End If
                                                Next

                                                For Each celluleVide In Worksheets("Bilan").Range("Z23:Z27")

                                                            If IsEmpty(celluleVide) Then

                                                                        If marge = 0 Then
                                                                        celluleVide.Value = ""

                                                                        Else
                                                                        celluleVide.Value = marge

                                                                        End If
                                                                        Exit For
                                                            End If
                                                Next
'------------------------------------------------------- SEPTEMBRE -------------------------------------------------
                                    ElseIf moisActuel = 9 Then

                                                For Each celluleVide In Worksheets("Bilan").Range("AA12:AA16")

                                                            If IsEmpty(celluleVide) Then
                                                            celluleVide.Value = prixFMC

                                                            Exit For
                                                            End If
                                                Next

                                                For Each celluleVide In Worksheets("Bilan").Range("AA23:AA27")

                                                            If IsEmpty(celluleVide) Then

                                                                        If marge = 0 Then
                                                                        celluleVide.Value = ""

                                                                        Else
                                                                        celluleVide.Value = marge

                                                                        End If
                                                                        Exit For
                                                            End If
                                                Next
'------------------------------------------------------- OCTOBRE --------------------------------------------------
                                    ElseIf moisActuel = 10 Then

                                                For Each celluleVide In Worksheets("Bilan").Range("AB12:AB16")

                                                            If IsEmpty(celluleVide) Then
                                                            celluleVide.Value = prixFMC

                                                            Exit For
                                                            End If
                                                Next

                                                For Each celluleVide In Worksheets("Bilan").Range("AB23:AB27")

                                                            If IsEmpty(celluleVide) Then

                                                                        If marge = 0 Then
                                                                        celluleVide.Value = ""

                                                                        Else
                                                                        celluleVide.Value = marge

                                                                        End If
                                                                        Exit For
                                                            End If
                                                Next
'------------------------------------------------------- NOVEMBRE -------------------------------------------------
                                    ElseIf moisActuel = 11 Then

                                                For Each celluleVide In Worksheets("Bilan").Range("AC12:AC16")

                                                            If IsEmpty(celluleVide) Then
                                                            celluleVide.Value = prixFMC

                                                            Exit For
                                                            End If
                                                Next

                                                For Each celluleVide In Worksheets("Bilan").Range("AC23:AC27")

                                                            If IsEmpty(celluleVide) Then

                                                                        If marge = 0 Then
                                                                        celluleVide.Value = ""

                                                                        Else
                                                                        celluleVide.Value = marge

                                                                        End If
                                                                        Exit For
                                                            End If
                                                Next
'-------------------------------------------------------- DECEMBRE ------------------------------------------------
                                    ElseIf moisActuel = 12 Then

                                                For Each celluleVide In Worksheets("Bilan").Range("AD12:AD16")

                                                            If IsEmpty(celluleVide) Then
                                                            celluleVide.Value = prixFMC

                                                            Exit For
                                                            End If
                                                Next

                                                For Each celluleVide In Worksheets("Bilan").Range("AD23:AD27")

                                                            If IsEmpty(celluleVide) Then

                                                                        If marge = 0 Then
                                                                        celluleVide.Value = ""

                                                                        Else
                                                                        celluleVide.Value = marge

                                                                        End If
                                                                        Exit For
                                                            End If
                                                Next
                                    End If
                        End If
            Exit For
            End If
Next

End Function

Bonjour,

1 er conseil:

télécharge et installe ceci (smartindenter) , ça aide à voir clair dans son code VBA :

ensuite...un fichier serait le bienvenu

P.

Bonjour

J'approuve ce que dit patrick1957 surtout pour le fichier

Un petit truc de plus

Une fois ton code terminé, fais un petit débogage (Menu Débogage --> Compiler VBAProject) tu sauras si il existe des erreurs de syntaxe, structure ou autre ....

Pour moi

Utilise une procédure à la place d'une fonction

J'ai essayé de simplifier ton code mais sans fichier pour tester pas sur de mon coup

A tester

Sub factureCCL()
'Fonction qui remplit une plage de cellules l'une après l'autre.
Dim moisActuel As Integer
Dim prixFMC As Double
Dim prixFMC_2 As Double
Dim marge As Double
Dim Colonne As Integer

moisActuel = Worksheets("Bilan").Range("S8").Value     'Format(Now, "mm")
prixFMC = Worksheets("Métrés").Range("M50").Value     'Fonctionne avec feuille "Métrés"
prixFMC_2 = Worksheets("Devis").Range("V6").Value     'Fonctionne avec feuille "Devis"
  marge = Worksheets("Métrés").Range("B5").Value
  '-------------------------------------- FONCTIONNE AVEC LA FEUILLE "DEVIS" -------------------------------------------

  For Each celluleFMC In Worksheets("Devis").Range("C23:C34")
    If celluleFMC.Value = "FMC" Then
      If Not IsEmpty(Worksheets("Devis").Range("V6")) = True Then
        If IsEmpty(Worksheets("Devis").Range("V17")) = True Then
          MsgBox "Veuillez renseigner le ""%"" de marge.", vbExclamation, "Attention !"
          '---------------------------------------------------- JANVIER ------------------------------------------------------
        Else
          Colonne = 18 + moisActuel
          With Sheets("Bilan")
            For Each celluleVide In .Range(.Cells(12, Colonne), .Cells(16, Colonne))    '"S12:S16")
              If IsEmpty(celluleVide) Then
                celluleVide.Value = prixFMC_2
                Exit For
              End If
            Next celluleVide
            For Each celluleVide In .Range(.Cells(23, Colonne), .Cells(27, Colonne))       '"S23:S27")
              If IsEmpty(celluleVide) Then
                If marge = 0 Then
                  celluleVide.Value = ""
                Else
                  celluleVide.Value = marge
                End If
                Exit For
              End If
            Next celluleVide
          End With
        End If
      End If
    End If
    Exit For
  Next celluleFMC
  '-------------------------------------- FONCTIONNE AVEC LA FEUILLE "METRES" ----------------------------------------
  '---------------------------------------------------- JANVIER ------------------------------------------------------
  For Each celluleFMC In Worksheets("Devis").Range("C23:C34")
    If celluleFMC.Value = "FMC" Then
      If IsEmpty(Worksheets("Devis").Range("V6")) = True Then
        Colonne = 18 + moisActuel
        With Sheets("Bilan")
          For Each celluleVide In .Range(.Cells(12, Colonne), .Cells(16, Colonne))    '"S12:S16")
            If IsEmpty(celluleVide) Then
              celluleVide.Value = prixFMC_2
              Exit For
            End If
          Next celluleVide
          For Each celluleVide In .Range(.Cells(23, Colonne), .Cells(27, Colonne))       '"S23:S27")
            If IsEmpty(celluleVide) Then
              If marge = 0 Then
                celluleVide.Value = ""
              Else
                celluleVide.Value = marge
              End If
              Exit For
            End If
          Next celluleVide
        End With
      End If
      Exit For
    End If
  Next celluleFMC
End Sub

Bonjour Banzaïl64,

Je viens de tester ton code et tout FONCTIONNE !!!!!

Encore une fois, un GRAND MERCI à toi !!!

On voit bien la différence entre un débutant comme moi (4 pages de code) et un pro comme toi (1/2 page) ...

Petite question quand même: Qu'est-ce que veux dire cette ligne dans ton code ? "Colonne = 18 + moisActuel"

PS: Merci pour le conseil patrick1957, je vais voir si il existe une version de "Smart Indenter" pour Mac !

Ce forum, toujours au TOP quand on a un problème !

Bonjour

En lisant ton code je me suis aperçu que c'était juste le numéro de colonne qui changeait en fonction du mois, d'où l'idée de faire calculer cette colonne en fonction du mois

Avant c'était

MoisActuel 1 : Colonne S (19ème colonne)

MoisActuel 2 : Colonne T (20ème colonne)

MoisActuel 3 : Colonne U (21ème colonne)

etc ...

C'était facile de trouver le bon numéro de colonne : 18 + MoisActuel

Bonjour Banzaïl64,

Après avoir mis le code que tu a écrit dans ma macro existante, l'exécution de la partie "For Each" ne se fait pas...

Pourrais-tu jeter un coup d'oeil sltp ???

    
ElseIf Range("Y31").Value = 2 Then
            If Range("H1").Value = "Mode Devis" Then
                        MsgBox "Vous êtes en ""Mode Devis"", vous ne pouvez pas enregistrer ""Facture"" en format (.PDF) !" & vbCrLf & vbLf & "Pour pouvoir enregistrer ""Facture"" au format (.PDF), veuillez redémarrer l'application en ""Mode Facture"".", vbExclamation, "Avertissement !"

            ElseIf IsEmpty(Range("F" & 13)) Then
                        MsgBox "Vous n'avez pas rempli le champ ""Objet de Facture"".", vbExclamation, "Attention !"
            '-------------------------- A partir d'içi, on copie le prix de la marchandise sur la feuille "Bilan" ----------------------------

                        '--------------------------------------- Ventes de marchandise -------------------------------------------

            Else
                        For Each celluleFMC In Worksheets("Devis").Range("C23:C34")
                                    If celluleFMC.Value = "FMC" Then
                                                If Not IsEmpty(Worksheets("Devis").Range("V6")) = True Then
                                                            If IsEmpty(Worksheets("Devis").Range("V17")) = True Then
                                                            MsgBox "Veuillez renseigner le ""%"" de marge.", vbExclamation, "Attention !"
                                                            Exit Sub

                                                            Else
                                                            Colonne = 18 + moisActuel

                                                            With Sheets("Bilan")
                                                                        For Each celluleVide In .Range(.Cells(12, Colonne), .Cells(16, Colonne))
                                                                                    If IsEmpty(celluleVide) Then
                                                                                    celluleVide.Value = prixFMC_2 'Prix FMC sur feuille "Devis"

                                                                                    Exit For
                                                                                    End If
                                                                        Next celluleVide
                                                                       '------------------------------------ Marge ------------------------------------

                                                                        For Each celluleVide In .Range(.Cells(23, Colonne), .Cells(27, Colonne))
                                                                                    If IsEmpty(celluleVide) Then
                                                                                                If marge = 0 Then
                                                                                                celluleVide.Value = ""

                                                                                                Else
                                                                                                celluleVide.Value = marge

                                                                                                End If
                                                                                                Exit For
                                                                                    End If
                                                                        Next celluleVide
                                                            End With
                                                            End If
                                                End If
                                    End If
                        Exit For
                        Next celluleFMC
                        '--------------------------------------- Ventes de marchandise 2 -------------------------------------------

                        For Each celluleFMC In Worksheets("Devis").Range("C23:C34")
                                    If celluleFMC.Value = "FMC" Then
                                                If IsEmpty(Worksheets("Devis").Range("V6")) = True Then
                                                Colonne = 18 + moisActuel

                                                With Sheets("Bilan")
                                                            For Each celluleVide In .Range(.Cells(12, Colonne), .Cells(16, Colonne))

                                                                        If IsEmpty(celluleVide) Then
                                                                        celluleVide.Value = prixFMC 'Prix feuille "Métrés"

                                                                        Exit For
                                                                        End If
                                                            Next celluleVide
                                                            '--------------------------------------- Marge ---------------------------------------

                                                            For Each celluleVide In .Range(.Cells(23, Colonne), .Cells(27, Colonne))
                                                                        If IsEmpty(celluleVide) Then
                                                                                    If marge = 0 Then
                                                                                    celluleVide.Value = ""

                                                                                    Else
                                                                                    celluleVide.Value = marge

                                                                                    End If
                                                                                    Exit For
                                                                        End If
                                                            Next celluleVide
                                                End With
                                                End If
                                    Exit For
                                    End If
                        Next celluleFMC
                        '------------------------------------------ Prestations de services -----------------------------------------

                        Sheets("Bilan").Unprotect "CLARISSA"

                        Colonne = 18 + moisActuel

                        With Sheets("Bilan")

                                    For Each celluleVide In .Range(.Cells(32, Colonne), .Cells(36, Colonne))
                                                If IsEmpty(celluleVide) Then
                                                            If totalHT = 0 Then
                                                            celluleVide.Value = ""

                                                            Else
                                                            celluleVide.Value = totalHT

                                                            End If
                                                            Exit For
                                                End If
                                    Next celluleVide

                        End With

                        Sheets("Bilan").Protect "CLARISSA"
                        '--------------------------------A partir de là, on créer un .PDF de "Facture"------------------------------------

                        On Error Resume Next
                        MkDir CheminDossier2 'MkDir Créer le nouveau dossier dans le répertoire...
                        On Error GoTo 0
                        ChDir CheminDossier2

                        TempPDFFolder = "Mac OS X Mountain Lion:Users:iDev4s:Documents:Factures envoyées aux Clients:" & ActiveSheet.[I8] & ":PDFTempFolder:"
                        PDFfolder = "Mac OS X Mountain Lion:Users:iDev4s:Documents:Factures envoyées aux Clients:" & ActiveSheet.[I8] & ":PDFTempFolder"
                        PDFfileName1 = "Facture N°" & ActiveSheet.[F9] & ActiveSheet.[R21] & "_" & ActiveSheet.[I8] '& Format(Now, "dd-mmm-yy h-mm-ss")
                        CheminFichier1 = CheminDossier2 & ":Facture N°" & ActiveSheet.[F9] & ActiveSheet.[R21] & "_" & ActiveSheet.[I8]

                        Application.ScreenUpdating = False
                        Sheets("Facture").Visible = True
                        Worksheets("Facture").Copy

                        KillFileOnMac CheminFichier1 & ".pdf"

                        Call MakePDF(TempPDFFolder, PDFfolder, PDFfileName1, True)

                        ActiveWorkbook.Close SaveChanges:=False

                        KillFileOnMac PDFfolder & PDFfileName1 & ".pdf"

                        Sheets("Facture").Visible = False
                        Application.ScreenUpdating = True
                        '----------------------------A partir de là, on créer un .PDF de "Charge R.S.I"------------------------

                        On Error Resume Next
                        MkDir CheminDossier4 'MkDir Créer le nouveau dossier dans le répertoire...
                        On Error GoTo 0
                        ChDir CheminDossier4

                        TempPDFFolder = "Mac OS X Mountain Lion:Users:iDev4s:Documents:Sauvegardes PDF Clients:Charges R.S.I:" & ActiveSheet.[I8] & ":PDFTempFolder:"
                        PDFfolder = "Mac OS X Mountain Lion:Users:iDev4s:Documents:Sauvegardes PDF Clients:Charges R.S.I:" & ActiveSheet.[I8] & ":PDFTempFolder"
                        PDFfileName1 = "Charges R.S.I N°" & ActiveSheet.[F9] & ActiveSheet.[R21] & "_" & ActiveSheet.[I8] '& Format(Now, "dd-mmm-yy h-mm-ss")
                        CheminFichier1 = CheminDossier4 & ":Charges R.S.I N°" & ActiveSheet.[F9] & ActiveSheet.[R21] & "_" & ActiveSheet.[I8]

                        Application.ScreenUpdating = False
                        Worksheets("Charges R.S.I").Copy

                        KillFileOnMac CheminFichier1 & ".pdf"

                        Call MakePDF(TempPDFFolder, PDFfolder, PDFfileName1, True)

                        ActiveWorkbook.Close SaveChanges:=False

                        KillFileOnMac PDFfolder & PDFfileName1 & ".pdf"

                        Application.ScreenUpdating = True

                        MsgBox "L'enregistrement de ""Facture"" au format (.PDF) est un succès !" & vbCrLf & "Retrouvez-le dans le dossier:" & vbCrLf & vbCrLf & "Mac OS X Mountain Lion -> Utilisateurs -> iDev4s -> Documents -> ""Factures envoyées aux Clients"".", vbInformation, "Confirmation d' Enregistrement"
                        MsgBox "L'enregistrement de ""Charges R.S.I"" au format (.PDF) est un succès !" & vbCrLf & "Retrouvez-le dans le dossier:" & vbCrLf & vbCrLf & "Mac OS X Mountain Lion -> Utilisateurs -> iDev4s -> Documents -> Sauvegardes PDF Clients -> ""Charges R.S.I"".", vbInformation, "Confirmation d' Enregistrement"

                        num = Range("R21").Value
                        num = num + 1
                        Range("R21").Value = num
            End If

Bonjour

Heuu sans fichier pour tester je ne sais pas

Joins le fichier en cause, et tu y indiques quelles sont les opérations à faire pour constater que les boucles For Each ne se font pas

(Cellules devant être modifiées et qui ne le sont pas (Indique les cellules clairement))

A suivre

re,

attention que l'ami iDev est sous Mac

P.

Bonjour Patrick1957,

Oui, effectivement je tourne sur Mac...

L'un de vous deux a t'il un Mac pour pouvoir tester mon fichier ?

Oui j'ai mais sans aucune garantie, je ne travaille jamais en excel dessus, je le trouve mal fichu par rapport à la version windows

P.

Problème RÉSOLU !!!

Le problème venait du fait que sur la macro qu'a ré-écrit Banzaïl64,

les deux principales boucles "For Each" ce terminées par "Exit For" !

Donc, à l'exécution, seulement la première cellule de la plage (C23:C34) était vérifié…

Exemple, si C26 = "FMC" alors sa ne fonctionner pas…

Le Fait de supprimer "Exit For" permet désormais de vérifier la plage entière !!! Et ça marche !!!

Merci quand même à vous deux…

Rechercher des sujets similaires à "mac boucle each fonctionne pas"