XL 2013 Double recherche FIND

a_loic

XLDnaute Junior
Bonjour à tous,

Je me retrouve bloqué sur un code VBA qui me semblait facile…


En fait, je travaille actuellement sur un document qui me permet de vérifier avant d’ajouter une ligne si la donnée existe déjà :

Code:
  Dim Recherche As Range

ref = Sheets("Enregistrement").Range("C9").Value

 Set Recherche = Sheets("BDD").Columns("A").Find(ref)
  If Not Recherche Is Nothing Then
  If MsgBox("Donnée déjà existante. Forcer l'enregistrement ?", vbYesNo, "Demande de confirmation") = vbYes Then

  GoTo 1
  End If
  Else

1
If Range("D19").Value < 5 Then MsgBox "Quantité minimum non atteinte", 1, "Attention": Exit Sub


Mon problème actuel c’est que la donnée peut être en double si ce n’est pas la même journée.

Lors de l’enregistrement, la date du jour s’ajoutera :

Code:
  Range("D65536").End(xlUp).Offset(1, 0) = Format(Date, "mm/dd/yyyy")



Je souhaite donc que ma recherché vérifie que la donnée n’existe pas et si elle existe qu’elle ne soit pas du jour.



J’ai tenté des « and » (même des « & » :)) dans recherche mais rien n’y fait…



Quelqu’un pour me débloquer ?



Merci d’avance,

Excellente journée,

Loic
 

youky(BJ)

XLDnaute Barbatruc
Bonjour loic,
Dommage on ne vois pas toute la macro.
Voici une façon de faire
Bruno
VB:
ref = Sheets("Enregistrement").[C9]
lig = Application.Match(ref, Sheets("BDD").Columns("A"), 0)
If IsNumeric(lig) Then
'trouvé
  If MsgBox("Donnée déjà existante. Forcer l'enregistrement ?", vbYesNo, "Demande de confirmation") = vbYes Then
'trouvé et oui on mets la date en col D
Sheets("BDD").Cells(lig, 4) = Format(Date, "mm/dd/yyyy")
Else
'non trouvé
  Sheets("BDD").Cells(lig, 1) = ref 'lig est la ligne et 1 la col A
End If
End If
 

a_loic

XLDnaute Junior
Bonjour,

Merci beaucoup pour la réponse rapide :)

En fait ce n'est pas vraiment ca.

Concrètement voilà ce que fait la macro actuellement.

Une personne saisie des données (un numéro client + une quantité).
La maro enregistre ces informations sur une base de données du type :
Colonne A : le numéro client
Colonne B : la quantité
Colonne C : la date

Avant cet enregistrement, la macro doit vérifier si le numéro client a déjà été saisi ce jour.
Si c'est le cas, elle prévient et demande si on force ou non l'enregistrement.

Evidemment, si le numéro client existe mais sur une autre journée, ca ne pose pas de problème.

Suis je plus clair ?


Encore merci,

Bonne soirée,
Loic
 

youky(BJ)

XLDnaute Barbatruc
re,
voici
Bruno
VB:
ref = Sheets("Enregistrement").[C9]
With Sheets("BDD")
lig = Application.Match(ref, .Columns("A"), 0)
If IsNumeric(lig) Then
'trouvé
If .Cells(lig, 4) = Date Then
  If MsgBox("Donnée déjà existante. Forcer l'enregistrement ?", vbYesNo, "Demande de confirmation") = vbYes Then
  'trouvé et oui on mets Qte et ??? pas la peine de remettre la date
' .Cells(lig, 2) = Qte
' .Cells(lig, 3) = ???
''''''''''''' .Cells(lig, 4) = Format(Date, "mm/dd/yyyy")
  End If
  End If
Else
'non trouvé
lig = .[D65536].End(xlUp).Row + 1 'dernière ligne +1
  .Cells(lig, 1) = ref
  '.Cells(lig, 2) = Qte
  .Cells(lig, 4) = Format(Date, "mm/dd/yyyy")
End If
End With
edit je viens de modifier la macro
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re, j'avais pas testé car pas de fichier exemple
Cette fois j'ai testé, il faut faire une boucle
comme cela
Bruno
VB:
ref = Sheets("Enregistrement").[C9]

With Sheets("BDD")
bas = .[A65536].End(3).Row
For lig = 1 To bas
If .Cells(lig, 1) = ref And .Cells(lig, 4) = Date Then
If MsgBox("Donnée déjà existante. Forcer l'enregistrement ?", vbYesNo, "Demande de confirmation") = vbYes Then
  ' .Cells(lig, 2) = Qte
   .Cells(lig, 3) = "test" '???
   Exit Sub
End If
End If
Next
lig = bas + 1
.Cells(lig, 1) = ref
  '.Cells(lig, 2) = Qte
  .Cells(lig, 4) = Date
End With
 

Discussions similaires

Réponses
4
Affichages
205

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16