Erreur d’exécution 13

Résolu/Fermé
Walid - 20 févr. 2017 à 13:14
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 - 24 févr. 2017 à 08:48
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





A voir également:

2 réponses

HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
Modifié par HugoHerbomez le 20/02/2017 à 13:24
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
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
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
Modifié par HugoHerbomez le 20/02/2017 à 13:35
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
Walid > HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017
20 févr. 2017 à 13:44
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
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
20 févr. 2017 à 14:01
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
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 21/02/2017 à 10:27
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
Merci Michel c'est gentil, Hugo m'a donné la réponse et ça marche très bien


Merci a vous les gars
0