Microsoft 365 vba erreur 13 incompatibilité de type

Mwadepaname

XLDnaute Junior
Bonjour le forum,

je cherche à extraire le nombre de mail envoyé de la part de xxx au mois M suite extraction sur excel.

lorsque je fais un test avec quelques lignes tout fonctionne mais une fois que j'extrais les mails j'ai une erreur 13 incompatibilité de type sur les lignes
data1 = Sheets("data").Range("A2")
data2 = Sheets("data").Range("A3")

(A savoir l'extraction comportera beaucoup de lignes.)

J'ai modifié les variables data1 et 2 en string au lieu de long et l'erreur revient mais cette fois sur la ligne
If cel.Value = data1 And cel.Offset(1, 0).Value Like data2 Then

Si quelqu'un sait d'où cela provient?

Merci beaucoup.
Fichier ci-joint

et voici le code

Sub compter_mail()
Application.ScreenUpdating = False

Dim cel As Range, plage As Range, data1 As Long, data2 As Long
Dim nb As Integer, i As Integer, j As Integer

data1 = Sheets("data").Range("A2")
data2 = Sheets("data").Range("A3")
nb = 0
Set plage = Sheets("test mail").Range("a1:a" & Sheets("test mail").Range("A" & Rows.count).End(xlUp).Row)

For Each cel In plage
If cel.Value = data1 And cel.Offset(1, 0).Value Like data2 Then
nb = nb + 1
End If

Next cel
MsgBox (nb)

End Sub
 

Pièces jointes

  • test compteur mail.xlsm
    28.3 KB · Affichages: 14
Solution
Bonjour mwadepaname, le forum

Chez moi ce code fonctionne correctement :
VB:
Option Explicit

Sub compter_mail()
Application.ScreenUpdating = False

Dim cel As Range, plage As Range, Data1 As String, Data2 As String
Dim nb As Integer ', i As Integer, j As Integer

Data1 = Sheets("data").Range("A2")
Data2 = Sheets("data").Range("A3")

nb = 0
Set plage = Sheets("test mail").Range("a1:a" & Sheets("test mail").Range("A" & Rows.Count).End(xlUp).Row)

For Each cel In plage
    If cel.Value = Data1 And cel.Offset(1, 0).Value Like Data2 Then
        nb = nb + 1
    End If
Next cel

Data1 = Right(Data1, Len(Data1) - 5)
Data2 = Right(Data2, Len(Data2) - 1)
Data2 = Left(Data2, Len(Data2) - 1)

MsgBox Data1 & " a envoyé " & (nb) & " mails."...

Phil69970

XLDnaute Barbatruc
Bonjour mwadepaname, le forum

Chez moi ce code fonctionne correctement :
VB:
Option Explicit

Sub compter_mail()
Application.ScreenUpdating = False

Dim cel As Range, plage As Range, Data1 As String, Data2 As String
Dim nb As Integer ', i As Integer, j As Integer

Data1 = Sheets("data").Range("A2")
Data2 = Sheets("data").Range("A3")

nb = 0
Set plage = Sheets("test mail").Range("a1:a" & Sheets("test mail").Range("A" & Rows.Count).End(xlUp).Row)

For Each cel In plage
    If cel.Value = Data1 And cel.Offset(1, 0).Value Like Data2 Then
        nb = nb + 1
    End If
Next cel

Data1 = Right(Data1, Len(Data1) - 5)
Data2 = Right(Data2, Len(Data2) - 1)
Data2 = Left(Data2, Len(Data2) - 1)

MsgBox Data1 & " a envoyé " & (nb) & " mails."
Sheets("test mail").[I2] = nb
Sheets("test mail").[I4] = Data1 & " a envoyé " & (nb) & " mails en " & Data2
End Sub
Précision :
Les valeurs que tu souhaites récupérer en I2 et I4 de la feuille "test mail" ce fait en vba.
@Phil69970
 
Dernière édition:

Mwadepaname

XLDnaute Junior
Bonjour mwadepaname, le forum

Chez moi ce code fonctionne correctement :
VB:
Option Explicit

Sub compter_mail()
Application.ScreenUpdating = False

Dim cel As Range, plage As Range, Data1 As String, Data2 As String
Dim nb As Integer ', i As Integer, j As Integer

Data1 = Sheets("data").Range("A2")
Data2 = Sheets("data").Range("A3")

nb = 0
Set plage = Sheets("test mail").Range("a1:a" & Sheets("test mail").Range("A" & Rows.Count).End(xlUp).Row)

For Each cel In plage
    If cel.Value = Data1 And cel.Offset(1, 0).Value Like Data2 Then
        nb = nb + 1
    End If
Next cel

Data1 = Right(Data1, Len(Data1) - 5)
Data2 = Right(Data2, Len(Data2) - 1)

MsgBox Data1 & " a envoyé " & (nb) & " mails."
Sheets("test mail").[I2] = nb
Sheets("test mail").[I4] = Data1 & " a envoyé " & (nb) & " mails en " & Data2
End Sub
Précision :
Les valeurs que tu souhaites récupérer en I2 et I4 de la feuille "test mail" ce fait en vba.
@Phil69970

Merci @Phil69970
Je ne connaissais pas la fonction len
Je vais regarder ça de plus près.
ça fonctionne si j'ai peu de données mais dès que j'extrais j'ai le même message d'erreur.
J'ai plus de 30000 lignes
 
Dernière édition:

Mwadepaname

XLDnaute Junior
mwadepaname, le forum

J'ai legerement modifié le code du post 2

Data1 = Right(Data1, Len(Data1) - 5)
Data2 = Right(Data2, Len(Data2) - 1)
Data2 = Left(Data2, Len(Data2) - 1)


Si la solution te satisfait passe la en résolu.

Pour clôturer une demande :
https://www.excel-downloads.com/threads/prefixe-resolu-et-marquer-comme-solution.20029836/

@Phil69970
J'avais répondu trop vite désolé. J'ai testé avec l'extraction des mails et ça me fait la même chose.
erreur 13 incompatibilité de type
 

Mwadepaname

XLDnaute Junior
ça fonctionne jusqu'à la ligne 26500 avec mon extraction. J'essaie de supprimer les données confidentiel mais trop de ligne :( je viens de mettre des lignes bidons jusqu'à 40000 et ça fonctionne. Je n'y comprends plus rien.
J'ai testé avec d'autres extracts. Le résultat est le même erreur 13
 
Dernière édition:

Mwadepaname

XLDnaute Junior
j'ai supprimé pleins de lignes mais au moins on voit toujours l'erreur. Ca pourra peut être aider à localiser le problème
Pourtant cela fonctionne bien avec le fichier que tu as donné .
Donne le bon fichier avec des noms bidons et une 100 de lignes

@Phil69970
J'ai supprimé pleins de lignes et le problème reste donc ça pourra peut être servir à localiser le problème.
 

Pièces jointes

  • test compteur mail 2.xlsm
    40.7 KB · Affichages: 3

Phil69970

XLDnaute Barbatruc
mwadepaname, le forum

C'est ces 2 lignes qui font buggés la macro
Ligne 95573 et 95583

1602516409177.png


Si tu veux les repérer

For Each cel In plage
'Repere la ligne juste au dessus de l'erreur
Dim NumLigneErreur As Long
NumLigneErreur = NumLigneErreur + 1


If cel.Value = Data1 And cel.Offset(1, 0).Value Like Data2 Then
nb = nb + 1
End If

Next cel

@Phil69970
 

Mwadepaname

XLDnaute Junior
mwadepaname, le forum

C'est ces 2 lignes qui font buggés la macro
Ligne 95573 et 95583

Regarde la pièce jointe 1081290

Si tu veux les repérer

For Each cel In plage
'Repere la ligne juste au dessus de l'erreur
Dim NumLigneErreur As Long
NumLigneErreur = NumLigneErreur + 1


If cel.Value = Data1 And cel.Offset(1, 0).Value Like Data2 Then
nb = nb + 1
End If

Next cel

@Phil69970

Bravo !!! j'aurais jamais trouvé.

Par contre j'ai essayé le code pour trouver les erreurs, ça ne fonctionne pas, je dois mal m'y prendre.
Pour info je suis novice en vba :(

Au pire, je recherche via formules, vérifications des erreurs.

Merci en tout cas !!! ;)
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
mwadepaname

Par contre j'ai essayé le code pour trouver les erreurs, ça ne fonctionne pas, je dois mal m'y prendre.
Pour info je suis novice en vba :(

En fait quand tu rajoutes les 3 lignes
'Repere la ligne juste au dessus de l'erreur
Dim NumLigneErreur As Long
NumLigneErreur = NumLigneErreur + 1
Quand ta macro plante tu passes ta souris sur le code ==> NumLigneErreur et tu dois voir le numero de la ligne située juste au dessus de l'erreur.
Il te resteras à aller à la ligne en question pour voir l'erreur...juste en dessous.

@Phil69970
 

Discussions similaires

Réponses
1
Affichages
282
Réponses
2
Affichages
321

Statistiques des forums

Discussions
315 096
Messages
2 116 184
Membres
112 679
dernier inscrit
Yupanki