Message d'erreur excel VBA même données

Fermé
ascascasc Messages postés 1 Date d'inscription jeudi 12 juillet 2012 Statut Membre Dernière intervention 12 juillet 2012 - 12 juil. 2012 à 16:05
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 16 juil. 2012 à 16:31
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 ?
A voir également:

13 réponses

Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
12 juil. 2012 à 16:11
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+
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
12 juil. 2012 à 16:16
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à...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
12 juil. 2012 à 16:47
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
12 juil. 2012 à 16:51
Effectivement, c'est astucieux :)
Bien joué !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
Modifié par pijaku le 13/07/2012 à 09:27
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
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
13 juil. 2012 à 09:43
Il a trouvé sa place aussi dans les miens
Merci pour le lien
0

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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
16 juil. 2012 à 14:07
Salut,

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...
0
Merci, j'ai essayé de l'appliquer à mon ficher mais ma macro ne fonctionne pas.

apparement c'est le DrLg qui bloque, à quoi doit il correspondre excactement ?
Pourtant dans mon répertoire, le code est en colonne A et les ingrédients en B...
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
16 juil. 2012 à 15:02
La variable DrLg correspond au numéro de ligne non-vide dans la colonne B de la feuille1... Quel est le message d'erreur ?
0
le message d'erreur : "erreur d'exécution 1004 : erreur définie par l'application ou par l'objet
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
16 juil. 2012 à 15:03
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
0
Je recopie exactement la meme chose et il me marque : erreur d'exécution 1004 : erreur définie par l'application ou par l'objet ???
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
16 juil. 2012 à 15:08
ta feuille s'appelle bien "Feuil1"?
0
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
16 juil. 2012 à 15:13
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...
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
16 juil. 2012 à 15:17
C'est vrai qu'en "mode code" 1=l (L)
1<>l
0
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
16 juil. 2012 à 15:24
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

0
"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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
16 juil. 2012 à 15:35
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...
0
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.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
16 juil. 2012 à 15:48
J'ai inversé code et ingredient entre A5 et B9 :
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...
0
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.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
16 juil. 2012 à 16:04
inversion entre code et ingrédient???
0
j'ai inversé et maintenant, le message s'affiche plus qu'une fois meme si l'ingrédient existe déja dans le répertoire!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
16 juil. 2012 à 16:09
peux tu me transmettre ton fichier via cjoint.com?
0
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.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
16 juil. 2012 à 16:31
intégré à ta macro12
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


0