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
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
A voir également:
- Message d'erreur excel VBA même données
- Message - Guide
- Erreur 0x80070643 - Accueil - Windows
- Liste déroulante excel - Guide
- Recuperer message whatsapp supprimé - Guide
- Message d'absence thunderbird - Guide
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
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+
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+
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
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à...
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à...
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
12 juil. 2012 à 16:47
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
12 juil. 2012 à 16:51
Effectivement, c'est astucieux :)
Bien joué !
Bien joué !
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
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
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
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
13 juil. 2012 à 09:43
Il a trouvé sa place aussi dans les miens
Merci pour le lien
Merci pour le lien
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
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
16 juil. 2012 à 14:07
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...
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
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 ?
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
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
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
16 juil. 2012 à 15:08
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
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
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...
End(xlUp).Row
xlUp (ix - elle - u p ) pas x1Up (ix un u p) pas facile à comprendre ça...
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
16 juil. 2012 à 15:17
C'est vrai qu'en "mode code" 1=l (L)
1<>l
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
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
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
"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
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
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...
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.
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
16 juil. 2012 à 15:48
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.
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
16 juil. 2012 à 16:04
inversion entre code et ingrédient???
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
16 juil. 2012 à 16:09
peux tu me transmettre ton fichier via cjoint.com?
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.
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
16 juil. 2012 à 16:31
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