Microsoft 365 Message d'avertissement si doublon colonne

AIr-V

XLDnaute Junior
Bonjour à tous,

J'aimerais insérer un message d'avertissement en cas de saisie d'un doublon.
J'ai en effet un premier code qui demande de saisir des données dans une ligne d'un tableau, puis à chaque mise à jour du classeur, une nouvelle saisie sera demandée et donc une nouvelle ligne créée dans ce meme tableau.

La valeur qui m'intéresse est celle située en colonne E. Il faudrait ainsi avertir l'utilisateur en cas de saisie d'un doublon dans l'InputBox.

Voici le code initial :

Dim rev As String

'Saisie de la revision

rev = Application.InputBox("Saisissez la révision", "Saisie de la révision", Type:=2)
If rev = "Faux" Or rev = "" Then Exit Sub
If UCase(rev) = "*" Then
ligne = Range("A100").End(xlUp).Row + 1
If ligne = 100 Then
MsgBox "Tableau complet pour indices"
Exit Sub
Exit Sub
End If
Else
ligne = Range("A100").End(xlUp).Row + 1
If ligne = 100 Then
MsgBox "Tableau complet pour autre"
Exit Sub
End If
End If

Range("E" & ligne) = rev

'Saisie du prénom
Range("A" & ligne) = InputBox("Saisissez votre prénom", "Saisie du prénom")
'Saisie du nom
Range("B" & ligne) = InputBox("Saisissez votre nom", "Saisie du nom")
'Saisie de l'objet
Range("C" & ligne) = InputBox("Saisissez l'objet de la modification", "Saisie de l'objet")
'Saisie de la date de modification
Range("D" & ligne) = InputBox("Saisissez la date de modification du fichier", "Date de modification")

End Sub

Je sais pas si c'est ça peut paraitre clair, Merci par avance pour votre aide! :)
 

AIr-V

XLDnaute Junior
Salut jmfmarques,

Merci pour ton retour, j'ai essayé et ça a l'air de fonctionner :

Dim rev As String
Dim Flag As Boolean

While Application.CountIf(Range("e:e"), rev) > 0
Flag = True
MsgBox ("Indice déjà existant, veuillez saisir un nouvel indice")
rev = Application.InputBox("Saisissez la révision", "Saisie de la révision", Type:=2)
Wend


Qu'en penses-tu? Peut-on faire encore plus simple avec cette fonction?

Très belle journée. :)
 

jmfmarques

XLDnaute Accro
Que voudrais-tu de plus simple ?
c'est bien comme cela et je suis content de constater que tu as su mettre en oeuvre ce à quoi tu étais invité. Bravo.
Je ne vois par contre pas dans ton code à quoi est utilisée la variable boléenne flag. Mais je suppose que tu en utilise ailleurs la valeur ../
 

AIr-V

XLDnaute Junior
Avec les différentes possibilités, je me suis dis que peut-être il existait encore un moyen plus simple, mais tout fonctionne super bien donc vraiment top! :)
Pour mon autre variable je l'ai supprimé depuis car plus utilisé.

Merci encore pour ton aide, a très bientôt jmfmarques! :) :)
 

jmfmarques

XLDnaute Accro
Bon. j'ai trouvé un petit moment et te l'ai consacré pour saluer (cela m'a beaucoup plu) ton investissement et l'arrivée de ce que je pense être un vrai nouveau développeur.
Regarde attentivement (y compris le prompt de l'inputbox) ce que fait ceci :
VB:
Dim rev As String, p As String
p = "Saisissez la révision"
Do While rev = ""
  rev = Application.InputBox(p, "Saisie de la révision", Type:=2)
  If rev = "" Then Exit Do
  If Application.CountIf(Range("e:e"), rev) > 0 Then
    p = rev & " existe déjà ! autre à saisir ou abandon ": rev = "":
  Else
    Exit Do
  End If
Loop
 
Dernière édition:

jmfmarques

XLDnaute Accro
Que veut dire exactement Type:=2?

--->>
Passage de la rubrique concernée de l'aide VBA :

Les tableaux suivants répertorient les valeurs pouvant être passées dans l'argument Type. Il peut s'agir d'une seule valeur ou d'une somme de valeurs. Par exemple, pour une zone d'entrée qui peut accepter du texte et des nombres, affectez la valeur 1 + 2 à Type.


ValeurSignification
0Une formule.
1Un nombre.
2Texte (une chaîne).
4Une valeur logique (True ou False).
8Une référence de cellule, sous la forme d'un objet Range.
16Une valeur d'erreur, telle que #N/A.
64Un tableau de valeurs.
 

AIr-V

XLDnaute Junior
Tout simplement génial. :) :)

J'en profite pour te demander ton avis sur un autre chapitre de mon code.
J'ai en fait un classeur A composé de 3 onglets dans lequel j'active une macro qui me traite certaines données.
Une fois le traitement effectué, je souhaite sauvegarder une copie de ce classeur actif mais uniquement avec les deux premiers onglets.

Voici mon code :

'Sauvegarde copie nouveau fichier

Dim Wb As Workbook

Set Wb = Workbooks.Add
ThisWorkbook.Activate
Sheets(Array("sheet1", "sheet2")).Select
Sheets(2).Activate
Sheets(Array("sheet1", "Sheet2")).Copy Before:=Wb.Sheets(1)
Sheets("Feuil1").Select
'Masquer la demande d'autorisation de suppression de la feuille
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
ThisWorkbook.Activate


Chemin = "C:\Users\user\Desktop\"
'Ajoute l'indice et la date du jour dans le nom du fichier
Fichier = "Numérotation config_" & Format(Date, "ddmmyyyy") & ".xlsx"
'Enregistrement du nouveau classeur nommé "Fichier" sur le lien "Chemin"
Wb.SaveAs Chemin & Fichier
'Fermeture du nouveau classeur sans enregistrement (car fait juste plus haut)
Workbooks("Numérotation config_" & Format(Date, "ddmmyyyy") & ".xlsx").Close False


--> Je suis certain qu'il y a beaucoup plus simple!!
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 645
Messages
2 111 536
Membres
111 183
dernier inscrit
angelique76120