Message d'erreur excel VBA même données
ascascasc
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'aurai voulu savoir quel est le code pour créer un message d'erreur sous excel 2007.
J'ai un répertoire d'ingrédients qui sont chacuns affectés à un code (lettre et chiffre) (Feuille1)
sur une feuille 2, on peut rentrer un nouvel ingrédient avec son code et celui ci s'enregistre automatiquement à la suite de mo répertoire de la feuille 1.
Ce que je cherche à faire c'est : afficher un message d'erreur lorsque, on veut enregistrer un ingrédient alors que celui ci est déjà enregistrer dans le répertoire.
pouvez vous m'aider ?
J'aurai voulu savoir quel est le code pour créer un message d'erreur sous excel 2007.
J'ai un répertoire d'ingrédients qui sont chacuns affectés à un code (lettre et chiffre) (Feuille1)
sur une feuille 2, on peut rentrer un nouvel ingrédient avec son code et celui ci s'enregistre automatiquement à la suite de mo répertoire de la feuille 1.
Ce que je cherche à faire c'est : afficher un message d'erreur lorsque, on veut enregistrer un ingrédient alors que celui ci est déjà enregistrer dans le répertoire.
pouvez vous m'aider ?
A voir également:
- Message d'erreur excel VBA même données
- Liste déroulante excel - Guide
- Recuperer message whatsapp supprimé - Guide
- Trier des données excel - Guide
- Word et excel gratuit - Guide
- Message supprimé whatsapp - Guide
13 réponses
Bonjour,
Tu peux affecter une mise en forme conditionnelle sur ta liste en Feuil1 pour faire ressortir les doublons, ainsi ils te sauteront aux yeux de la même manière qu'un pop-up...
Pour cela dans Excel 2007 :
1. Sélectionne toute ta liste (et même plus bas pour prévoir les prochaines entrées d'ingrédients)
2. Onglet Accueil>Mise en forme conditionnelle>Règle de mise en surbrillance des cellules>Valeurs en double
A+
Tu peux affecter une mise en forme conditionnelle sur ta liste en Feuil1 pour faire ressortir les doublons, ainsi ils te sauteront aux yeux de la même manière qu'un pop-up...
Pour cela dans Excel 2007 :
1. Sélectionne toute ta liste (et même plus bas pour prévoir les prochaines entrées d'ingrédients)
2. Onglet Accueil>Mise en forme conditionnelle>Règle de mise en surbrillance des cellules>Valeurs en double
A+
Bonjour vous deux,
et celui ci s'enregistre automatiquement à la suite de mo répertoire de la feuille 1
Enregistre automatiquement = macro non?
Peux tu nous passer ton code?
Il doit suffire d'y ajouter deux trois lignes et voilà...
et celui ci s'enregistre automatiquement à la suite de mo répertoire de la feuille 1
Enregistre automatiquement = macro non?
Peux tu nous passer ton code?
Il doit suffire d'y ajouter deux trois lignes et voilà...
Salut Morgothal,
Astucieux oui, comme tout ce que l'on trouve chez Mister Boisgontier.
A l'époque, Michel_M qui traîne ces guêtres ici et ailleurs, m'a recommandé de me pencher sur l'objet Dictionnary avec ce lien.
Depuis, le site en entier de Jacques Boisgontier est dans mes favoris.
A+
Cordialement,
Franck P
Astucieux oui, comme tout ce que l'on trouve chez Mister Boisgontier.
A l'époque, Michel_M qui traîne ces guêtres ici et ailleurs, m'a recommandé de me pencher sur l'objet Dictionnary avec ce lien.
Depuis, le site en entier de Jacques Boisgontier est dans mes favoris.
A+
Cordialement,
Franck P
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci à tous pour votre aide. Pijaku c'est exactement ce que je voudrai faire. Malheureusement, je n'arrive pas à voir ton VBA. pourrais tu me dire comment l'insérer à mon code suivant :
'création nb val pour incrémenter ligne
Sheets("Feuil2").Select
Range("D1").Select
ActiveCell.FormulaR1C1 = "=COUNTA(C[-3])"
x = Cells(1, 4).Value
y = x + 1
'création nb val
Sheets("Feuil1").Select
Range("D1").Select
ActiveCell.FormulaR1C1 = "=COUNTA(C[-3])"
z = Cells(1, 4).Value
Sheets("Feuil1").Select
Range("A2:B" & z).Select
Selection.Copy
Sheets("Feuil2").Select
Cells(y, 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
'effacer données
Sheets("Feuil1").Select
Range("A2:D" & z).Select
Selection.ClearContents
Merci d'avance
'création nb val pour incrémenter ligne
Sheets("Feuil2").Select
Range("D1").Select
ActiveCell.FormulaR1C1 = "=COUNTA(C[-3])"
x = Cells(1, 4).Value
y = x + 1
'création nb val
Sheets("Feuil1").Select
Range("D1").Select
ActiveCell.FormulaR1C1 = "=COUNTA(C[-3])"
z = Cells(1, 4).Value
Sheets("Feuil1").Select
Range("A2:B" & z).Select
Selection.Copy
Sheets("Feuil2").Select
Cells(y, 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
'effacer données
Sheets("Feuil1").Select
Range("A2:D" & z).Select
Selection.ClearContents
Merci d'avance
Salut,
Mon code est sagement rangé dans le module de la feuille. Je te le recopie ici :
Par contre, je ne vois pas bien ce que tu souhaites réaliser avec ton code...
Mon code est sagement rangé dans le module de la feuille. Je te le recopie ici :
Private Sub Label1_Click() Dim Dico As Object, i As Long, Ingredient As String, DrLg As Long, code With Sheets("Feuil2") Ingredient = .Range("D6").Value code = .Range("D5").Value End With With Sheets("Feuil1") Set Dico = CreateObject("Scripting.Dictionary") DrLg = .Range("B" & Rows.Count).End(xlUp).Row For i = 2 To DrLg Dico(UCase(.Cells(i, 2))) = "" Next i If Not Dico.exists(UCase(Ingredient)) Then .Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = code .Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = Ingredient Else MsgBox "Ingrédient déjà existant", vbCritical + vbOKOnly, "Erreur Fatale!" End If End With End Sub
Par contre, je ne vois pas bien ce que tu souhaites réaliser avec ton code...
With Sheets("Feuil1") Set Dico = CreateObject("Scripting.Dictionary") DrLg = .Range("B" & Rows.Count).End(xlUp).Row
DrLg est le numéro de la dernière ligne saisie de la colonne B feuil1
ta feuille s'appelle bien "Feuil1"?
non mais j'ai changé j'ai adapté le code :
Dim Dico As Object, i As Long, ingredient As String, DrLg As Long, code
With Sheets("Entrée ingrédients")
ingredient = Range("B5").Value
code = Range("A5").Value
End With
With Sheets("INGREDIENTS et VIANDES")
Set Dico = CreateObject("Scripting.dictionary")
DrLg = .Range("B" & Rows.Count).End(x1up).Row
For i = 2 To DrLg
Dico(UCase(Cells(i, 2))) = ""
Next i
If Not Dico.exists(UCase(ingredient)) Then
Range("A" & Rows.Count).End(x1up).Offset(1, 0).Value = code
Range("B" & Rows.Count).End(x1up).Offset(1, 0).Value = ingredient
Else
MsgBox "Ingrédient déjà existant", vbCritical + vbOKOnly, "Erreur"
End If
Dim Dico As Object, i As Long, ingredient As String, DrLg As Long, code
With Sheets("Entrée ingrédients")
ingredient = Range("B5").Value
code = Range("A5").Value
End With
With Sheets("INGREDIENTS et VIANDES")
Set Dico = CreateObject("Scripting.dictionary")
DrLg = .Range("B" & Rows.Count).End(x1up).Row
For i = 2 To DrLg
Dico(UCase(Cells(i, 2))) = ""
Next i
If Not Dico.exists(UCase(ingredient)) Then
Range("A" & Rows.Count).End(x1up).Offset(1, 0).Value = code
Range("B" & Rows.Count).End(x1up).Offset(1, 0).Value = ingredient
Else
MsgBox "Ingrédient déjà existant", vbCritical + vbOKOnly, "Erreur"
End If
DrLg = .Range("B" & Rows.Count).End(x1up).Row
End(xlUp).Row
xlUp (ix - elle - u p ) pas x1Up (ix un u p) pas facile à comprendre ça...
End(xlUp).Row
xlUp (ix - elle - u p ) pas x1Up (ix un u p) pas facile à comprendre ça...
MERCI !!!! CA fonctionne ouf ! merci beaucoup...
J'aurai une autre petite question... En fait mon tableau d'entrée d'ingrédient est de A5 à A9 (pour le code) et de B5 à B9 (pour l'ingrédient) de façon à ce qu'on puisse rentrer plusieurs ingrédients en meme temps. Pouvez vous me dire s'il y a un moyen de l'intégrer dans la formule plutot que de traiter que la ligne A5;B5 ?? Merci d'avance
J'aurai une autre petite question... En fait mon tableau d'entrée d'ingrédient est de A5 à A9 (pour le code) et de B5 à B9 (pour l'ingrédient) de façon à ce qu'on puisse rentrer plusieurs ingrédients en meme temps. Pouvez vous me dire s'il y a un moyen de l'intégrer dans la formule plutot que de traiter que la ligne A5;B5 ?? Merci d'avance
Avec une petite boucle. Essaye :
Private Sub Label1_Click() Dim Dico As Object, i As Long, Ingredient As String, DrLg As Long, code, Lig As Byte For Lig = 5 To 9 With Sheets("Feuil2") Ingredient = .Range("A" & Lig).Value code = .Range("B" & Lig).Value End With With Sheets("Feuil1") Set Dico = CreateObject("Scripting.Dictionary") DrLg = .Range("B" & Rows.Count).End(xlUp).Row For i = 2 To DrLg Dico(UCase(.Cells(i, 2))) = "" Next i If Not Dico.exists(UCase(Ingredient)) Then .Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = code .Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = Ingredient Else MsgBox "Ingrédient déjà existant", vbCritical + vbOKOnly, "Erreur Fatale!" End If End With Next Lig End Sub
"erreur de compilation End sub attendu" pourtant je l'ai marqué ???!!
Aussi, la fin de ma macro ne s'excécute plus depuis l'insersion de ton code, saurais tu pourquoi ?
Sub nbvalingredient()
Application.ScreenUpdating = False
'
'création nb val
Sheets("INGREDIENTS et VIANDES").Select
Range("G8").Select
ActiveCell.FormulaR1C1 = "=COUNTA(C[-6])"
x = Cells(8, 7).Value
y = x + 1
'création nb val pour nouvelles données
Sheets("Entrée ingrédients").Select
Range("G1").Select
ActiveCell.FormulaR1C1 = "=COUNTA(RC[-6] : R[9] C[-6])"
Z = Cells(1, 7).Value + 4
'copier les données dans ing & viandes
Sheets("Entrée ingrédients").Select
Range("A5:D" & Z).Select
Selection.Copy
Sheets("INGREDIENTS et VIANDES").Select
Cells(y, 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
TON CODE EST ICI
'effacer les données entrées
Sheets("Entrée ingrédients").Select
Range("A5:D" & Z).Select
Selection.ClearContents
'fitrer par ordre du plus petit au plus grand
Range("A3").Select
ActiveWorkbook.Worksheets("INGREDIENTS et VIANDES").AutoFilter.Sort.SortFields. _
Clear
ActiveWorkbook.Worksheets("INGREDIENTS et VIANDES").AutoFilter.Sort.SortFields. _
Add Key:=Range("A4:A476"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("INGREDIENTS et VIANDES").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("INGREDIENTS et VIANDES").Select
Range("G8").Select
Sheets("Entrée ingrédients").Select
Range("A3").Select
Application.ScreenUpdating = True
End Sub
Aussi, la fin de ma macro ne s'excécute plus depuis l'insersion de ton code, saurais tu pourquoi ?
Sub nbvalingredient()
Application.ScreenUpdating = False
'
'création nb val
Sheets("INGREDIENTS et VIANDES").Select
Range("G8").Select
ActiveCell.FormulaR1C1 = "=COUNTA(C[-6])"
x = Cells(8, 7).Value
y = x + 1
'création nb val pour nouvelles données
Sheets("Entrée ingrédients").Select
Range("G1").Select
ActiveCell.FormulaR1C1 = "=COUNTA(RC[-6] : R[9] C[-6])"
Z = Cells(1, 7).Value + 4
'copier les données dans ing & viandes
Sheets("Entrée ingrédients").Select
Range("A5:D" & Z).Select
Selection.Copy
Sheets("INGREDIENTS et VIANDES").Select
Cells(y, 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
TON CODE EST ICI
'effacer les données entrées
Sheets("Entrée ingrédients").Select
Range("A5:D" & Z).Select
Selection.ClearContents
'fitrer par ordre du plus petit au plus grand
Range("A3").Select
ActiveWorkbook.Worksheets("INGREDIENTS et VIANDES").AutoFilter.Sort.SortFields. _
Clear
ActiveWorkbook.Worksheets("INGREDIENTS et VIANDES").AutoFilter.Sort.SortFields. _
Add Key:=Range("A4:A476"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("INGREDIENTS et VIANDES").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("INGREDIENTS et VIANDES").Select
Range("G8").Select
Sheets("Entrée ingrédients").Select
Range("A3").Select
Application.ScreenUpdating = True
End Sub
De mon code, il faut retirer :
Private Sub Label1_Click()
et
End Sub
Aussi, la fin de ma macro ne s'excécute plus depuis l'insersion de ton code, saurais tu pourquoi ?
peut être à cause de l'erreur de compilation...
Private Sub Label1_Click()
et
End Sub
Aussi, la fin de ma macro ne s'excécute plus depuis l'insersion de ton code, saurais tu pourquoi ?
peut être à cause de l'erreur de compilation...
Le problème c'est que maintenant, comme l'ordi fait une boucle, meme si la ligne est vide il m'affiche le message d'erreur ?! Dois je rajouter un IF ??? pour dire si la ligne est vide, ne pas afficher le message d'erreur ?!
ensuite le soucis est que le message d'erreur s'affiche : "l'ingrédient existe déjà" mais se copie quand meme dans le répertoire, je voudrai que le message s'affiche qu'on clique sur ok et qu'on revienne sur la page, si l'ingrédient n'est pas enregistré, qu'il se copie dans le répertoire.
En tout cas merci beaucoup pour ton aide.
ensuite le soucis est que le message d'erreur s'affiche : "l'ingrédient existe déjà" mais se copie quand meme dans le répertoire, je voudrai que le message s'affiche qu'on clique sur ok et qu'on revienne sur la page, si l'ingrédient n'est pas enregistré, qu'il se copie dans le répertoire.
En tout cas merci beaucoup pour ton aide.
J'ai inversé code et ingredient entre A5 et B9 :
Sinon, après tests, le code fait exactement ce que tu souhaites, je ne comprends pas...
Dim Dico As Object, i As Long, Ingredient As String, DrLg As Long, code, Lig As Byte For Lig = 5 To 9 With Sheets("Feuil2") Ingredient = .Range("B" & Lig).Value code = .Range("A" & Lig).Value End With With Sheets("Feuil1") Set Dico = CreateObject("Scripting.Dictionary") DrLg = .Range("B" & Rows.Count).End(xlUp).Row For i = 2 To DrLg Dico(UCase(.Cells(i, 2))) = "" Next i If Not Dico.exists(UCase(Ingredient)) Then .Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = code .Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = Ingredient Else MsgBox Ingredient & " Ingrédient déjà existant", vbCritical + vbOKOnly, "Erreur Fatale!" End If End With Next Lig
Sinon, après tests, le code fait exactement ce que tu souhaites, je ne comprends pas...
j'effectivement recopié ton code. Mais par exemple si je rentre :
Ligne 5 : V5852
Ligne 6 : W2000
Ligne 7 : W1000
Ligne 8 : vide
Ligne 9 : vide
L'ordi affiche 5 fois "ingrédient existe déjà" alors que seul V5852 existe dans mon répertoire. De plus, ces 5 lignes se recopient alors que si possible après le message je voudrai que si le message est apparu, on ne copie pas les données.
Ligne 5 : V5852
Ligne 6 : W2000
Ligne 7 : W1000
Ligne 8 : vide
Ligne 9 : vide
L'ordi affiche 5 fois "ingrédient existe déjà" alors que seul V5852 existe dans mon répertoire. De plus, ces 5 lignes se recopient alors que si possible après le message je voudrai que si le message est apparu, on ne copie pas les données.
http://cjoint.com/?3GqqoorXRUk
Voici le fichier simplifié. Merci pour ton aide j'espere ne pas trop t'embeter avec toutes mes questions.
L'idéal serait de pouvoir rentrer des nouveaux ingrédients dans le répertoire et que si le message d'alerte s'affiche que les données ne se copient pas.
Voici le fichier simplifié. Merci pour ton aide j'espere ne pas trop t'embeter avec toutes mes questions.
L'idéal serait de pouvoir rentrer des nouveaux ingrédients dans le répertoire et que si le message d'alerte s'affiche que les données ne se copient pas.
intégré à ta macro12
https://www.cjoint.com/?BGqqDXXAyqs
il manquait des points devant les lignes :
et code et ingredient étaient inversés ici :
https://www.cjoint.com/?BGqqDXXAyqs
il manquait des points devant les lignes :
.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = code .Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = Ingredient
et code et ingredient étaient inversés ici :
With Sheets("Feuil2") Ingredient = .Range("B" & Lig).Value code = .Range("A" & Lig).Value End With