Incompatibilité de type lors de l'utilisation de Datediff

marida

XLDnaute Nouveau
Bonjour,

je souhaite utiliser la fonction datediff sur les cellules visibles après un filtre en VBA mais j'ai une erreur d'incompatibilité de type.
Voir PJ

merci pour votre aide.
 

Pièces jointes

  • Datediff.xlsm
    19.2 KB · Affichages: 72
  • Datediff.xlsm
    19.2 KB · Affichages: 80
  • Datediff.xlsm
    19.2 KB · Affichages: 80

MichD

XLDnaute Impliqué
Re : Incompatibilité de type lors de l'utilisation de Datediff

Bonjour,

J'ai seulement touché à cette section.

En haut de ton module, écris cette expression : Option Explicit

Cela va t'obliger à déclarer chacune des variables de la procédure
et apporter certaines corrections quant à l'orthographe s'il y a lieu.

Au lieu de la variable ligne, je l'ai remplacé par "Cell", elle est plus
"parlante". Il faut la déclarer As Range

VB:
With Worksheets(1)
    DerLig = .Cells.Find(What:="*", _
                    LookIn:=xlFormulas, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlPrevious).Row
    With Range("A1:F" & DerLig)
        .AutoFilter Field:=var2, Operator:= _
            xlFilterValues, Criteria1:="=*Saint Jean*"
    End With
End With
With Worksheets(1)
    With .Range("_FilterDataBase")
        Set maplage = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    End With
End With
For Each Cell In maplage.Columns(3).Cells
    If Cell <> "" And Cell.Offset(, 2) <> "" Then
        s = DateDiff("d", Cell, Cell.Offset(, 2))
        If etat > 0 Then
            Retour = Retour + 1
        End If
    End If
    Worksheets(2).Cells(11, 7).Value = Retour
Next
 
Dernière édition:

marida

XLDnaute Nouveau
Re : Incompatibilité de type lors de l'utilisation de Datediff

Bonjour,

et merci pour ton aide.

cette fois -ci je n'ai pas d'erreur mais je n'obtiens toujours pas de résultat pour la variable Retour;
et je préfère garder les variables var et var1 les colonnes date de début et de fin ne sont pas figés.
lors d'un autre téléchargement ces données peuvent se retrouver dans la colonne 1 par exemple,
t'as pu avoir une valeur pour "Retour" de ton coté?

merci
 

pierrejean

XLDnaute Barbatruc
Re : Incompatibilité de type lors de l'utilisation de Datediff

Bonjour marida

L'erreur venait de la 1ere ligne : debut (evitée par le test sur la date )
Par ailleurs il me semble qu'il faut inverser Var et var1
 

Pièces jointes

  • Datediff.xlsm
    19.4 KB · Affichages: 66
  • Datediff.xlsm
    19.4 KB · Affichages: 69
  • Datediff.xlsm
    19.4 KB · Affichages: 75

marida

XLDnaute Nouveau
Re : Incompatibilité de type lors de l'utilisation de Datediff

Merci MichD : la variable retour s'affichait sur la feuille 2 je n'ai pas fait attention:
Merci PierreJean: Si j'ai bien compris avant de calculer la différence entre la date , la fonction Isdate vérifie d'abord qu'elles sont valides... je n'ai jamais eu ce problème avant. c'est nécessaire de passer par là ou c'est le fait d'avoir utiliser le filtre qui impose cela
 

pierrejean

XLDnaute Barbatruc
Re : Incompatibilité de type lors de l'utilisation de Datediff

Re

La ligne contenant "date de debut" est incluse dans la definition de MaPlage
Pour passer outre ,la seule possiblité que j'aie vue est effectivement de controler que l'on a bien affaire à des dates
Le Filtre n'est donc pour rien dans le bug initial
 

MichD

XLDnaute Impliqué
Re : Incompatibilité de type lors de l'utilisation de Datediff

Cette ligne de code est problématique :

Set MaPlage = Worksheets(1).UsedRange.SpecialCells(xlCellTypeVisible)

Dans toutes les cellules visibles sont incluses les cellules de la ligne de titre.
Lors de la première boucle, tu le fais sur la ligne de titre et comme ce n'est
pas des dates, cela fait planter ta procédure!

Cette façon de faire permet d'exclure la ligne de titre de la plage résultat d'un filtre

_FilterDataBase est le nom (collection Names) que donne Excel à l'ensemble de la
plage filtrée dès qu'un filtre est exécuté. Par conséquent, on peut l'utiliser comme
dans l'exemple suivant :

With Worksheets(1)
With .Range("_FilterDataBase")
Set maplage = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) '<<<<====
End With
End With
 

Discussions similaires

Réponses
16
Affichages
293

Statistiques des forums

Discussions
312 306
Messages
2 087 094
Membres
103 467
dernier inscrit
Pandiska