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

Solurion annulée
 
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,

Hélas, hélas, je partage votre douleur :)

A+
 

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

Si un homme à faim ne lui donnes pas un poisson, apprends lui à pêcher ! c'est ma devise ...
Je passe mon temps sur ce forum à apprendre aux gens à pêcher.

Mais souvent ils n'ont pas de bouchon, ni même de canne.

A+
 

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+
 

job75

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

En attendant en première lecture de ton code j'ai du mal à comprendre le cells resize,
Cells(1, 1) c'est la 1ère cellule en colonne A.

Avec .Resize(n) on définit une plage de hauteur n à partir de cette cellule.

Il faut au moins 2 lignes de hauteur pour que le calcul matriciel fonctionne.

A+
 

zephir94

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

Ok un grand merci pour ces explications très instructives,
Tu vas me dire que je ne suis pas le roi du copier coller ( mode humour ! ) mais hélas pour moi ça fonctionne pas malgré un bon repérage des valeurs en pas à pas la macro saute la msgbox car la condition si les valeurs recherchées sont sur une même ligne est en false !
 

job75

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

Re,

Pas de doute : si la ligne n'est pas trouvée c'est qu'il n'y a pas les mêmes valeurs dans l'UserForm et dans la feuille.

Erreur classique : des espaces superflus dans les textes (en général à la fin).

Ou bien aussi des espaces insécables de code 160 dans la feuille.

A+
 

zephir94

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

Re bonjour,

Après un nouveau test pas à pas et réduction à deux colonnes B et C

ici :

Code:
   .Cells(1, 2).Resize(.Rows.Count + 1).Name = "colB"
   .Cells(1, 3).Resize(.Rows.Count + 1).Name = "colC"
il me trouve bien la même ligne soit rows 4 mais

la ligne :

Code:
 If IsNumeric([MATCH(x,colB&s&colC,0)]) Then 'calcul matriciel
Code:
x,colB&s&colC,0)]
j'ai o=o

J'ai donc testé avec comme valeur A et B pour voir l'histoire des espaces et c'est pareil

et il passe directement à End if

Une idée ?
 
Dernière édition:

job75

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

Re,

Pour ce qui est des espaces superflus, il est facile de les supprimer avec la macro.

Par la méthode du post #13 :

Code:
If TextBox1 = "" Or TextBox2 = "" Or ComboBox1 = "" Then Exit Sub
ThisWorkbook.Names.Add "s", Chr(1)
ThisWorkbook.Names.Add "x", Application.Trim(TextBox2) & [s] & _
Application.Trim(TextBox1) & [s] & Application.Trim(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,TRIM(colA)&s&TRIM(colB)&s&TRIM(colC),0)]) Then 'calcul matriciel
  MsgBox "Cette formation existe déjà !", 48, "Service formation"
  Exit Sub
End If
'suite du code
Application.Trim c'est la fonction SUPPRESPACE.

Concernant les caractères de code 160 le plus simple est d'opérer manuellement :

- sélectionnez les colonnes A:C

- touches Ctrl+H

- dans "Rechercher", touche Alt enfoncée, tapez 0160

- dans "Remplacer par", entrez un espace.

A+
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas