VBA - Comparaison cellule avec colonne

Bonjour à tous,

D'avance je m'excuse si le sujet à déjà été traité.

Je souhaiterais réaliser une macro VBA qui me permet de comparer une cellule avec une colonne entière avec des conditions particulières :

Je souhaite que si ma cellule isolée (en F10) est égale à une cellule de la colonne A, alors on m'affiche le message : "La fiche est déjà créée" et on supprime la ligne 10

Si en revanche, ma cellule isolée en F10, n'est égale à aucune cellule de la colonne A, alors on déplace la cellule F10 en A10 (fonction copy et delete si j'ai bien compris)

Je souhaite également garder la cellule F10 modifiable. En effet, sa valeur provient d'une Inputbox que j'ai créer plus tôt dans le code.

Voici mon ébauche de code :

Dim Z As Integer
For Z = 1 To 1000
If Cells(10, 6).Value = Cells(Z, 1).Value Then
MsgBox ("Fiche déjà existante")
Rows(10).Delete
Else
Cells(10, 6).Copy Cells(10, 1)
Cells(10, 6).Delete
MsgBox ("Fiche créée")
Exit For
End If
Next Z

Pas de succès avec ce code malheureusement, et je me prends la tête pour comprendre ce qu'il ne va pas. Je suis peut-être parti sur une mauvaise formule ? J'avais penser à utiliser le Do while, qu'en pensez-vous ?

Merci d'avance pour votre réponse.

Bonne soirée,

Bonjour,

As-tu un fichier anonyme à partager ?

Bonjour,

Bien sûr :

Merci pour la réactivité

21exemple.xlsm (15.72 Ko)

Un essai,

Sub Inserer_Fiche()
Rows(10).Insert 'Inserer une ligne en 10ème position'

Dim resultat As String
resultatA = InputBox("Entrer la fiche fruit", "Fiche") 'afficher la message box pour le remplassage de la colonne fiche'
Range("F10").Value = resultatA 'Entrer le résultat de la message box en F10, dans cette cellule afin de pouvoir faire la vérification si le code fiche existe déjà'

valeur = Range("F10").Value
Set plg = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
Set valeur_cherche = plg.Cells.Find(what:=valeur)
If valeur_cherche Is Nothing Then
    Range("A10") = Range("F10")
    Range("F10") = ""
    MsgBox "Fiche créée"
Else
    Range("A10:B10").Delete shift:=xlUp
    Range("F10") = ""                   'supprime aussi la valeur sinon elles s'accumulent avec la création de ligne.
    MsgBox "La fiche est déjà créée"
End If
Exit Sub
Set plg = Nothing
Set valeur_cherche = Nothing

End Sub

Salut,

Après une petite adaptation à mon fichier principal, cela fonctionne parfaitement, merci beaucoup!

J'ai quelques questions concernant des points de la formule, si tu repasses par là, je serais ravi d'avoir la réponse et de progresser :

- Est-ce qu'il y a une différence entre utiliser Range("F10").Value et Cells(10, 6).Value ?

- Pourquoi utiliser Range("F10") = "", plutôt que la fonction .delete ?

- Enfin, je n'ai pas compris à quoi serve les deux dernières lignes Set plg = Nothing & Set valeur_cherche = Nothing

Encore merci pour ta réponse,

Bonne journée,

Ravi que cela fonctionne

Aucune différence, juste 2 façon de l'écrire, que ça soit pour Range et Cells ou ="" et .delete.

Set ... = Nothing permet de "décharger" les objets pour libérer la mémoire afin de ne pas ralentir le fichier si exécuter de nombreuses fois. Ce n'est pas indispensable dans ce cas-ci mais comme ça c'est fait.

Bonne journée,

Rechercher des sujets similaires à "vba comparaison colonne"