XL 2013 VBA erreur d'execution 13 incompatibilité de type

jim7963

XLDnaute Junior
Bonjour à tous,

j'ai un petit soucis avec un code que j'ai écris.
J'ai fais la 1ère version suivante:
VB:
Sub report_donnees()

Application.ScreenUpdating = False

Dim dateRech As Date, Rg As Range, derLi As Long, valeur As Double

Dim nomBVP As Variant, idBVP As Integer
nomBVP = Array("00129114", "02062842", "02148633", "02148641")

Sheets("Données Finales").Select
dateRech = Cells(3, 3).Offset(0, -1)

Sheets("CA").Select
derLi = Columns(1).End(xlDown).Row
valeur = 0

For Each Rg In Range(Cells(2, 1), Cells(derLi, 1))
    If Rg.Value = dateRech Then
        For idBVP = LBound(nomBVP) To UBound(nomBVP)
            If Rg.Offset(0, 1).Value = nomBVP(idBVP) Then
                valeur = valeur + Rg.Offset(0, 2).Value
            End If
        Next
    End If
Next

Sheets("Données Finales").Select
Cells(3, 3).Value = valeur

Application.ScreenUpdating = True

End Sub

Celui-ci fonctionne très bien, aucun soucis.

Maintenant je lui ai apporté quelques modifications pour qu'il applique mon calcul à toutes les lignes qui comprenne une date dans ma cellule. J'ai donc écris:
VB:
Sub report_donnees()

Application.ScreenUpdating = False

Dim dateRech As Date, Rg As Range, Rg2 As Range, derLi As Long, derLi2 As Long, valeur As Double

Dim nomBVP As Variant, idBVP As Integer
nomBVP = Array("00129114", "02062842", "02148633", "02148641")

valeur = 0
Sheets("CA").Select
derLi = Columns(1).End(xlDown).Row

Sheets("Données Finales").Select
derLi2 = Columns(1).End(xlDown).Row

For Each Rg In Range(Cells(3, 3), Cells(derLi2, 3))
    dateRech = Rg.Offset(0, -1)
    For Each Rg2 In Sheets("CA").Range(Cells(2, 1), Cells(derLi, 1))
        If Rg2.Value = dateRech Then
            For idBVP= LBound(nomBVP) To UBound(nomBVP)
                If Rg2.Offset(0, 1).Value = nomBVP(idBVP) Then
                    valeur = valeur + Rg2.Offset(0, 2).Value
                End If
            Next idBVP
        End If
    Next Rg2
    Rg.Value = valeur
    valeur = 0
Next Rg

Application.ScreenUpdating = True

End Sub

Et là le code plante au niveau de la ligne:
dateRech = Rg.Offset(0, -1)
J'ai droit à une erreur d'execution 13 - incompatibilité de type.

Je n'arrive pas à comprendre à quoi cela est dû, si quelqu'un pouvait m'éclairer.

En vous remerciant par avance.
 

job75

XLDnaute Barbatruc
Bonjour jim7963,
Et là le code plante au niveau de la ligne:
dateRech = Rg.Offset(0, -1)
J'ai droit à une erreur d'execution 13 - incompatibilité de type.

Je n'arrive pas à comprendre à quoi cela est dû, si quelqu'un pouvait m'éclairer.
C'est simple : dateRech est déclarée As Date.

Avec dateRech = Rg.Offset(0, -1) il y a forcément bug si Rg.Offset(0, -1) n'est pas une date.

Il faut donc déclarer dateRech Variant (ne rien préciser) et tester la variable avec IsDate(dateRech).

A+
 

jim7963

XLDnaute Junior
Bonjour et merci pour la réponse.

Une bonne nuit ayant passé, j'ai les idées plus claires.
Je m'étais focalisé sur la ligne d'erreur sauf que je n'avais pas vu qu'en fait le problème venait en fait d'une autre ligne:
derLi2 = Columns(1).End(xlDown).Row
En fait la 1ère ligne était vide et donc ma commande calculait mal ma recherche de dernière ligne.
J'ai fais la modif nécessaire et maintenant ça fonctionne.

Encore merci pour tout
 

Discussions similaires

Réponses
1
Affichages
283
Réponses
4
Affichages
451

Statistiques des forums

Discussions
315 098
Messages
2 116 191
Membres
112 679
dernier inscrit
Yupanki