Recherche sur 2 colonnes ! [Fermé]

Signaler
-
Messages postés
6
Date d'inscription
mardi 14 juin 2016
Statut
Membre
Dernière intervention
15 juin 2016
-
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 ;)

3 réponses

Messages postés
2200
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
3 mars 2021
316
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
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
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
Messages postés
2200
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
3 mars 2021
316
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
Bonjour,

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

Cordialement.
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
Messages postés
6
Date d'inscription
mardi 14 juin 2016
Statut
Membre
Dernière intervention
15 juin 2016

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
Messages postés
16431
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 avril 2021
3 161
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
Messages postés
6
Date d'inscription
mardi 14 juin 2016
Statut
Membre
Dernière intervention
15 juin 2016

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
Messages postés
16431
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 avril 2021
3 161 >
Messages postés
6
Date d'inscription
mardi 14 juin 2016
Statut
Membre
Dernière intervention
15 juin 2016

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
Messages postés
6
Date d'inscription
mardi 14 juin 2016
Statut
Membre
Dernière intervention
15 juin 2016

Mais je ne m'y connais pas encore suffisamment en VBA, je suis désole si je fais des erreurs..
Pourquoi veux-tu laisser tomber? C'est vraiment sympa de ta part..
Messages postés
16431
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 avril 2021
3 161 >
Messages postés
6
Date d'inscription
mardi 14 juin 2016
Statut
Membre
Dernière intervention
15 juin 2016

Alors envoie ton classeur car en plus j'ai des doutes sur la conception de ton appli
Messages postés
6
Date d'inscription
mardi 14 juin 2016
Statut
Membre
Dernière intervention
15 juin 2016

Je ne peux pas l'envoyer désolé