Création d'une MsgBox

SUM

XLDnaute Occasionnel
Bonjour le forum,

Dans mon classeur Excel j'ai trois feuilles dans lesquelles je dois coller divers tableaux avec le nom des champs (différents en fonction de alpha - beta - gamma). J'ai une macro qui met en forme ces tableaux. Cependant, la macro échouera si le nom des champs est modifié ou manquants. C'est pourquoi, dans mon exemple ci-joint j'ai imaginé (un peu tiré par les cheveux...) un petit contrôle de premier niveau qui renvoit "problème" si la cohérence n'est pas respectée. Par contre, je ne parviens pas à mettre en place un MsgBox qui m'avertirait dans quelle(s) feuille(s) et dans quelle(s) colonne(s) il y aurait un problème de cohérence entre les intitulés du tableau collé et comment ils doivent être nommés pour être traités correctement.

Merci pour votre aide et très bon week-end
 

Pièces jointes

  • test.xls
    33 KB · Affichages: 61
  • test.xls
    33 KB · Affichages: 61
  • test.xls
    33 KB · Affichages: 61
Dernière édition:

Banzai64

XLDnaute Accro
Re : Création d'une MsgBox

Bonjour

sans connaitre la réalité de ton vrai fichier (peut-être des simplifications à faire)

VB:
Sub Bouton2_QuandClic()
Dim Mes
Dim I As Byte

  Mes = Array("AL001", "AL002", "AL003", "AL004")
  With Sheets("Alpha")
    For I = 0 To 3
      If .Cells(1, 1 + I) <> Mes(I) Then
        MsgBox "Erreur dans la page " & .Name
      End If
    Next I
  End With
    
  Mes = Array("BE001", "BE002", "BE003", "BE004")
  With Sheets("Beta")
    For I = 0 To 3
      If .Cells(1, 1 + I) <> Mes(I) Then
        MsgBox "Erreur dans la page " & .Name
      End If
    Next I
  End With
    
  Mes = Array("GA001", "GA002", "GA003", "GA004")
  With Sheets("Gamma")
    For I = 0 To 3
      If .Cells(1, 1 + I) <> Mes(I) Then
        MsgBox "Erreur dans la page " & .Name
      End If
    Next I
  End With
End Sub

Bonne journée
 

ROGER2327

XLDnaute Barbatruc
Re : Création d'une MsgBox

Bonjour SUM, Banzai64
Pas du tout certain d'avoir compris, je propose :
VB:
Sub Bouton2_QuandClic()
Dim i&, j%, n%, msg$, dat()
  dat = Array(Array(1, 4), Array("Alpha", "AL"), Array("Beta", "BE"), Array("Gamma", "GA"))
  For i = 1 To UBound(dat)
    With Sheets(dat(i)(0))
      For j = dat(0)(0) To dat(0)(1)
        If .Range("A1").Offset(0, j - 1).Value <> dat(i)(1) & Format(j, "000") Then
          msg = msg & dat(i)(0) & " : " & .Range("A1").Offset(0, j - 1).Address(0, 0) & " = " & _
            .Range("A1").Offset(0, j - 1).Value & " au lieu de " & dat(i)(1) & Format(j, "000") & vbLf
          n = n + 1
        End If
      Next
    End With
  Next
  If n = 0 Then msg = "Pas d'erreur" Else msg = n & " erreur" & IIf(n > 1, "s", "") & " :" & vbLf & vbLf & msg
  MsgBox msg
End Sub
ROGER2327
#4990


Mercredi 4 Pédale 138 (Saint Michet, Idéaliste, SQ)
8 Ventôse An CCXIX
2011-W08-6T14:32:33Z
 
Dernière édition:

SUM

XLDnaute Occasionnel
Re : Création d'une MsgBox

Bonjour Banzai, Bonjour Roger

Merci bcp pour vos réponses

La première proposition ne renvoit pas de message. La solution de Roger renvoit une MsgBox. Par contre, elle renvoit le message "pas d'erreur" mais il y en a une (volontairement) dans la feuille alpha
Dans la feuille alpha par exemple, dans cellule A1, je colle mon tableau n to m. La ligne 1 contient donc le nom des colonnes. Pour être sûr que ces intitulés soient les mêmes d'un jour à l'autre lorsque je vais coller dans la feuille mes tableaux, je lance la macro
1.- La macro insère une ligne en 1 où elle indique le nom des champs tels qu'ils doivent être
2.- La macro insère une deuxième où elle contrôle que le nom en A1 soit exactement le même qu' en A3 (intitulé de la première colonne du tableau collé dans cette feuille
3.- L'intitulé de la première colonne est AL002 --> ne correspond pas du tout à cellule A1 (AL001) --> erreur
4.- celllule A2 --> identification du problème
5.- Une fois toute les feuilles contrôlées, l'utilisateur est averti par une MsgBox que la feuille Alpha contient une erreur identifiée dans la colonne A et c'est là que je bloque :-(

Merci pour votre aide
Bonne fin de journée
 

SUM

XLDnaute Occasionnel
Re : Création d'une MsgBox

Rebonjour Banzai

Je dois te présenter mes excuses car ta solution fonctionne. Je ne l'avais adaptée correctement dans mon fichier.
La MsgBox renvoit un message avec la feuille concernée mais est-il possible d'avoir également la colonne qui est concernée par l'erreur?
Et est-il possible également d'avoir un seul message à la fin de la procédure, par exemple
- erreur : dans la feuille alpha colonne A
dans la feuille Beta colonne c

Merci et encore navré
 

SUM

XLDnaute Occasionnel
Re : Création d'une MsgBox

Bonsoir le forum,

En reprenant le fichier en exemple, la macro renvoie des erreurs même si la feuille ne contient pas de données. Je n'ai pas réuissi à rajouter la condition que si la cellule A1 ne contient pas de données alors passe à la feuille suivante. En fait, la procédure ne devrait fonctionner que si la feuille contient des données.

Merci d'avance pour votre aide

Et très bonne soirée
 

Banzai64

XLDnaute Accro
Re : Création d'une MsgBox

Bonsoir

Suffit de rajouter un test

VB:
Sub Bouton2_QuandClic()
Dim Mes
Dim I As Byte
Dim Msg  As String

  Mes = Array("AL001", "AL002", "AL003", "AL004")
  With Sheets("Alpha")
    If .Range("A1") <> "" Then
      For I = 0 To 3
        If .Cells(1, 1 + I) <> Mes(I) Then
          Msg = Msg & "Erreur dans la page " & .Name & " Colonne : " & Chr(65 + I) & vbCr
        End If
      Next I
    End If
  End With
   
  Mes = Array("BE001", "BE002", "BE003", "BE004")
  With Sheets("Beta")
    If .Range("A1") <> "" Then
      For I = 0 To 3
        If .Cells(1, 1 + I) <> Mes(I) Then
          Msg = Msg & "Erreur dans la page " & .Name & " Colonne : " & Chr(65 + I) & vbCr
        End If
      Next I
    End If
  End With
   
  Mes = Array("GA001", "GA002", "GA003", "GA004")
  With Sheets("Gamma")
    If .Range("A1") <> "" Then
      For I = 0 To 3
        If .Cells(1, 1 + I) <> Mes(I) Then
          Msg = Msg & "Erreur dans la page " & .Name & " Colonne : " & Chr(65 + I) & vbCr
        End If
      Next I
    End If
  End With
  
  If Len(Msg) > 0 Then MsgBox Msg Else MsgBox "Pas de soucis"
End Sub

Bonne soirée
 

ROGER2327

XLDnaute Barbatruc
Re : Création d'une MsgBox

Re...
(…)
En reprenant le fichier en exemple, la macro renvoie des erreurs même si la feuille ne contient pas de données.
(…)
C'est normal puisque, si une cellule est vide, elle ne peut contenir ni AL001 ni autre chose. Par conséquent, le cahier des charges de votre demande initiale est respecté.

Pour le nouveau problème posé :
VB:
Sub Bouton2_QuandClic()
Dim i&, j%, n%, msg$, dat()
  dat = Array(Array(1, 4), Array("Alpha", "AL"), Array("Beta", "BE"), Array("Gamma", "GA"))
  For i = 1 To UBound(dat)
    With Sheets(dat(i)(0))
      For j = dat(0)(0) To dat(0)(1)
        With .Range("A1").Offset(0, j - 1)
          If .Value <> dat(i)(1) & Format(j, "000") And Not IsEmpty(.Cells) Then
            msg = msg & dat(i)(0) & " : " & .Address(0, 0) & " = " & _
              .Value & " au lieu de " & dat(i)(1) & Format(j, "000") & vbLf
            n = n + 1
          End If
        End With
      Next
    End With
  Next
  If n = 0 Then msg = "Pas d'erreur" Else msg = n & " erreur" & IIf(n > 1, "s", "") & " :" & vbLf & vbLf & msg
  MsgBox msg
End Sub
ROGER2327
#4999


Vendredi 6 Pédale 138 (Vers Belges, SQ)
10 Ventôse An CCXIX
2011-W09-1T22:34:58Z
 

SUM

XLDnaute Occasionnel
Re : Création d'une MsgBox

Bonsoir Roger, Banzai

Effectivement, j'avais complétement omis qu'une feuille pouvait être vide et la vérification n'était, de ce fait, pas nécessaire. En plus, je me suis en-têté avec un test qui n'était absolument pas nécessaire avec Exit Sub. Du coup, aucune feuille n'était traitée même celles qui contenaient des données.
Merci pour votre aide. Les solutions proposées sont parfaites.
Très bonne soirée
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 370
Messages
2 087 693
Membres
103 641
dernier inscrit
anouarkecita2