Recherche sur 2 colonnes !

Fermé
TFM - Modifié par TFM le 13/06/2016 à 15:41
TFM67 Messages postés 6 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 15 juin 2016 - 15 juin 2016 à 11:00
Bonjour à toutes et à tous,
'
Je viens sur ce forum pour (je l'espère) que vous puissiez m'aider du mieux possible.
Alors voilà, je suis actuellement en train de mettre en place un outil de gestion de prêts de matériel sur Excel. J'ai déjà bien avancé sur le projet, mais il me manque une chose indispensable! Il me faut un bouton me permettant de savoir si l'ordinateur que je veux emprunté est disponible ou non.
'
Quelques informations utiles je pense:
- Le bouton sera placé sur la Feuil1
- Les données à chercher sont dans les cellules H5 et D10 de la Feuil1 :
- H5 correspond au nom de l'ordinateur
- D10 correspond à la date d'emprunt
- La feuille dans laquelle les recherches seront effectuées est la Feuil3
'
Je souhaite faire une recherche dans les colonnes C et L de la Feuil3. En clair, si le nom de l'ordinateur se trouve dans la colonne C et la date d'emprunt se trouve dans la colonne L (les deux doivent être sur la même ligne pour que l'ordinateur soit disponible) je souhaite une MsgBox avec écrit " L'ordinateur est disponible" sinon (dans le cas où ça ne fonctionne pas), je souhaite une MsgBox avec écrit "L'ordinateur est indisponible, veuillez en choisir un autre!"
Sachant que je dispose d'un liste déroulante dans la cellule H5 avec différents noms d'ordinateurs.
'
Je ne peux malheureusement vous joindre le fichier, car il contient des données confidentielles.. Mais je vous donne cependant un morceau de code que j'ai trouvé sur le net (d'ailleurs merci à l'auteur ;) ) pour essayer mais il ne fonctionne pas..
'

Sub Disponibilite()
Dim stC As String 'Valeur cherchée colonne C
Dim stL As String 'Valeur cherchée colonne L
Dim r As Range 'Ligne du tableau
stC = Feuil1.Range("H5").Value
stL = Feuil1.Range("D10").Value
For Each r In Worksheets("Feuil3").Range("A1").CurrentRegion.Rows
     If r.Cells(3) = stC And r.Cells(12) = stL Then
          MsgBox "L'ordinateur est indisponible, veuillez en choisir un autre!"
          Exit For 'fin recherche
     Else
          MsgBox "L'ordinateur est disponible"
     End If
Next
End Sub


'
Je vous remercie d'avance pour votre aide ;)
A voir également:

3 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
13 juin 2016 à 19:20
Bonjour
essayez ceci
Option Compare Text
Sub Disponibilite()
    Dim stC As String 'Valeur cherchée colonne C
    Dim stL As String 'Valeur cherchée colonne L
    Dim r As Range 'Ligne du tableau
    stC = Feuil1.Range("H5").Value
    stL = Feuil1.Range("D10").Value
    With Sheets("feuil3").Range("C1:C" & [C1000].End(xlUp).Row)
        Set x = .Find(stC, LookIn:=xlValues)
        If Not x Is Nothing Then
                DebX = x.Address
            Do
                If Cells(x.Row, 12) <> stL Then
                    Set x = .FindNext(x)
                Else
                    MsgBox "L'ordinateur est disponible"
                    Exit Sub
                End If
            Loop While Not x Is Nothing And x.Address <> DebX
        End If
    End With
    MsgBox "L'ordinateur est indisponible, veuillez en choisir un autre!"
End Sub

Cdlt
0
Merci beaucoup pour ta réponse, je n'ai pas pu regarder avant je suis désolé, je vais l'essayer et je te tiens au jus.

Cordialement, TFM
0
Je viens d'essayer mais lorsque je clique sur le bouton il me dit qu'il y a un problème au niveau de la ligne :
With Sheets("Feuil3").Range("C2:C" & [C1000].End(xlUp).Row)
Où il m'indique "l'indice ne fait pas partie de la sélection", j'ai changé C1 par C2 car mes lignes où sont renseignées les valeurs commencent à partir de la ligne 2 , mais rien ne change.. Pouvez-vous m'aider sur ce point? En tout cas le reste du code semble fonctionner.

Cordialement, TFM
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
14 juin 2016 à 08:53
Bonjour
Voilà
Option Compare Text
Sub Disponibilite()
    Dim stC As String 'Valeur cherchée colonne C
    Dim stL As String 'Valeur cherchée colonne L
    Dim r As Range 'Ligne du tableau
    stC = Feuil1.Range("H5").Value
    stL = Feuil1.Range("D10").Value
    Sheets("Feuil3").Select
    With Range("C2:C" & [C1000].End(xlUp).Row)
        Set x = .Find(stC, LookIn:=xlValues)
        If Not x Is Nothing Then
                DebX = x.Address
            Do
                If Cells(x.Row, 12) <> stL Then
                    Set x = .FindNext(x)
                Else
                    MsgBox "L'ordinateur est disponible"
                    Sheets("Feuil1").Select
                    Exit Sub
                End If
            Loop While Not x Is Nothing And x.Address <> DebX
        End If
    End With
    MsgBox "L'ordinateur est indisponible, veuillez en choisir un autre!"
    Sheets("Feuil1").Select
End Sub

Cdlt
0
Bonjour,

Merci énormément pour vos réponses si rapides ;) je vais essayer tout de suite et vous tiens au courant.

Cordialement.
0
Re-bonjour,

Je viens d'essayer votre code , j'ai du modifier 3 choses, les redirections vers les différentes feuilles, à la place de Sheets("Feuil3").Select par exemple, j'ai du mettre Worksheets("Liste des emprunts").Select !

Mais le code à l'air de bien fonctionner , je vais un peu remplir le document et voir si le code fonctionne, je vous tiens au courant au plus vite.

Cordialement, TFM
0
Je viens d'essayer et je crois que le code ne tient pas compte de la date de retour de la ligne renseignée dans la Feuil3, car quand je crée un enregistrement avec un nom d'ordinateur et une date de retour au 21/06/2016 par exemple, quand je recrée un enregistrement avec le même nom d'ordinateur et que je met la date d'emprunt = la date de retour de l'enregistrement d'avant, cela doit me dire que l'ordinateur est disponible, or il me dit le contraire peu importe la date d'emprunt que je rentre...
Cordialement
0
TFM67 Messages postés 6 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 15 juin 2016
14 juin 2016 à 11:35
Bonjour, je vais essayer de m'expliquer pour que vous puissiez me comprendre du mieux possible.
'
Imaginons que je rentre <<DELL 98>> dans la cellule H5 (qui correspond au nom de l'ordinateur) de la feuil1.
Une fois que l'enregistrement est effectué, cette valeur se retrouvera dans une des cellules de la colonne C de la feuil3.
Il faut également savoir qu'avant l'enregistrement , la date d'emprunt est entrée dans la cellule D10 de la feuil1 et la date de retour est entrée dans la cellule D11 de la même feuille.
APRES l'enregistrement :
- la date d'emprunt va se trouver sur la même ligne que <<DELL 98>> mais dans la colonne K de la feuil3
- la date de retour va aussi se trouver sur la même ligne mais dans la colonne L de la feuil3.
Imaginons qu'on prenne 14/06/2016 comme date d'emprunt et 21/06/2016 comme date de retour et qu'on enregistre.
'
Après cela on fait un nouvel enregistrement avec comme nom d'ordinateur <<DELL 98>> ,
comme date d'emprunt 21/06/2016 et comme date de retour 28/06/2016.
En appuyant sur mon bouton il doit m'afficher <<L'ordinateur est disponible>> puisque la date d'emprunt est <= à la date de retour de l'enregistrement précédent.
Dans tous les autres cas , il doit m'afficher << L'ordinateur est déjà emprunté>>
Vous voyez ce que je veux dire?

Si vous avez besoin de plus d'explications, dites le moi!

Cordialement
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 15/06/2016 à 09:31
bonjour

j'avais commencé à regarder avant tes derniers messages

si nom ordi est unique, pas besoin de boucles...
Sub Disponibilite()
Dim stC As String 'Valeur cherchée colonne C
Dim stL As String 'Valeur cherchée colonne L
Dim r As Range 'Ligne du tableau

With Sheets("feuil1")
stC = .Range("H5")
stL = .Range("D10")
End With

With Sheets("feuil3")
r = .Columns(3).Find(what:=stC, after:=.Range("C1")).Row
If .Cells(r, 12) = stL Then
MsgBox "L'ordinateur est indisponible, veuillez en choisir un autre!"
Else
MsgBox "L'ordinateur est disponible"
End If
End With
End Sub


Concernant tes derniers messages:au besoin, mets ton classeur en pJ
pour cela:
Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci par un clic droit sur le lien proposé dans le message de réponse

Dans l’attente
Edit 9:32h complété code

 Michel
0
TFM67 Messages postés 6 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 15 juin 2016
15 juin 2016 à 09:29
Bonjour,

Merci beaucoup pour votre réponse, cependant le nom de l'ordi n'est pas unique justement, je dispose d'une liste déroulante avec 15 noms différents mais je vais essayer votre code et vous tiens au courant le plus rapidement possible!

Si ça ne fonctionne pas, j'essaierai de vous joindre le fichier!

Cordialement,
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > TFM67 Messages postés 6 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 15 juin 2016
Modifié par michel_m le 15/06/2016 à 09:35
cependant le nom de l'ordi n'est pas unique justement, je dispose d'une liste déroulante avec 15 noms différents

Aie!!!
donc, tu connais le type d'ordi mais pas le numéro de l'ordi emprunté: comment fais tu pour connaitre l'état de tes ordi ?

mon message précédent actualisé à 9:32h
0
TFM67 Messages postés 6 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 15 juin 2016
15 juin 2016 à 09:38
Si justement je connais tout de l'ordi , c'est juste que lorsque je crée un nouvel enregistrement, je choisi un ordi parmis la liste et ensuite je veux cliquer sur le bouton "Vérifier" pour me permettre de savoir s'il est disponible ou non en fonction du nom de l'ordi et de la date d'emprunt. Tu vois ce que je veux dire?

J'ai vu tes modifs je les avait déjà faites mais merci quand même ;)
0
TFM67 Messages postés 6 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 15 juin 2016
15 juin 2016 à 10:17
J'ai apporté quelques modifications au code , cependant il me dit qu'il y a une erreur de compatibilité de type :/

Sub Disponibilite()
Dim stC As String 'Valeur cherchée colonne C
Dim stL As String 'Valeur cherchée colonne L
Dim r As Range 'Ligne du tableau
Dim PlageDeRecherche As Range

Set PlageDeRecherche = Sheets(3).Columns(3)
stC = Feuil1.Range("H5").Value
stL = Feuil1.Range("D10").Value
Set r = PlageDeRecherche.cells.Find(what:=stC, after:=Sheets(3).Range("C1")).Rows
If Sheets(3).cells(r, 12) = stL Then <-- problème à cette ligne
MsgBox "L'ordinateur est indisponible, veuillez en choisir un autre!"
Else
MsgBox "L'ordinateur est disponible"
End If
End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > TFM67 Messages postés 6 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 15 juin 2016
15 juin 2016 à 10:31
Dim r As Range 'Ligne du tableau
....
Set r = PlageDeRecherche.cells.Find(what:=stC, after:=Sheets(3).Range("C1")).Rows

ne prends pas ca mal mais c'est n'importe quoi !

Je laisse tomber
0