Erreur d’exécution 13

Résolu
Bonjour,
Je suis débutant en VBA, j'ai le code suivant :

For i = 7 To k
If Worksheets(1).Cells(i, 4) >= 1 Then
If Worksheets(1).Cells(i, 7) <> "" Then
If CDate(Worksheets(1).Cells(i, 7)) < CDate(dat_max) Then

n = 0
Do
n = n + 1
D = (Worksheets(1).Cells(i, 7) + Worksheets(1).Cells(i, 4) * n * 365.25 / 12)
num_sem_per = Month(D)
memdate = D

End If
End If
End If
Next i

Par contre j'ai une erreur d'exécution 13 (incompatibilité de type) à la ligne :
D = (Worksheets(1).Cells(i, 7) + Worksheets(1).Cells(i, 4) * n * 365.25 / 12)

Pourriez vous me débloquer svp parce que je ne trouve pas l'erreur ?

NB: les cellules Cells(i, 7) et Cells(i, 4) sont des dates

merci par avance de votre aide

2 réponses

  1. Bonjour Walid :)

    essai avec :

    D = (Worksheets(1).Cells(i, 7).Value + Worksheets(1).Cells(i, 4).Value * n * 365.25 / 12) 
    

    Il faut préciser que tu veux la valeur et non pas la cellule !

    Par contre la prochaine fois encadre ton code avec les balises de code "basics", ce sera plus facile à lire pour nous.

    J'attend ta réponse
    Bien cordialement,
    Hugo
    1. Bonjour Hugo,
      Merci pour ta réponse rapide
      je viens d'essayer de faire ce que tu m'as proposé, mais malheureusement ça marche pas, j'ai toujours la même erreur

      cdt,
    2. Que veux tu faire avec les deux date en faite?
      Je n'avais pas tout lu (shame on me), tu ne peux pas pas ajouter deux dates et ensuite y faire des opérations avec des entiers, du coup coup avec ta réponse je devrais pouvoir te trouver un truc ^^
    3. @HugoHerbomezc'est vrai j'ai pas détaillé
      donc moi je suis au service maintenance et je veux mettre a jour la date dans laquelle je dois lancer la maintenance: alors je fais la date de la derniere maintenace cells (i, 7) + la periodicité cells (i, 4) (en mois)
    4. Déjà ce qui est sûr c'est que tu ne peux pas ajouter deux dates, car les dates n'ont pas de point de départ.
      Je ne vois toujours pas pourquoi il y a deux date. La première, si j'ai bien compris, est ton point de départ (ta dernière maintenance), et l'autre correspond à ta périodicité. Mais quelle est cette périodicité? Et pourquoi ajouter une autre périodicité (n * 365.25 / 12)?
    5. je t'explique par un exemple c'est mieux je pense,
      si par exemple ma dernière intervention de maintenance était le 01/01/2017, il faut que je rajoute la périodicité (12 mois dans mon cas) pour la prochaine maintenance, donc la prochaine intervention ce sera le 01/01/2018
      ce qui concerne (n * 365.25 / 12) c'est pas important, tu te prend pas la tête, j'ai la même erreur même si je l’enlève
      j'espère que ça soit claire pour toi maintenant
      merci
  2. Contributeur
    Bonjour Walid

    tu te casses bien la t^te ! :o)

    petite maquette du principe sur une ligne (2) sur le problème qui te tracasse
    Option Explicit
    '----------------------------------------------------
    Sub ddd()
    Dim decal As Byte, anc As Date, nouv As Date
    With Sheets(1)
    decal = .Cells(2, "D") 'intervalle des controles en mois
    anc = .Cells(2, "G") 'date du dernier controle
    'date prochain controle
    nouv = Application.EDate(anc, decal)
    MsgBox " mois controle: " & Month(nouv) & " ---- date controle: " & nouv
    End With
    End Sub

    Edate est la fonction excel anglophone de mois.decaler

    d'ailleurs, tu pourrais obtenir tout ça sans passer par VBa

     Michel
    1. Merci Michel c'est gentil, Hugo m'a donné la réponse et ça marche très bien

      Merci a vous les gars