Erreur de type 13.. Encore

Bonjour

Encore une erreur qui me dépasse.

En completant ma macro, j'obtiens erreur de typer 13

Sub Alerte()

'

' Alerte Macro

'

Dim w1 As Worksheet

Dim I As Long

Dim D As Date

Dim J As Integer

Dim Listebus As String

Dim Listecmu As String

Dim Listefinatjm As String

Dim Listetravail As String

Dim Listeregularisation As String

Dim Rep As Integer

Set w1 = Worksheets("Effectif") 'Feuille qui contient les alertes

D = Date

' ********************************* fin de BUS

For I = 3 To w1.Range("AF" & Rows.Count).End(xlUp).Row

Select Case w1.Cells(I, "AF").Value

Case "Néant"

'ici le code prévu à cet effet ou rien

Case Else

ladate = w1.Range("AF" & I)

If ladate <> "" Then

p = D - ladate

If p >= 0 Then Listebus = Listebus & vbLf & "L'abonnement de bus pour " & Cells(I, "C").Value & " a expiré depuis le " & Cells(I, "AF")

End If

End Select

Next I

' ********************************* fin de CMU

For I = 3 To w1.Range("AB" & Rows.Count).End(xlUp).Row

ladate = w1.Range("AB" & I)

If ladate <> "" Then

p = D - ladate

If p >= 0 Then Listecmu = Listecmu & vbLf & "La CMU pour " & Cells(I, "C").Value & " est expirée depuis le " & Cells(I, "AB")

If p > -30 And p < 0 Then Listecmu = Liste & vbLf & "La CMU pour " & Cells(I, "C").Value & " expirera le " & Cells(I, "AB").Value

End If

Next I

' ********************************* fin d'ATJM

For I = 3 To w1.Range("V" & Rows.Count).End(xlUp).Row

ladate = w1.Range("V" & I)

If ladate <> "" Then

p = D - ladate

If p >= 0 Then Listefinatjm = Listefinatjm & vbLf & "L'ATJM pour " & Cells(I, "C").Value & " est expirée depuis le " & Cells(I, "V").Value

If p > -60 And p < 0 Then Listefinatjm = Listefinatjm & vbLf & "L'ATJM pour " & Cells(I, "C").Value & " expirera le " & Cells(I, "V").Value

End If

Next I

' ********************************* Régularisation

For I = 3 To w1.Range("L" & Rows.Count).End(xlUp).Row

ladate = w1.Range("L" & I)

If Cells(I, 27).Value <> "" Then

If ladate <> "" Then

p = D - ladate <= ICI

If p >= 0 Then Listeregularisation = Listeregularisation & vbLf & "La demande de titre de séjour pour " & Cells(I, "C").Value & " devrait être envoyée depuis depuis le " & Cells(I, "V").Value

If p > -60 And p < 0 Then Listeregularisation = Listeregularisation & vbLf & "La demande de titre de séjour pour " & Cells(I, "C").Value & " devra être envoyée avant le " & Cells(I, "V").Value

End If

End If

Next I

' ********************************* Fin d'autorisation de travail

For I = 3 To w1.Range("AU" & Rows.Count).End(xlUp).Row

ladate = w1.Range("AU" & I)

If ladate <> "" Then

p = D - ladate

If p >= 0 Then Listetravail = Listetravail & vbLf & "L'autorisation de travail pour " & Cells(I, "C").Value & " est expirée depuis le " & Cells(I, "AU").Value

If p > -60 And p < 0 Then Listravail = Listetravail & vbLf & "L'autorisation de travail pour " & Cells(I, "C").Value & " expirera le " & Cells(I, "AU").Value

End If

Next I

Rep = MsgBox(Listecmu, vbExclamation + vbOKCancel, "Mise à jour des CMU demandée")

If Rep = vbCancel Then Exit Sub

Rep = MsgBox(Listebus, vbExclamation + vbOKCancel, "Abonnements de bus périmés")

If Rep = vbCancel Then Exit Sub

Rep = MsgBox(Listefinatjm, vbExclamation + vbOKCancel, "ATJM à renouveler")

If Rep = vbCancel Then Exit Sub

Rep = MsgBox(Listeregularisation, vbExclamation + vbOKCancel, "Demande titre de séjour à faire")

Rep = MsgBox(Listetravail, vbExclamation + vbOKCancel, "Autorisations de travail à renouveler")

If Rep = vbCancel Then Exit Sub

'

End Sub

Je présume que cette erreur ne provient pas le cette macro mais de la colonne L qui est issue d'une formule afin d'avoir la date de majorité.

=SI(Effectif!$D50>0;(JOUR(Effectif!$D50)&"/"&MOIS(Effectif!$D50)&"/"&ANNEE(Effectif!$D50)+18);"Inconnu")

Vous en pensez quoi ?

Deja declarer P et LaDate

Ensuite, lors de l'erreur, regarder le contenu des diverses variables en passant la souris dessus avant toute modif.

Si je retire la section régularisation, le reste de la macro fonctionne. Donc la variable P et ladate sont ok.

bonjour,

A+

Voici voila

Pas d'erreur 13 dans ton fichier mais une foule d'erreurs d'exécution du à une ligne trop épurée : Mettre partout des N° bidon ou des adresses bidon si nécessaire pour que la macro fonctionne et qu'on puisse isoler l'erreur.

C'est à dire ?

Voici une version affichant bien l'erreur

15point-situation.xlsm (179.90 Ko)

bonjour,

plusieurs les variables ne sont pas déclarées (en particulier ladate)quand on la survole avec la souris on voit que ladate contient "18/0/1922" (un string) par suite Il est impossible de faire la différence avec D qui contient bien une date sans guillemet 08/05/2020... Par ailleurs je me demande bien ce que viens faire ce p dans l'histoire : il contient -68 !

-68 = 08/05/2020 - "18/0/1922" : OULALA !!

A+

Ce code n'est pas de moi, ne connaissant pas assez la VBA.

P est la valeur qui, selon son résultat, définir le message dans la messagebox.

Les deux dates n'ont pas le même format car l'une est inscrite manuellement et l'autre par formule. Donc comment faire pour que la seconde, entre guillemet soit au bon format ?

Euh c'est difficile... il faut "pondre" un autre code il faut que je réfléchisse.

A+

Voici une solution qui vaut ce qu'elle vaut c'est à dire à mes yeux pas grand chose... (mais elle ne produit pas d'erreur)

1. modifier la formule en L3 mettre :

=SI(Effectif!$D3>0;DATE(ANNEE(Effectif!$D3);MOIS(Effectif!$D3);JOUR(Effectif!$D3));"")

et tirer la formule vers le bas.

2. ensuite remplacer toute la macro par le code suivant :

Option Explicit
Sub Alerte()
Dim w1 As Worksheet
Dim i%, j%, k%, Rep%
Dim D As Date, ladate As Date
Dim Lbus$, Lcmu$, Lfinatjm$, Ltravail$, Lregul$
Dim p&
Set w1 = Worksheets("Effectif") 'Feuille qui contient les alertes
D = Date

k = w1.Range("A" & Rows.Count).End(xlUp).Row

' ********************************* fin de BUS
For i = 3 To k
Select Case w1.Cells(i, "AF").Value
Case "Néant"
'ici le code prévu à cet effet ou rien
Case Else
ladate = w1.Range("AF" & i)
If ladate <> "" Then
p = D - ladate
If p >= 0 Then Lbus = Lbus & vbLf & "L'abonnement de bus pour " & Cells(i, "C").Value & " a expiré depuis le " & Cells(i, "AF")
End If
End Select
Next i

' ********************************* fin de CMU
  For i = 3 To k
  ladate = w1.Range("AB" & i)
    If IsDate(ladate) Then
      p = D - ladate
      If p >= 0 Then Lcmu = Lcmu & vbLf & "La CMU pour " & Cells(i, "C").Value & " est expirée depuis le " & Cells(i, "AB")
      If p > -30 And p < 0 Then Lcmu = Lcmu & vbLf & "La CMU pour " & Cells(i, "C").Value & " expirera le " & Cells(i, "AB").Value
    End If
  Next i

' ********************************* fin d'ATJM
  For i = 3 To k
    ladate = w1.Range("V" & i)
    If IsDate(ladate) Then
      p = D - ladate
      If p >= 0 Then Lfinatjm = Lfinatjm & vbLf & "L'ATJM pour " & Cells(i, "C").Value & " est expirée depuis le " & Cells(i, "V").Value
      If p > -60 And p < 0 Then Lfinatjm = Lfinatjm & vbLf & "L'ATJM pour " & Cells(i, "C").Value & " expirera le " & Cells(i, "V").Value
    End If
  Next i

' ********************************* Regul
  For i = 3 To k
    ladate = w1.Range("L" & i)
    If Cells(i, 27).Value <> "" Then
    If IsDate(ladate) Then
      p = D - ladate
      If p >= 0 Then Lregul = Lregul & vbLf & "La demande de titre de séjour pour " & Cells(i, "C").Value & " devrait être envoyée depuis depuis le " & Cells(i, "V").Value
      If p > -60 And p < 0 Then Lregul = Lregul & vbLf & "La demande de titre de séjour pour " & Cells(i, "C").Value & " devra être envoyée avant le " & Cells(i, "V").Value
    End If
    End If
  Next i

' ********************************* Fin d'autorisation de travail
  For i = 3 To k
  ladate = w1.Range("AU" & i)
    If IsDate(ladate) Then
      p = D - ladate
      If p >= 0 Then Ltravail = Ltravail & vbLf & "L'autorisation de travail pour " & Cells(i, "C").Value & " est expirée depuis le " & Cells(i, "AU").Value
      If p > -60 And p < 0 Then Ltravail = Ltravail & vbLf & "L'autorisation de travail pour " & Cells(i, "C").Value & " expirera le " & Cells(i, "AU").Value
    End If
  Next i

Rep = MsgBox(Lcmu, vbExclamation + vbOKCancel, "Mise à jour des CMU demandée")
If Rep = vbCancel Then Exit Sub
Rep = MsgBox(Lbus, vbExclamation + vbOKCancel, "Abonnements de bus perimés")
If Rep = vbCancel Then Exit Sub
Rep = MsgBox(Lfinatjm, vbExclamation + vbOKCancel, "ATJM à renouveler")
If Rep = vbCancel Then Exit Sub
Rep = MsgBox(Lregul, vbExclamation + vbOKCancel, "Demande titre de séjour à faire")
Rep = MsgBox(Ltravail, vbExclamation + vbOKCancel, "Autorisations de travail à renouveler")
If Rep = vbCancel Then Exit Sub
End Sub

A+

Personnellement moi je gèrerai plutôt ça en Mise en Forme conditionnelle... comme j'ai fait pour la CMU !

Effectivement

pas contre, il me liste toutes les situations et non pas celle à faire

Bonjour Theyoshi, le fil

Même si tu ne t'y connais pas en VBA, il faut apprendre

Dans ton fichier tu as effectivement un message d'erreur

2020 05 08 12h24 05

Tu cliques sur "Débogage"

Tu arrives sur une ligne en surbrillance

Et là, si tu mets ton curseur sur les variables, tu t’aperçois que l'une est bien une date et l'autre du texte

2020 05 08 12h24 20

D'où ton message d'erreur

Un conseil de développeur, qui vaut ce qu'il vaut

Mets "Option Explicit" au début de tes modules, cela t'obligera à déclarer tes variables et t'évitera bon nombres d'ennuis

Et cela t'évitera également des erreurs comme celle-ci

2020 05 08 12h31 45

@+

Je te remercie du conseil. Effectivement, j'oublie trop souvent de déclarer mes variables.

Juste

w1.Range("V" & i)

est indiqué comme variable objet ou variable de bloc with non définie.

Sous quelle forme la déclarer ?

Dans ma macro w1 est déclarée à la 3ème ligne...

Option Explicit
Sub Alerte()
Dim w1 As Worksheet
Dim i%, j%, k%, Rep%
'...

Re,

w1 pour toi c'est quoi ?

i pour toi c'est quoi ?

Dim W1 as Worksheet
Dim i as long

Petit remarque supplémentaire, mieux vaut donner des noms compréhensibles à tes variables

Par exemple

Dim Sht1 as Worksheet
Dim Lig as long

Comme cela, quand tu parcours ton code, tu sais de quoi il s'agit

Edit : Galopin01, une variable pour des lignes en Integer ce n'est absolument pas raisonnable

2020 05 08 15h13 21

@+

Re,

w1 pour toi c'est quoi ?

i pour toi c'est quoi ?

Dim W1 as Worksheet
Dim i as long

Petit remarque supplémentaire, mieux vaut donner des noms compréhensibles à tes variables

Par exemple

Dim Sht1 as Worksheet
Dim Lig as long

Comme cela, quand tu parcours ton code, tu sais de quoi il s'agit

Edit : Galopin01, une variable pour des lignes en Integer ce n'est absolument pas raisonnable

2020-05-08_15h13_21.png

@+

Sauf erreur de ma part notre ami a du parler quelque part de quelques centaines de ligne...

Rechercher des sujets similaires à "erreur type encore"