Recherche sur 2 colonnes !
TFM
-
TFM67 Messages postés 6 Statut Membre -
TFM67 Messages postés 6 Statut Membre -
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..
'
'
Je vous remercie d'avance pour votre aide ;)
'
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 ;)
3 réponses
-
Bonjour
essayez ceciOption 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-
-
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
-
-
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-
-
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 -
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 -
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
-
-
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-
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, -
-
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 ;) -
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 -
-