[VBA excel] Parcours d'une colonne

Résolu
artoon_42 Messages postés 14 Statut Membre -  
Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis débutant en macro excel et en VBA.
Je souhaiterais créer une macro s'exécutant à l'ouverture du classeur excel.
Je voudrais que cette parcoure la colonne G de G2 à G99. Cette colonne contient des dates. Si le mois de la date (G[i] + le nombre de jours contenue dans L6) est inférieur au mois actuel on supprime le contenue des cellules D[i] et E[i].

Voila où j'en suis.

Private Sub Workbook_Open()

Dim i As Integer
Date = Date

i = 1
Do While (i<99)
i = i + 1

If ( Month(Range("G" & i).Value + Range("L6").Value )< Month(Date) ) Then
Range("E" & i).Value = ""
Range("D" & i).Value = ""
End If
Loop

End Sub

Mais ce code me renvoi des erreurs.
Voyez vous d'où viennent les erreurs ?

Cordialement

11 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    Date est une fonction qui renvoie comme résultat la date du système donc
    D = Date, affectera à la variable D (de type date) la date du système
    Date = Date n'est pas correct
    supprimes déjà cette ligne et ça devrait aller mieux

    il va de soi que
    la colonne G est formatée avec l'un des formats date
    la cellule L6 est au format nombre

    bonne suite
    0
  2. artoon_42 Messages postés 14 Statut Membre
     
    J'ai corrigé mais maintenant il me dit Erreur '13': Incompatibilité de type
    La colonne D est de type date et la colonne E est de type standard.

    Private Sub Workbook_Open()

    Dim i As Integer

    i = 10
    Do While (i < 99)
    i = i + 1

    If (Month(Range("G" & i).Value + Range("L6").Value) < Month(Date)) Then
    Range("E" & i).Clear
    Range("D" & i).Clear
    End If
    Loop

    End Sub
    0
  3. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Pouvez-vous indiquer quel ligne de la procédure est surlignée ?
    0
  4. artoon_42 Messages postés 14 Statut Membre
     
    J'ai modifier de nouveau

    Private Sub Workbook_Open()

    Dim i As Integer

    i = 10
    Do While (i < 99)
    If (Month(DateAdd(d, Range("L6").Value, Range("G" & i).Value)) < Month(Date)) Then
    Range("E" & i).Clear
    Range("D" & i).Clear
    End If
    i = i + 1
    Loop

    End Sub

    J'obtiens le message d'erreur : Erreur d'exécution '5: Argument ou appel de procédure incorrect sur la ligne du SI
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    J'ai testé cette procédure et c'est parfait (déclaration de variable modifier):
    Private Sub Workbook_Open()
    Dim i As Long
    i = 1
    Do While (i < 99)
    i = i + 1
    If (Month(Range("G" & i).Value + Range("L6").Value) < Month(Date)) Then
    Range("E" & i).Clear
    Range("D" & i).Clear
    End If
    Loop
    End Sub
    0
  7. artoon_42 Messages postés 14 Statut Membre
     
    D'accord merci mais je vient de me rendre compte qu'il ne faut pas seulement que je compare les mois mais aussi les années pour éviter les problème

    Private Sub Workbook_Open()
    Dim i As Long
    i = 10
    Do While (i < 99)

    If (DateSerial(Year(DateAdd(d, Range("L6").Value, Range("G" & i).Value)), Month(DateAdd(d, Range("L6").Value, Range("G" & i).Value)), 1) < DateSerial(Year(Date), Month(Date), 1)) Then

    Range("E" & i).Clear
    Range("D" & i).Clear
    End If
    i = i + 1
    Loop
    End Sub

    Je reforme donc mes dates
    mais la ligne du si me renvoi Erreur d'exécution '5: Argument ou appel de procédure incorrect .
    0
  8. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Eh bien qu'elle est exactement le critère de contrôle ?
    Cela ne sert à rien de modifier la condition [If] sans avoir le critère exact.
    0
  9. artoon_42 Messages postés 14 Statut Membre
     
    Désolé,

    Le critère de contrôle est la comparaison sur le mois et l'année entre la date courante et la date contenue dans une cellule de la colonne G à laquelle j'ajoute le contenue de la cellule L6 ; cette dernière doit être inférieur à la date courante pour entré dans le si.
    0
  10. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Pour ce soir c'est la dernière.
    Cette procédure :
    Private Sub Workbook_Open()
    Dim i As Long
    Dim critdate As Date
    critdate = DateSerial(Year(Date), Month(Date), 1)
    i = 1
    Do While (i < 99)
    i = i + 1
    If (Range("G" & i).Value + Range("L6").Value) > critdate Then
    Range("E" & i).Clear
    Range("D" & i).Clear
    End If
    Loop
    End Sub
    --
    Salutations.
    Le Pingou
    0
  11. artoon_42 Messages postés 14 Statut Membre
     
    Merci beaucoup de votre aide.
    0
  12. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci, vous aurez certainement remarqué que dans la condition j'ai inversé le symbole [>] au lieu de [<].
    Salutations.
    Le Pingou
    0