Déclaration Variable

Bonjour,

J'ai un problème sur la "Sub" suivante . Je dois déclarer la variable mais je n'y arrive pas.

Le message suivant apparait :
---------------------------
Erreur de compilation:

La variable de contrôle For Each doit être de type Variant ou Object

Cette Sub fonctionnait sans problème avant. J'ai juste modifier le tableau Excel.

Sub Archivage_pdf_NDF()

'
' Archivage_pdf_NDF Macro
'---------------------------

Dim Description As String
Description Range("E11:E17")

For Each Description In Sheets("Note_de_frais").Range("E11:E17")
'si cellule vide = Ne rien faire
If Description.Value = "" Then
'si cellule remplie = archiver la ligne
Else
' Ligne_origine = Item.Row ==> reclacul N° lIgne
Ligne = Sheets("Historique_NDF").Range("A2").End(xlDown).Row + 1
' Données à Archiver
Sheets("Historique_NDF").Range("A" & Ligne).Value = Sheets("Note_de_frais").Range("L1:M1").Value 'N° Note de Frais
Sheets("Historique_NDF").Range("B" & Ligne).Value = Sheets("Note_de_frais").Range("C3").Value 'Créateur
Sheets("Historique_NDF").Range("C" & Ligne).Value = Sheets("Note_de_frais").Range("G7:H7").Value 'Date demande NDF
Sheets("Historique_NDF").Range("D" & Ligne).Value = Sheets("Note_de_frais").Range("D3").Value 'Trigrame User
Sheets("Historique_NDF").Range("E" & Ligne).Value = Sheets("Note_de_frais").Range("C5").Value 'Service
Sheets("Historique_NDF").Range("F" & Ligne).Value = Sheets("Note_de_frais").Range("C7").Value 'Période Facturation
Sheets("Historique_NDF").Range("G" & Ligne).Value = Sheets("Note_de_frais").Range("G3:H3").Value 'Valideur
Sheets("Historique_NDF").Range("H" & Ligne).Value = Sheets("Note_de_frais").Range("B11").Value 'Date Frais/Dépenses
Sheets("Historique_NDF").Range("I" & Ligne).Value = Sheets("Note_de_frais").Range("C11").Value 'Motif Frais/Dépenses
Sheets("Historique_NDF").Range("J" & Ligne).Value = Sheets("Note_de_frais").Range("D11").Value 'Lieu depalcement
Sheets("Historique_NDF").Range("K" & Ligne).Value = Sheets("Note_de_frais").Range("E11").Value 'Designation des Frais
Sheets("Historique_NDF").Range("L" & Ligne).Value = Sheets("Note_de_frais").Range("F11").Value 'Montant Frais de transport
Sheets("Historique_NDF").Range("M" & Ligne).Value = Sheets("Note_de_frais").Range("G11").Value 'Nb de Repas
Sheets("Historique_NDF").Range("N" & Ligne).Value = Sheets("Note_de_frais").Range("H11").Value 'Tarif du Repas
Sheets("Historique_NDF").Range("O" & Ligne).Value = Sheets("Note_de_frais").Range("I11").Value 'Kilometrage
Sheets("Historique_NDF").Range("P" & Ligne).Value = Sheets("Note_de_frais").Range("J11").Value 'Montant Idem Kilo
Sheets("Historique_NDF").Range("Q" & Ligne).Value = Sheets("Note_de_frais").Range("K11").Value 'Montant Carburant
Sheets("Historique_NDF").Range("R" & Ligne).Value = Sheets("Note_de_frais").Range("L11").Value 'Montant Divers
Sheets("Historique_NDF").Range("S" & Ligne).Value = Sheets("Note_de_frais").Range("M11").Value 'Total Ligne
Sheets("Historique_NDF").Range("T" & Ligne).Value = Sheets("Note_de_frais").Range("N11").Value 'Compte
Sheets("Historique_NDF").Range("U" & Ligne).Value = Sheets("Note_de_frais").Range("N11").Value 'Signataire de la demande
Sheets("Historique_NDF").Range("V" & Ligne).Value = Sheets("Note_de_frais").Range("N11").Value 'Signataire de la validation (n+1)

End If

Next Description

'Rétinitialisation de la Grille "Note_de_frais"
Sheets("Note_de_frais").Value = NumNDF(Sheets("Note_de_frais").Range("L1").Value, Sheets("Note_de_frais").Range("A2").Value)
Sheets("Note_de_frais").Range("C3:C7").ClearContents
Sheets("Note_de_frais").Range("G3:H7").ClearContents
Sheets("Note_de_frais").Range("M3").ClearContents
Sheets("Note_de_frais").Range("B11:H14").ClearContents
Sheets("Note_de_frais").Range("K11:L14").ClearContents
Sheets("Note_de_frais").Range("C24").ClearContents
Sheets("Note_de_frais").Range("L24").ClearContents

Merci pour votre aide

bonjour popeye56530,

Dim Description As range
Description Range("E11:E17")

Bonjour,

En dehors de la remarque de BsALv, vous aurez aussi un souci avec NumDF à la fin du code... Cela correspond à quoi ?

Sinon je vois aussi ceci à modifier

If Description.Value = "" Then
'si cellule remplie = archiver la ligne
Else

Le Else ne sert à rien. Remplacez par ceci

If Description.Value <> vbnullstring Then 'si cellule est remplie = archiver la ligne

NB : Vous pourriez aussi utiliser le WIth .... end With, pour éviter de répéter Sheets("Historique_NDF") à chaque ligne. Cela allégerait un peu la lecture

si ok pensez à

Cordialement

Merci de la reponse.
J ai créer une fonction afin de calculer un numéro automatique de document.

Re

Ok. Si votre demande est terminée, pensez à

Crdlt

Merci mais j'ai toujours un problème sur mon code. Il bloque sur "ligne = Sheets...".

image

re,

on ne voit pas sur quelle ligne la macro s'arrête, c'est laquelle ?

La macro bloque sur Ligne = Sheets("Historique_NDF").Range("A2").End(xlDown).Row + 1.

J'ai essayé de définir une variable maas il y a un blocage sur la ligne For Each Description In Sheets("Note_de_frais")

La macro bloque sur Ligne = Sheets("Historique_NDF").Range("A2").End(xlDown).Row + 1.

Normal vous n'avez pas déclaré votre variable Ligne....

Votre code comme ceci :

Option Explicit
Sub Archivage_pdf_NDF() ' Archivage_pdf_NDF Macro
Dim Description As Range
Dim ligne As Integer

For Each Description In Sheets("Note_de_frais").Range("E11:E17")

    If Description.Value <> vbNullString Then 'si cellule remplie = archiver la ligne
        With Sheets("Historique_NDF")
            ligne = .Range("A2").End(xlDown).Row + 1 ' Ligne_origine = Item.Row ==> reclacul N° lIgne
        ' Données à Archiver
            .Range("A" & ligne).Value = Sheets("Note_de_frais").Range("L1:M1").Value 'N° Note de Frais
            .Range("B" & ligne).Value = Sheets("Note_de_frais").Range("C3").Value 'Créateur
            .Range("C" & ligne).Value = Sheets("Note_de_frais").Range("G7:H7").Value 'Date demande NDF
            .Range("D" & ligne).Value = Sheets("Note_de_frais").Range("D3").Value 'Trigrame User
            .Range("E" & ligne).Value = Sheets("Note_de_frais").Range("C5").Value 'Service
            .Range("F" & ligne).Value = Sheets("Note_de_frais").Range("C7").Value 'Période Facturation
            .Range("G" & ligne).Value = Sheets("Note_de_frais").Range("G3:H3").Value 'Valideur
            .Range("H" & ligne).Value = Sheets("Note_de_frais").Range("B11").Value 'Date Frais/Dépenses
            .Range("I" & ligne).Value = Sheets("Note_de_frais").Range("C11").Value 'Motif Frais/Dépenses
            .Range("J" & ligne).Value = Sheets("Note_de_frais").Range("D11").Value 'Lieu depalcement
            .Range("K" & ligne).Value = Sheets("Note_de_frais").Range("E11").Value 'Designation des Frais
            .Range("L" & ligne).Value = Sheets("Note_de_frais").Range("F11").Value 'Montant Frais de transport
            .Range("M" & ligne).Value = Sheets("Note_de_frais").Range("G11").Value 'Nb de Repas
            .Range("N" & ligne).Value = Sheets("Note_de_frais").Range("H11").Value 'Tarif du Repas
            .Range("O" & ligne).Value = Sheets("Note_de_frais").Range("I11").Value 'Kilometrage
            .Range("P" & ligne).Value = Sheets("Note_de_frais").Range("J11").Value 'Montant Idem Kilo
            .Range("Q" & ligne).Value = Sheets("Note_de_frais").Range("K11").Value 'Montant Carburant
            .Range("R" & ligne).Value = Sheets("Note_de_frais").Range("L11").Value 'Montant Divers
            .Range("S" & ligne).Value = Sheets("Note_de_frais").Range("M11").Value 'Total Ligne
            .Range("T" & ligne).Value = Sheets("Note_de_frais").Range("N11").Value 'Compte
            .Range("U" & ligne).Value = Sheets("Note_de_frais").Range("N11").Value 'Signataire de la demande
            .Range("V" & ligne).Value = Sheets("Note_de_frais").Range("N11").Value 'Signataire de la validation (n+1)
        End With
    End If
Next Description

'Rétinitialisation de la Grille "Note_de_frais"
With Sheets("Note_de_frais")
    .Value = NumNDF(.Range("L1").Value, .Range("A2").Value)
    .Range("C3:C7").ClearContents
    .Range("G3:H7").ClearContents
    .Range("M3").ClearContents
    .Range("B11:H14").ClearContents
    .Range("K11:L14").ClearContents
    .Range("C24").ClearContents
    .Range("L24").ClearContents
End With
End Sub

Cordialement

Rechercher des sujets similaires à "declaration variable"