[Catégorie modifiée VB6 --> VBA] erreur de type incompatibilité

Cacou78000 Messages postés 2 Date d'inscription vendredi 6 août 2010 Statut Membre Dernière intervention 6 août 2010 - 6 août 2010 à 13:50
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 6 août 2010 à 18:51
Bonjour, j'ai un problème au niveau de mon code et ne sais pas d'ou viens l'erreur de type incompatibilité
voici mon code
' Déclaration des variables
Dim date_deb, date_fin, date_act As Date
Dim charge_total, charge_day As Double

For j = 10 To 126 Step 7
For i = 0 To 5

'Affectation des variables

date_deb = Worksheets("charge_jour").Cells(2, j - 7 - i).Value
date_fin = Worksheets("charge_jour").Cells(2, j - 6 - i).Value
date_act = Worksheets("charge_mois").Cells(1, j).Value
charge_total = Worksheets("charge_jour").Cells(2, j - 4 - i).Value
charge_day = Worksheets("charge_jour").Cells(2, j - 3 - i).Value
Cells(3, j + i).Select
If date_fin = "" Then
ActiveCell.Value = 0
ElseIf date_deb < DateSerial(Year(date_act), Month(date_act), 1) Then
If date_fin < DateSerial(Year(date_act), Month(date_act), 1) Then
ActiveCell.Value = 0
ElseIf (Year(date_fin) Year(date_act)) And (Month(date_fin) Month(date_act)) Then
ActiveCell.Value = DateDiff("d", DateSerial(Year(date_act), Month(date_act), 1), date_fin) * charge_day
Else
ActiveCell.Value = 30 * charge_day
End If

ElseIf (Year(date_deb) Year(date_act)) And (Month(date_deb) Month(date_act)) Then
If (Year(date_fin) Year(date_act)) And (Month(date_fin) Month(date_act)) Then
ActiveCell.Value = charge_total
Else
ActiveCell.Value = DateDiff("d", date_deb, DateSerial(Year(date_act), Month(date_act) + 1, 1) - 1) * charge_day
End If
Else
ActiveCell.Value = 0
End If



Next i
Next j

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 août 2010 à 13:59
Salut et bienvenu.

Quand tu colles du code, pense à utiliser la 3ème icone à droite pour le formatage du code = plus facile à relire.

Sur quelle ligne se produit cette erreur ?
Quel est le contenu des variables utilisées dans cette ligne ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 août 2010 à 14:01
Dim date_deb, date_fin, date_act As Date 
ne signifie pas que chaque variable de la ligne sera de type Date, mais seulement la dernière.
Les premières variables seront de type Variant, type à n'utiliser que dans des conditions bien particulières.

Pendant que tu tu y es, pense à fournir le type des variables utilisée dans la ligne de l'erreur, au cas où on ne la connaitrait pas.
0
Cacou78000 Messages postés 2 Date d'inscription vendredi 6 août 2010 Statut Membre Dernière intervention 6 août 2010
6 août 2010 à 14:51
j'ai trouvé l'erreur, en fait en declarant charge day as variant ca marche!
par contre j'ai une petite question à vous poser:
j'aimerais mettre le j de Cells(1, j) en valeur absolu parcequ'il faudrait par la suite que je fasse un autofill, cela est il possible et comment?
MERCI BEAUCOUP
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 août 2010 à 18:51
Variant est une solution de facilité qui, un jour, te posera problème.
Mieux vaut analyser finement le type de variable a utiliser et jouer en connaissance de cause avec les fonctions de conversions de type, genre CLng, CDate, CStr ...

Valeur absolue ?
C'est à dire transformer -1 en 1, ou 3 en 3 ?
--> Abs

Voir aussi .Offset de l'objet Range pour te déplacer relativement au Range = plus pratique que de jongler avec les adresse absolues.
0
Rejoignez-nous