Problème Macro

XkevinX

XLDnaute Junior
Bonjour le Forum,

Débutant sur le VBA, je rencontre un problème.

Alors j'ai un petit souci sur une macro qui doit vérifier des données avant de valider l'enregistrement du classeur.

J'ai l'erreur Incompatibilité de type (13) dans le IF.

Voici le code :
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call ErreurDepart
End Sub

Sub ErreurDepart()
Dim NumLigne As Integer
Dim m As Integer

 For NumLigne = 9 To Range("J65536").End(xlUp).Row
  For m = 9 To Range("J65536").End(xlUp).Row
   If Range("J" & NumLigne).Value <> 0 And Range("M" & m).Value = "#N/A" Then
    MsgBox ("Il y a une erreur dans l'heure de départ dans la cellule J" & NumLigne)
        Else: ThisWorkbook.Save
   End If
  Next m
 Next NumLigne
 Exit Sub
End Sub

La ligne posant problème est :
Code:
 If Range("J" & NumLigne).Value <> 0 And Range("M" & m).Value = "#N/A" Then

Le #N/A est le retour d'une formule dans la cellule Mx qui prend en paramètre la cellule Jx.

EDIT: La colonne M est déjà remplie de #N/A par défaut car la colonne J est vide. L'utilisateur complète la colonne J.

Je vous remercie par avance.

Cordialement,
 

XkevinX

XLDnaute Junior
Re : Problème Macro

Bonjour pierrejean,

Merci de répondre aussi vite.

J'ai plus l'erreur mais le résultat est particulier.

Si je remplis de façon correcte, les cellules J9,J10 et J11 et si je mets une erreur dans la cellule J12; voici mon résultat :
- J'essaye de cliquer sur Enregistrer => ouverture de la MsgBox avec le message "Erreur de départ dans la cellule J9"
Or c'est la cellule J12 qui pose problème.
De plus, je ne peux fermer la MsgBox avec le bouton Ok ou la croix rouge. Je dois fermer le process :confused:
 

pierrejean

XLDnaute Barbatruc
Re : Problème Macro

Re

Normal , apres le msgbox le for next continue
teste:

Code:
For m = 9 To Range("J65536").End(xlUp).Row
   If Range("J" & NumLigne).Value <> 0 And Range("M" & m).Value = "#N/A" Then
       MsgBox ("Il y a une erreur dans l'heure de départ dans la cellule J" & NumLigne)
       Exit sub
    Else: ThisWorkbook.Save
   End If
 

WUTED

XLDnaute Occasionnel
Re : Problème Macro

Bonjour XkevinX,

Faudrait que tu revois ta macro, en gros :
Ta macro regarde si J9 n'est pas vide puis parcours M9,M10,M11,etc. Si l'une des cellules de la colonne M a une valeur d'erreur, alors tu déclenche ta msgBox, tu n'as pas besoin de deux boucles si j'ai bien compris ta situation car la cellule de la colonne M et celle de la colonne J sont sur la même ligne..

EDIT : Bonjour Pierrejean.
 

XkevinX

XLDnaute Junior
Re : Problème Macro

Re,

Bonjour WUTED,

Oui, j'y avais pensé.

En gros, si l'utilisateur remplit une cellule de la colonne J et que sur la même ligne la cellule en colonne M reste à #N/A, je souhaite la MsgBox.

Je vous joins le fichier.

J'essaye de refaire Macro.
 

Pièces jointes

  • Projet.xls
    101 KB · Affichages: 36
  • Projet.xls
    101 KB · Affichages: 39
  • Projet.xls
    101 KB · Affichages: 41

WUTED

XLDnaute Occasionnel
Re : Problème Macro

Re,

Essaye ça avec la correction de pierrejean pour ton problème de msgBox.
VB:
Sub ErreurDepart()
 Dim NumLigne As Integer
 For NumLigne = 9 To Range("J65536").End(xlUp).Row
   If Range("J" & NumLigne).Value <> 0 And Range("M" & numLigne).Value = "#N/A" Then
      MsgBox ("Il y a une erreur dans l'heure de départ dans la cellule J" & NumLigne)
      Exit For
   Else: ThisWorkbook.Save
   End If
 Next NumLigne
End Sub
 
Dernière édition:

WUTED

XLDnaute Occasionnel
Re : Problème Macro

Re,

J'ai regardé ton fichier, et en réalité la macro serait plus :

VB:
Sub ErreurDepart()
 Dim etat As boolena
 Dim NumLigne As Integer
 For NumLigne = 9 To Range("J65536").End(xlUp).Row
   If Range("J" & NumLigne).Value <> 0 And Range("M" & NumLigne).Value = "#N/A" Then
      MsgBox ("Il y a une erreur dans l'heure de départ dans la cellule J" & NumLigne)
      etat = True
      Exit For
   End If
 Next NumLigne
 If etat = False Then
    ThisWorkbook.Save
 End If
End Sub

Mais ça changera rien au fait que, quand tu fait ThisWorkbook.Save, tu appelles l'event Workbook_BeforeSave, qui rappelle ta fonction ErreurDepart() et ainsi de suite...
 

XkevinX

XLDnaute Junior
Re : Problème Macro

Re,

Merci à toi.

J'ai essayé en supprimant l'event WorkBook BeforeSave et en ne laissant que la macro ErreurDepart().

J'ai toujours les mêmes erreurs.
La macro se bloque sur J9 alors qu'il n'y a pas d'erreur.
J'aimerais qu'on puisse corriger le(s) erreurs, là il faut fermer l'appli par le gestionnaire :s.
 

WUTED

XLDnaute Occasionnel
Re : Problème Macro

Re,

C'est un peu bricolé mais essaye avec ce code :
VB:
Private Erreur As Boolean
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Erreur = False Then
Call ErreurDepart
End If
Erreur = False
End Sub
Sub ErreurDepart()
 Dim etat As Boolean
 Dim NumLigne As Integer
 For NumLigne = 9 To Range("J65536").End(xlUp).Row
   If Range("J" & NumLigne).Value <> 0 And IsError(Range("M" & NumLigne).Value) Then
      MsgBox ("Il y a une erreur dans l'heure de départ dans la cellule J" & NumLigne)
      etat = True
      Exit For
   End If
 Next NumLigne
 If etat = False Then
    Erreur = True
    ThisWorkbook.Save
 End If
End Sub
 

XkevinX

XLDnaute Junior
Re : Problème Macro

Re,

@WUTED: J'ai essayé le code.
Il fonctionne avec un point d'arrêt; il détecte bien l'erreur en J12 (MsgBox OK).
Il fonctionne avec la boîte à Outils.
Il ne fonctionne pas quand j'appuie sur enregistrer.

Où dois-je plaçer ton code ? Module 1 ? Feuille ? ThisWorkBook (Message erreur sur les private)

Merci
 
Dernière édition:

XkevinX

XLDnaute Junior
Re : Problème Macro

Re,

Bah écoute,j'ai fait de même mais cela ne fonctionne pas lorsque je veux sauvegarder.
La macro ne se lance pas. (placée dans Module 1)

Pourtant,elle fonctionne à merveille avec la bôite à outils quand je la lance.

Je joins le fichier.
 

Pièces jointes

  • Projet.xls
    106 KB · Affichages: 30
  • Projet.xls
    106 KB · Affichages: 36
  • Projet.xls
    106 KB · Affichages: 35

WUTED

XLDnaute Occasionnel
Re : Problème Macro

Re,

Je t'ai dis une bêtise tu dois mettre mon code dans ThisWorkbook, mais exactement mon code, t'as inversé deux lignes dans ton fichier, d'où l'erreur sur la variable Erreur, tu dois la déclarer en dehors de tes procédures, sinon elle n'aura pas sa portée globale et perd donc tout son intérêt.
 

Statistiques des forums

Discussions
312 493
Messages
2 088 944
Membres
103 989
dernier inscrit
jralonso