Réaliser macro de MsgBox si MFC incorrecte

Bonjour à tous et à toutes,

Je réalise actuellement une macro permettant d'enregistrer une plage de données au format CSV.

Concernant ce morceau de code, j'ai pu trouver sur internet une macro et l'arranger pour mes données.

Cependant, j'aimerais pouvoir vérifier et afficher à l'utilisateur si toutes les cellules sont remplies correctement et le rediriger vers l'enregistrement de données et si ce n'est pas le cas où se trouvent les erreurs dans un seul message box et de quitter la macro en cours.

Dois-je réaliser une macro en fonction de la couleur de la cellule ? (Mes différentes MFC possèdent toutes la même couleur si erreur)

Bonjour,

Oui tu peux soit faire ça par mfc, soit réécrire tes conditions en code vba...

Pour la mfc je te passe ce fichier avec un code exemple qui permet de lire et afficher la couleur affichée par la cellule via une mise en forme conditionnelle.

Tu peux regarder la ligne de code via le bouton VBA de l'onglet développeur.

Merci pour ta réponse Ausecour, j'ai cependant du mal m'exprimer.

J'ai déjà rédigé de nombreuses MFC et j'aimerais désormais pouvoir afficher une fenêtre à l'utilisateur pour qu'il sache quelles cellules sont incorrectes avant qu'il puisse enregistrer son fichier au format CSV.

Voici le code que j'ai commencé à écrire :

Set plage = Range("A1:S" & Cells(Rows.Count, "S").End(xlUp).Row)
For Each c In plage
    If plage.Interior.Color = RGB(255,167,167) Then
        MsgBox "Attention ! Certaines cases obligatoires (NumeroCellule) ne sont pas remplies !"
        Exit Sub
    End If
Next c

Je ne sais pas comment récupérer la cellule incorrecte ni comment l'ajouter aux autres cellules incorrectes pour n'afficher qu'un seul MsgBox. De plus, mon morceau de code ne fonctionne pas

Bonjour,

Ah, je comprends mieux ce que tu veux faire du coup!

Ton code présente des erreurs :

Set plage = Range("A1:S" & Cells(Rows.Count, "S").End(xlUp).Row)
For Each c In Range 'ici mettre plage.cells, pas Range
    If Range.Interior.Color = RGB(255,167,167) Then 'comme tu utilises c, ne mets pas range.interior.color 
        'mais c.interior.color,idem pour .interior.color, .interior.color récupère la couleur mise manuellement
        'par quelqu'un, pas la couleur donnée par une mfc, qui se prend dans .DisplayFormat.Interior.Color
        MsgBox "Attention ! Certaines cases obligatoires (NumeroCellule) ne sont pas remplies !"
        Exit Sub 'si tu fais ça tu t'arrêtes à la première cellule vide, tu ne pourras pas voir les autres
        'et les afficher
    End If
Next c
Correction de ton code :
Sub test()
dim c as Range
message = ""
Set plage = Range("A1:S" & Cells(Rows.Count, "S").End(xlUp).Row)
For Each c In plage.cells
    If c.DisplayFormat.Interior.Color = RGB(255,167,167) Then
    if message <> "" then
        message = message & chr(10) & c.address
    else
        message = c.address
    end if
    End If
Next c

if message <> "" then
    MsgBox "Attention ! Certaines cases obligatoires ne sont pas remplies !" & chr(10) & message, vbExclamation
end if
End Sub

Si tu peux déjà essayer ça et me dire si ça te va.

Oui c'est exactement !

Et du coup pour n'afficher qu'une seule MsgBox avec les différentes cellules ne convenant pas ?

Le 'Exit Sub' je dois donc le mettre à la fin de ma boucle ; après mon Next c ?

Rebonjour,

Je t'ai mis le code qui devrait fonctionner dans un spoiler, tu l'as vu?

Il faut cliquer sur Afficher

Il ne s'agit seulement d'enlever le exit sub, il faut modifier plusieurs choses dans ton programme pour qu'il fonctionne, je te laisse voir le nouveau code et les commentaires sur ton ancien code, tu me feras un retour si tu souhaites approfondir des explications

Je n'avais pas vu le spoiler.

Merci beaucoup, tout le reste est clair pour moi

Rechercher des sujets similaires à "realiser macro msgbox mfc incorrecte"