Erreur : "Incompatibilité de type"

Bonjour à tous,

Voici plusieurs jours ou je me retrouve avec une erreur "Incompatibilité de type" lorsque j'essaie de lancer une macro, j'ai essayé de voir qu'est ce qu'il n'allait pas en vérifiant le format des cellules etc mais je ne trouve pas l'erreur... Je fais donc appel à vos compétences pour m'aider

Mon critère 1 est du texte en colonne Q et mon critère 2 est des nombres en colonne B

Ci-dessous mon code :

Sub Macro()

Dim ref, crit$, n%, i%, j%

crit = "LIV"

With ThisWorkbook.Sheets("Liste_Incidents(V2)")

n = .Range("Q" & .Rows.Count).End(xlUp).Row

For i = 2 To n

If .Range("Q" & i) = crit Then ref = ref & ";" & .Range("B" & i)

Next i

ref = Split(ref, ";")

Application.ScreenUpdating = False

For i = 2 To n

For j = 1 To UBound(ref)

If .Range("B" & i) = CLng(ref(j)) Then .Range("B" & i).ClearContents: Exit For

Next j

Next i

.Range("B6:B" & n).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End With

End Sub

Par avance merci !!

Bonjour,

peux-tu aussi mettre ton fichier ou un fichier exemple dans lequel tu peux reproduire l'erreur ?

Bonjour,

rien à voir avec ton pb mais j'en anticipe un autre : .SpecialCells génère une erreur si la plage est vide.

On error resume next
... .SpecialCells(...)...
On error goto 0

eric

Bonjour FunckDocta,

Voici ton code VBA modifié, où j'ai aussi inclus la recommandation d'eriiic à propose de .SpecialCells() :

Option Explicit

Sub Macro()
  Dim ref, crit$, n&, i&, j&
  crit = "LIV"
  With ThisWorkbook.Worksheets("Liste_Incidents(V2)")
    n = .Range("Q" & .Rows.Count).End(xlUp).Row
    For i = 2 To n
      If .Range("Q" & i) = crit Then ref = ref & .Range("B" & i) & ";"
    Next i
    ref = Split(ref, ";")
    Application.ScreenUpdating = False
    For i = 2 To n
      For j = 1 To UBound(ref)
        If CLng(.Range("B" & i)) = CLng(ref(j)) Then .Range("B" & i).ClearContents: Exit For
      Next j
    Next i
    On Error Resume Next
    .Range("B6:B" & n).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    On Error GoTo 0
  End With
End Sub

(c'est juste un essai, car sans ton fichier, je n'ai pas testé)

⚠ Vérifie bien les données de ta feuille "Liste_Incidents(V2)" : c'est fort possible que ton erreur d'incompatibilité de type vienne de là plutôt que du code VBA ! ... mais si c'est toi qui est incompatible avec ton code VBA, j'ai aucune solution à proposer !

ou alors peut-être une greffe dans le style Robocop ?

dhany

Merci pour votre aide !!

En effet, je pense que j'ai un petit problème avec VBA mais bon j'essaie quand même de m'en sortir..

J'ai joint un fichier à ce message car j'ai toujours une erreur 13.

Encore merci pour votre aide.

Cordialement

Bonjour,

essaie ceci

Option Explicit
Sub Macro()
    Dim ref, crit$, n&, i&, j&
    'Défini les critères
    crit = "LIV"
    ' Défini le nom du critère
    With ThisWorkbook.Worksheets("Liste_Incidents(V2)")
        ' Choisi l'onglet Liste_Incidents(V2)
        n = .Range("Q" & .Rows.Count).End(xlUp).Row
        ' Défini n en colonne Q
        For i = 2 To n
            If .Range("Q" & i) = crit Then ref = ref & IIf(ref <> "", ";", "") & .Range("B" & i)
        Next i
        ref = Split(ref, ";")
        Application.ScreenUpdating = False
        For i = 2 To n
            For j = 0 To UBound(ref)
                If Val(.Range("B" & i)) = Val(ref(j)) Then .Range("B" & i).ClearContents: Exit For
            Next j
        Next i
        On Error Resume Next
        .Range("B6:B" & n).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        On Error GoTo 0
    End With
End Sub

Oh lala formidable !!

Merci h2so4 la macro fonctionne à merveille !

Pourrais-tu m'éclairer sur l'erreur qui était commise ?

Cordialement,

Bonjour,

voici une nouvelle correction plus adaptée à ton problème.

Option Explicit
Sub Macro()
  Dim ref, crit$, n&, i&, j&
   'Défini les critères
  crit = "LIV"
   ' Défini le nom du critère
  With ThisWorkbook.Worksheets("Liste_Incidents(V2)")
   ' Choisi l'onglet Liste_Incidents(V2)
    n = .Range("Q" & .Rows.Count).End(xlUp).Row
   ' Défini n en colonne Q
    For i = 2 To n
      If .Range("Q" & i) = crit Then ref = ref  & .Range("B" & i) &";"
    Next i
    ref = Split(ref, ";")
    Application.ScreenUpdating = False
    For i = 6 To n
         For j = Lbound(ref) To UBound(ref)-1
                   If CLng(.Range("B" & i)) = CLng(ref(j)) Then .Range("B" & i).ClearContents: Exit For
      Next j
    Next i
    On Error Resume Next
    .Range("B6:B" & n).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    On Error GoTo 0
  End With
End Sub

en ligne 5 tu as du texte, ce qui pose problème à la conversion avec clng(), de même ref(ubound(ref)) dans ton code initial ne contient rien.

de plus dans ton code tu as une boucle pour j allant de 1 à ubound(ref), si tu n'as pas mis option base 1, ref va de 0 à ubound(ref)

voici donc les corrections que j'ai faites

  • commencer la boucle i à la ligne 6 plutôt que 2 pour éviter de convertir la ligne titre.
  • commencer la boucle j à lbound(ref) et la terminer à ubound(ref)-1

Tip top !!

Je te remercie pour tes explications.

Cordialement,

Rechercher des sujets similaires à "erreur incompatibilite type"