• 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

Re,

En réalité, cela ne fonctionne pas, je me suis penché un peu sur ce que tu voulais faire et sur ce que tu faisais en réalité, si tes données sont fausses, ta msgbox apparait mais l'enregistrement a quand même lieu. Voici la dernière version du code, simplifié et qui devrait correctement empêcher la sauvegarde :

VB:
Private Erreur As Boolean
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        Call ErreurDepart
        If Erreur = True Then
            Cancel = True
            Erreur = False
        End If
End Sub
Sub ErreurDepart()
 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)
      Erreur = True
      Exit For
   End If
 Next NumLigne
End Sub
 
- 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