Erreur d’exécution 13

Résolu
Walid -  
HugoHerbomez Messages postés 59 Statut Membre -
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. HugoHerbomez Messages postés 59 Statut Membre 2
     
    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
    0
    1. Walid
       
      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,
      0
    2. HugoHerbomez Messages postés 59 Statut Membre 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 ^^
      0
    3. Walid > HugoHerbomez Messages postés 59 Statut Membre
       
      c'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)
      0
    4. HugoHerbomez Messages postés 59 Statut Membre 2
       
      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)?
      0
    5. Walid
       
      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
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    0
    1. Walid
       
      Merci Michel c'est gentil, Hugo m'a donné la réponse et ça marche très bien


      Merci a vous les gars
      0