Rechercher tois valeurs et verifier si elles sont sur la même ligne

zephir94

XLDnaute Impliqué
Bonjour le forum,

Je dois avant de récupérer trois valeurs d'un Userform vérifier si elles n'ont pas étaient déjà enregistrées dans une base.
Voici mon code :
Code:
 Set Cell = Sheets("base2").Columns(2).Find(TextBox1, LookIn:=xlValues, lookat:=xlWhole)
 Set Cell = Sheets("base2").Columns(1).Find(TextBox2.Value, LookIn:=xlValues, lookat:=xlWhole)
Set Cell = Sheets("base2").Columns(3).Find(ComboBox1, LookIn:=xlValues, lookat:=xlWhole)

If TextBox1 = Find & TextBox2 = Find & ComboBox1 = Find  ( sur la même ligne ) Then
MsgBox "vous avez déjà enregistré cette formation !", vbExclamation, "Service formation"
Exit Sub

Je trouve bien les valeurs mais je voudrais vérifier qu'elles soient sur la même ligne, car si elles sont sur la même ligne dans ce cas j'interdis l'archivage ou j'archive

Merci à vous tous
 
Dernière édition:

néné06

XLDnaute Accro
Re : Rechercher tois valeurs et verifier si elles sont sur la même ligne

Bonjour à tous,

A essayer car non testé!

Code:
Public Sub recherche_trois_val()
    Dim x As Variant, i As Variant
    x = TextBox1
    i = Application.Match(x, Sheets("base2").Range("B:B"), 0)
        If IsNumeric(i) Then
        l1 = i
            x = TextBox2
            i = Application.Match(x, Sheets("base2").Range("A:A"), 0)
                If IsNumeric(i) Then
                l2 = i
                    x = ComboBox1
                    i = Application.Match(x, Sheets("base2").Range("C:C"), 0)
                        If IsNumeric(i) Then
                        l3 = i
                            If l1 = l2 And l2 = l3 Then
                                MsgBox "vous avez déjà enregistré cette formation !", vbExclamation, "Service formation Cis Ferrières"
                                Exit Sub
                            End If
                        End If
                End If
        End If
End Sub

A+

René
 

job75

XLDnaute Barbatruc
Re : Rechercher tois valeurs et verifier si elles sont sur la même ligne

Bonjour zephir94,

Code:
Dim cel1 As Range, cel2 As Range, cel3 As Range, r1&, r2&, r3&
Set cel1 = Sheets("base2").Columns(2).Find(TextBox1, LookIn:=xlValues, LookAt:=xlWhole)
Set cel2 = Sheets("base2").Columns(1).Find(TextBox2)
Set cel3 = Sheets("base2").Columns(3).Find(ComboBox1)
If cel1 Is Nothing Then r1 = 10000001 Else r1 = cel1.Row
If cel2 Is Nothing Then r2 = 10000002 Else r2 = cel2.Row
If cel3 Is Nothing Then r3 = 10000003 Else r3 = cel3.Row
If r2 = r1 And r3 = r1 Then
MsgBox "vous avez déjà enregistré cette formation !", vbExclamation, "Service formation"
Else
'suite du code
End If
Cela dit ce code risque de ne pas fonctionner dans tous les cas de figure...

Edit : salut néné06

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Rechercher tois valeurs et verifier si elles sont sur la même ligne

Re,

Voici une bonne solution :

Code:
Dim P As Range, t, x As String, i As Long
If TextBox1 = "" Or TextBox2 = "" Or ComboBox1 = "" Then Exit Sub
Set P = Intersect(Sheets("base2").[A:C], Sheets("base2").UsedRange.EntireRow)
t = P 'matrice, plus rapide
x = TextBox2 & Chr(1) & TextBox1 & Chr(1) & ComboBox1
For i = 1 To UBound(t)
  If t(i, 1) & Chr(1) & t(i, 2) & Chr(1) & t(i, 3) = x Then
    MsgBox "Cette formation existe déjà !", vbExclamation, "Service formation"
    Exit Sub
  End If
Next
'suite du code
Edit : pour que la casse soit ignorée mettre Option Compare Text en haut de la page de code.

A+
 
Dernière édition:

zephir94

XLDnaute Impliqué
Re : Rechercher tois valeurs et verifier si elles sont sur la même ligne

Merci à vous deux mais en fait ayant essayé vos deux solutions, hélas malgré l'information existante en feuille base 2 il y a bien écriture !

Job75, j'ai effectué ta solution pas à pas, tout va bien car il trouve et repère bien les variables mais malgré cela il passe la msgbox et va à next et du fait j'écris une nouvelle ligne en rows+1
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Rechercher tois valeurs et verifier si elles sont sur la même ligne

Re,

Vous ne comprenez pas les plaisanteries ?

Pour revenir à votre problème, ma 2ème solution est archi classique, elle fonctionnera si vous savez l'utiliser sur votre fichier.

En particulier vérifiez que les colonnes A B C correspondent à TextBox2 TextBox1 ComboBox1, dans cet ordre.

A+
 

job75

XLDnaute Barbatruc
Re : Rechercher tois valeurs et verifier si elles sont sur la même ligne

Re,

Bon vous avez édité :

Job75, j'ai effectué ta solution pas à pas, tout va bien car il trouve et repère bien les variables mais malgré cela il passe la msgbox et va à next et du fait j'écris une nouvelle ligne en rows+1

Si vous ne copiez pas correctement les codes qu'on vous donne vous n'irez pas loin.

Après la MsgBox j'ai mis un Exit Sub, devinez à quoi ça sert ?

A+
 

zephir94

XLDnaute Impliqué
Re : Rechercher tois valeurs et verifier si elles sont sur la même ligne

Bonsoir,

Je comprends la plaisanterie mais ne vous connaissant pas j'avais du mal à l'interpréter, si ma réaction vous à vexé recevez dans ce cas mes excuses !

Pour répondre dans l'ordre à vos différentes questions.

a) Oui les textbox et la combobox sont bien dans les bonnes colonnes et d'ailleurs je vous l'indique dans le message n°6

b) hélas à partir de la ligne
Code:
If t(i, 1) & Chr(1) & t(i, 2) & Chr(1) & t(i, 3) = x Then
ou d'ailleurs les Textbox et la Combobox en pas à pas affichent dans le bon ordre les bonnes valeurs, le vba saute
la Msgbox et boucle entre :

Code:
 If t(i, 1) & Chr(1) & t(i, 2) & Chr(1) & t(i, 3) = x Then
    
   End If
et après va sur Next

c) j'ai beau être débutant et ne pas avoir votre niveau, dextérité... mais oui je sais que Exit sub veut dire sortir de la macro, soit s'arrêter là !

d) Le copier coller je sais faire, mais le but pour moi est avant tout de comprendre le pourquoi du comment en priorité ( d'où mon exécution en pas à pas pour d'une part comprendre et reproduire par la suite ).

Je comprends que beaucoup de gens prennent ce Forum pour un réservoir à faire faire son taf à d'autres et même très souvent une fois le travail fait ne se donnent pas la pêne de dire merci, sachez que ce n'est pas mon cas ! et qu'au bout d'un moment on peut devenir aigri et s'emporter.

Si un homme à faim ne lui donnes pas un poisson, apprends lui à pêcher ! c'est ma devise ...

Très cordialement

Zephir94
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Rechercher tois valeurs et verifier si elles sont sur la même ligne

Bonjour zephir94, le forum,

Une dernière solution, sans boucle, avec des noms définis et un calcul matriciel :

Code:
If TextBox1 = "" Or TextBox2 = "" Or ComboBox1 = "" Then Exit Sub
ThisWorkbook.Names.Add "s", Chr(1)
ThisWorkbook.Names.Add "x", TextBox2 & [s] & TextBox1 & [s] & ComboBox1
With Intersect(Sheets("base2").[A:C], Sheets("base2").UsedRange.EntireRow)
  .Cells(1, 1).Resize(.Rows.Count + 1).Name = "colA" 'au moins 2 lignes
  .Cells(1, 2).Resize(.Rows.Count + 1).Name = "colB"
  .Cells(1, 3).Resize(.Rows.Count + 1).Name = "colC"
End With
If IsNumeric([MATCH(x,colA&s&colB&s&colC,0)]) Then 'calcul matriciel
  MsgBox "Cette formation existe déjà !", 48, "Service formation"
  Exit Sub
End If
'suite du code
Bonne journée et A+
 

zephir94

XLDnaute Impliqué
Re : Rechercher tois valeurs et verifier si elles sont sur la même ligne

Bonjour,
Je te remercie infiniment, je vais tester cela ce soir.
En attendant en première lecture de ton code j'ai du mal à comprendre le cells resize,
Pourrais tu me l'expliquer je te prie ?
Merci pour tout, à ce soir sur ce fil
 

job75

XLDnaute Barbatruc
Re : Rechercher tois valeurs et verifier si elles sont sur la même ligne

Re,

Sur Win 7 - Excel 2010, j'ai testé les durées d'exécution sur un tableau de 100000 lignes, la ligne trouvée étant la dernière.

Code du post #5 => 0,87 seconde.

Code du post #13 => 0,37 seconde.

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 010
Membres
101 866
dernier inscrit
XFPRO