Aide sur Find en VBA

  • Initiateur de la discussion Initiateur de la discussion Didier972
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

Didier972

Guest
Bonjour

Voilà, je ne sais pas comment dire a la Méthode Find, que si il ne trouve pas la recherche = Then, il n'accepte pas
Je vous envoie mon code pour voir si vous voyez mon erreur.
Merci d'avance.

Code:
'MsgBox Oui + Non
Select Case MsgBox("A t'il réglé sa carte ?", vbYesNo, "Règlement de la Carte Boisson.")
Case vbYes
ActiveCell.Offset(0, 1) = "X" 'procédure si click sur Oui
Case vbNo
'Rempli la feuil Dette s'il répond Non au règlement
Nom = LB_reglement
Worksheets("Dette").Activate
If Columns(1).Find(Nom, , , , , Previous) = "" Then ' C'est ici que ca bloque
Else
Range("A6").Select
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveCell = LB_reglement
ActiveCell.Offset(0, 1) = ActiveCell.Offset(0, 1).Value + 10
End If
End Select
 
Re : Aide sur Find en VBA

Bonjour Didier,

Pas sûr d'avoir tout compris de ta macro, pas assez de détail dans ton explication.

Mais le principe est là:

VB:
'MsgBox Oui + Non
    Select Case MsgBox("A t'il réglé sa carte ?", vbYesNo, "Règlement de la Carte Boisson.")
    Case vbYes
        ActiveCell.Offset(0, 1) = "X"    'procédure si click sur Oui
    Case vbNo
        'Rempli la feuil Dette s'il répond Non au règlement
        Nom = LB_reglement
        Dim c As Range
        With Worksheets("Dette")
            Set c = Columns(1).Find(Nom, , , , , Previous)
            If Not c Is Nothing Then
                With .Range("A65536").End(xlUp)
                    .Offset(1, 0) = LB_reglement
                    .Offset(0, 1) = ActiveCell.Offset(0, 1).Value + 10
                End With
            End If
        End With
    End Select

P.S. Les Activate et autres .Select sont rarement utiles en VBA, de plus il rallonge le temps d'exécution et sont flashy pour les yeux.

A+
 
Re : Aide sur Find en VBA

bonjour,

regarde peut être l'exemple ci-dessous :
Code:
Option Explicit
Sub test()
Dim x As Range
Set x = Columns(1).Find(Date, , xlValues, xlWhole, , , False)
If Not x Is Nothing Then
    MsgBox "valeur trouvée en " & x.Address
Else
    MsgBox "valeur non trouvée..."
End If
End Sub
bon après midi
@

Edition : bonjour Hasco🙂
 
Re : Aide sur Find en VBA

Merci, pour ta réponse, donc ce que tu as fait fonctionne, pour la fonction Then, mais je ne sais pas pourquoi, rien ne s'incrit sur la feuille "Dette", quand je clic sur Non.
Merci à toi
 
Re : Aide sur Find en VBA

Bonjour,

Pour pouvoir te répondre il faudrait savoir:

1- à qui tu parles
2- plus de précisions sur ce que ta macro est censée faire
3- un fichier exemples avec explicaitons détaillées.

A+
 
Re : Aide sur Find en VBA

Alors, c'etait a toi Hasco, car au moment ou j'ai répondu, je n'avais pas vu le second post.
Alors la Macro est doit logiquement faire : Cela me sert à gerer l'achat de carte de fidelité pour une association.
J'ai une listbox, qui contient le nom des licenciés "LB_Reglement", alors quand je double clic sur un des Nom, cela veux dire qu'il a rajeté une carte, celle si est comptabilisé dans une feuil "Carte", et dans la feuil "Client" il note d'un "X" si il à réglé sa carte, mais si ce n'est pas le cas j'aimerais que dans la feuil"Dette" son nom s'inscrive, avec la valeur de la carte (10€), et si par hasard son nom etait déjà dans la feuil "Dette", il rajoute les 10€ à son ancienne Dette.
je joins le fichier.
encore Merci, et Bonne journée
 

Pièces jointes

Re : Aide sur Find en VBA

Re,

J'ai modifié le chargement de la listbox en créant un nom dans la feuille Clients.
J'ai laissé son chargement par RowSource, bien que cette propriété est souvent cause d'erreur.

Une autre façon de charger la listebox:
Code:
LB_reglement.List = Sheets("Client").Range("clients_inscrits").Resize(, 2).Value

Par contre pour retrouver le client dans dette il a fallut, pour répondre stricto sensus à ta demande que j'efface les formules en colonne A dont tu ne parles pas dans tes explications.

A toi de comprendre et de réfléchir à ce que tu veux faire.

A+

P.S. Si le userForm plante c'est probalement à cause de .RowSource. Si tel est le cas chez toi, utilise l'autre méthode pour charger tes listes.
 
Dernière modification par un modérateur:
Re : Aide sur Find en VBA

Merci de ton aide, Hasco, mais il y a une partie que je ne comprend pas dans ton code.
Code:
With Sheets("Conso")
            'Chercher son nom dans la feuille Conso colonne A
            Set c = .Range("A4:A" & .Cells(.Rows.Count, 1).End(xlUp).Row).Find( _
                            What:="Client 5", _
                            After:=.Range("A5"), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)

What:= "Client5", cela correspond à quoi ??? merci
 
Re : Aide sur Find en VBA

Bonsoir,
Je prend le fil en passant et il me semble que le problème avec Find vient du fait que s'il ne trouve pas il ne renvoie pas d'espace ou de nullité mais un message d'erreur que l'on peut traiter dans un sous-programme par exemple.

Si cela peut servir.

Hellnar
 
Re : Aide sur Find en VBA

Bonsoir,
Après vérification il est possible de tester le résultat avec Iserror(Find......, Activate) then
Exemple de code

Code:
If IsError(Columns("B:B").Find(What:="Ce que je recherche", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False).Activate) Then
         MsgBox "Absent"
Else
          MsgBox "Présent"
End If

Il y a d'autres solutions mais celle-ci n'est pas difficile à utiliser.
Cordialement

Hellnar
 
Re : Aide sur Find en VBA

Re,

Bonsoir,
Après vérification il est possible de tester le résultat avec Iserror(Find......, Activate) then
Exemple de code

Code:
If IsError(Columns("B:B").Find(What:="Ce que je recherche", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False).Activate) Then
         MsgBox "Absent"
Else
          MsgBox "Présent"
End If

Il y a d'autres solutions mais celle-ci n'est pas difficile à utiliser.
Cordialement

Hellnar

en l'état, si valeur non trouvé, renvoie une erreur...

bonne journée
@+
 
Re : Aide sur Find en VBA

Bonjour,
Staple🙂🙂🙂
Pierrot🙂🙂🙂

@Helnar, en réponse à ton post 8 il s'agit simplement d'un oubli après copier coller d'un test.
Remplace "Client5" par LB_Reglement.value (sans guillemets) et tout rentrera dans l'ordre.

Quant à IsError tel que tu l'écrit, soulèvera une erreur. La Methode .Find de l'objet range renvoie une cellule ou rien, en aucun cas une erreur xlCvError. .Find de l'objet Application.WorksheetFunction oui!

A+
 
Re : Aide sur Find en VBA

Bonjour,

Merci pour ces remarques. Toutes mes excuses aux participants, j'aurai dû lire plus attentivement les réponses avant de mettre mon grain de sel !
Même ma dernière proposition ne fonctionne pas. La honte !!

Bonne journée

Hellnar
(Encore un peu jeune malgré son âge, ferais mieux de réfléchir avant de parler etc....)
 
Dernière modification par un modérateur:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
596
Réponses
4
Affichages
589
Réponses
9
Affichages
389
Réponses
7
Affichages
375
Réponses
2
Affichages
411
Retour