• Initiateur de la discussion Initiateur de la discussion XkevinX
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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,
 
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 😕
 
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
 
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.
 
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

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:
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...
 
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.
 
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
 
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:
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

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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
230
Réponses
3
Affichages
203
Réponses
2
Affichages
176
Réponses
8
Affichages
238
Réponses
2
Affichages
228
Réponses
10
Affichages
310
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
192
Retour