IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Bug sur un code recherche. (correction de code).


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    apprenti
    Inscrit en
    Juillet 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 25
    Par défaut Bug sur un code recherche. (correction de code).
    BJR tout le monde,

    Voici un code, pompé à moitié sur internet, l'autre moitié bidouillé par mes soins

    Contexte
    Dans mon fichier, j'ai un USF qui contient:

    textbox1 et textbox2.

    Quand l'utilisateur saisie une recherche et click sur ok, un nouvel USF s'ouvre, pour afficher les infos. ( ça, ca marche )


    Dans ce code, j'ai deux problemes:

    1- Je ne parviens pas à taper des données numériques et texte dans un même textbox. Avec des valeurs numériques, la recherche fonctionne. Si je met une partie ou tout en lettres, il considère qu'il n'y a aucune valeur saisie.


    2- Je souhaite que la recherche ne fonctionne pas si je tape des infos dans les deux usf. C'est ce que j'ai tenté de faire avec mes bloc if, else, mais la pareil, je suis en échec!!

    ==> si value =true textbox1 et value= false text box2 recherche de textbox1

    ==> si value = false textbox1 et value= true textbox2 recherche de textbox2

    ==> si value = true textbox1 et value=true textbox2 msgbox aucune saisie



    Code actuel



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Private Sub btmfp_ok_click()
       If Me.TextBox1.Value = True Then
     
     
               ' déclaration des variables
                    Dim rref As Variant
                        rref = Me.TextBox1.Value
     
                    Dim plagederecherche As Range
     
                    Dim valeurcherchee As Variant
                    Dim adressetrouvee As Variant
     
                'Valeur cherchée = contenu dans la text box 1
     
                        valeurcherchee = rref
     
                'Recherch dans la colonne A
     
                        Set plagederecherche = ActiveSheet.Columns(1)
     
                        Set rref = plagederecherche.Cells.Find(what:=valeurcherchee, lookat:=xlWhole)
     
                'Si aucune correspondance
     
            If rref Is Nothing Then
                                    MsgBox "Aucune occurence n'a été trouvée pour la référence :" & vbCrLf & "" & vbCrLf & " " & valeurcherchee & " " & vbCrLf & "" & vbCrLf & " Cliquez sur okk pour revenir à l'écran précédent.", vbOKOnly
            Else
     
            'Si correspondance
     
                        adressetrouvee = rref.Address
                        rref.Select
                                    MsgBox "Une occurence a été trouvée pour la référence :" & vbCrLf & "" & vbCrLf & " " & valeurcherchee & " " & vbCrLf & "" & vbCrLf & " Cliquez pour afficher les informations", vbOKOnly
            consultation.Show
     
             End If
     
                    Set plagederecherche = Nothing
                    Set rref = Nothing
     
     
    Else
     
               If Me.TextBox2.Value = True Then
     
     
                Dim rdes As Variant
                    rdes = Me.TextBox2
                Dim plagederechercherdes As Range
     
                    Dim valeurchercheerdes As Variant
                    Dim adressetrouveerdes As Variant
     
                    'Valeur cherchée = contenu dans la text box 1
     
                        valeurchercheerdes = rdes
     
                'Recherch dans la colonne A
     
                        Set plagederechercherdes = ActiveSheet.Columns(3)
     
                        Set rdes = plagederechercherdes.Cells.Find(what:=valeurchercheerdes, lookat:=xlWhole)
     
                'Si aucune correspondance
     
            If rdes Is Nothing Then
                        MsgBox "Votre recherche" & valeurcherchee & ":  aucune correspondance pour cette recherche.", vbOKOnly
     
            Else
     
            'Si correspondance
     
                        adressetrouvee = rdes.Address
                        rdes.Select
                                  MsgBox "Une occurence a été trouvée pour la référence :" & vbCrLf & "" & vbCrLf & " " & rdes & " " & vbCrLf & "" & vbCrLf & " Cliquez pour afficher les informations", vbOKOnly
     
                   consultation.Show
             End If
     
                    Set plagederecherche = Nothing
                    Set rdes = Nothing
     
     
    Else
      MsgBox "Aucune saisie", vbCritical
     
     
     End If
    End If
     
     
     
     
    End Sub



    Merci pour l'aide éventuelle que vous pourrais m'apporter!!

  2. #2
    Membre chevronné Avatar de pasdechances
    Homme Profil pro
    Alternant, Ingénieur en systèmes Informatiques et Industriels
    Inscrit en
    Septembre 2015
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant, Ingénieur en systèmes Informatiques et Industriels
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 218
    Par défaut
    Bonjour,
    Citation Envoyé par latop Voir le message
    1- Je ne parviens pas à taper des données numériques et texte dans un même textbox. Avec des valeurs numériques, la recherche fonctionne. Si je met une partie ou tout en lettres, il considère qu'il n'y a aucune valeur saisie.


    2- Je souhaite que la recherche ne fonctionne pas si je tape des infos dans les deux usf. C'est ce que j'ai tenté de faire avec mes bloc if, else, mais la pareil, je suis en échec!!

    ==> si value =true textbox1 et value= false text box2 recherche de textbox1

    ==> si value = false textbox1 et value= true textbox2 recherche de textbox2

    ==> si value = true textbox1 et value=true textbox2 msgbox aucune saisie
    il existe des moyens plus simple pour régler tes problemes,
    pour le 1 : commence par déclarer les variables qui prennent le contenu de tes textbox en string et force et conversion du textbox avec Cstr(), quand tu recherchera pense a tout convertir en string, c'est plus facile de comparer une chaine de caractère.

    pour le 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ' le x<> "" veut dire x est different de vide et le x="", x est égale a vide
    if me.textbox1 <> "" and me.textbox2 = "" then valeurcherchée = cstr(me.textbox1)
    if me.textbox1 = "" and me.textbox2 <> "" then valeurcherchée = cstr(me.textbox2)
    if me.textbox1 <> "" and me.textbox2 <> "" then msgbox "aucune saisie"
    par contre j'ai pas bien compris le coup des true ou false avec les textbox donc je considère que : true = ecrit et false = vide

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.TextBox1.Value = True Then
    quelle drole d'idée utiliser un textbox!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Me.CheckBox1.Value = True Then 'la c'est mieux!
    vue que tu utilise un objet vba ça c'est à proscrire!
    les textbox retourne du texte cstr inutile!
    si tu renseigne une cellule Excel, seul le format est utile!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    ActiveCell = TrouveType("toto")
    ActiveCell.Offset(, 1) = TrouveType("5.2")
    ActiveCell.Offset(, 2) = TrouveType("01/01/2014")
    ActiveCell.Offset(, 3) = TrouveType("01/01/2014 15:20")
    End Sub
     
    Function TrouveType(V)
    TrouveType = V
    If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 And InStr(TrouveType, ":") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd hh:mm"): Exit Function
    If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd"): Exit Function
    If IsNumeric(Replace(TrouveType, ".", ",")) = True Then TrouveType = Replace(TrouveType, ",", "."): Exit Function
    End Function
    tu fais beaucoup de saut de ligne ça rend ton code ilisible, tasse ton code et indente le pour voir les bloc If End If; For Next; etc...

    Code Pour te montrer : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Private Sub btmfp_ok_click()
    If Me.TextBox1.Value = True Then
        Dim rref As Variant, plagederecherche As Range, valeurcherchee As Variant, adressetrouvee As Variant  ' déclaration des variables
        rref = Me.TextBox1.Value
        valeurcherchee = rref 'Valeur cherchée = contenu dans la text box 1
        Set plagederecherche = ActiveSheet.Columns(1) 'Recherch dans la colonne A
        Set rref = plagederecherche.Cells.Find(what:=valeurcherchee, lookat:=xlWhole)
        If rref Is Nothing Then 'Si aucune correspondance
            MsgBox "Aucune occurence n'a été trouvée pour la référence :" & vbCrLf & "" & vbCrLf & " " & valeurcherchee & " " & vbCrLf & "" & vbCrLf & " Cliquez sur okk pour revenir à l'écran précédent.", vbOKOnly
        Else         'Si correspondance
            adressetrouvee = rref.Address
            rref.Select
            MsgBox "Une occurence a été trouvée pour la référence :" & vbCrLf & "" & vbCrLf & " " & valeurcherchee & " " & vbCrLf & "" & vbCrLf & " Cliquez pour afficher les informations", vbOKOnly
            consultation.Show
        End If
        Set plagederecherche = Nothing
        Set rref = Nothing
    Else
        If Me.TextBox2.Value = True Then
            Dim rdes As Variant, plagederechercherdes As Range, valeurchercheerdes As Variant, adressetrouveerdes As Variant
            rdes = Me.TextBox2
            valeurchercheerdes = rdes  'Valeur cherchée = contenu dans la text box 1
            Set plagederechercherdes = ActiveSheet.Columns(3) 'Recherch dans la colonne A
            Set rdes = plagederechercherdes.Cells.Find(what:=valeurchercheerdes, lookat:=xlWhole)
            If rdes Is Nothing Then 'Si aucune correspondance
                MsgBox "Votre recherche" & valeurcherchee & ":  aucune correspondance pour cette recherche.", vbOKOnly
            Else 'Si correspondance
                adressetrouvee = rdes.Address
                rdes.Select
                MsgBox "Une occurence a été trouvée pour la référence :" & vbCrLf & "" & vbCrLf & " " & rdes & " " & vbCrLf & "" & vbCrLf & " Cliquez pour afficher les informations", vbOKOnly
                consultation.Show
            End If
            Set plagederecherche = Nothing
            Set rdes = Nothing
        Else
            MsgBox "Aucune saisie", vbCritical
        End If
    End If
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    apprenti
    Inscrit en
    Juillet 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 25
    Par défaut
    Merci bien pour vos rép.

    rdurupt, oui, je pense avoir souvent des drôles d'idées quand je programme

    Si je veux que mon utilisateur tape sa rechercher dans l'USF, je suis obligé d'utiliser textbox non?

    J'ai revu l'agencement du code, dsl si c'était le fouilli, c'est plus propre maintenant.

    Pour le code que tu me propose, il me semble fort éloigné de ce que je veux faire au final, je ne pense pas réussir à l'adapter



    pasdechances , Si j'ai bien compris, la fonction Cstr converti le contenu de la textbox en chaine de caractère (string). Mais quel est la différence entre convertir en string, et déclaré la variable en String??

    Si tu peux éclairer ma lanterne


    et sinon j'en suis arrivé la selon ce que tu m'as dit amis je sui un peu perdu. Comme le code est présenté ci-dessous, il est indiqué objer requis.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Private Sub btmfp_ok_click()
     
    'Jedéclare mes variables
    Dim rref As String
    Dim rdes As String
    TextBox1 = rref
    TextBox2 = rdes
    Dim plagederecherche As Range
    Dim valeurcherchee As String
     
    'Je les converti en string avec Cstr
    rref = CStr(Me.TextBox1)
    rdes = CStr(Me.TextBox2)
     
     
    'Ensuite je commence la recherche pour textbox 1 avec ta ligne de code
    If Me.TextBox1 <> "" And Me.TextBox2 = "" Then
    valeurcherchee = rref
        Set plagederecherche = ActiveSheet.Columns(1)
        Set rref = plagederecherche.Cells.Find(what:=valeurcherchee, lookat:=xlWhole)
        'Si aucune correspondance
            If rref Is Nothing Then
            MsgBox "Aucune occurence n'a été trouvée pour la référence :" & vbCrLf & "" & vbCrLf & " " & valeurcherchee & " " & vbCrLf & "" & vbCrLf & " Cliquez sur okk pour revenir à l'écran précédent.", vbOKOnly
        'Si correspondance
            adressetrouvee = rref.Address
                ' ?? la je ne sais pas comment sélectionner la cellule trouvé    (rref.Select)
            MsgBox "Une occurence a été trouvée pour la référence :" & vbCrLf & "" & vbCrLf & " " & valeurcherchee & " " & vbCrLf & "" & vbCrLf & " Cliquez pour afficher les informations", vbOKOnly
            consultation.Show
    End If
    'je vide mes variables
    Set plagederecherche = Nothing
    Set rref = Nothing
    End Sub

  5. #5
    Invité
    Invité(e)
    Par défaut
    ça c'est inutile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rref = CStr(Me.TextBox1) 'tu convertie un string en string dans un string!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rref = Nothing 'ça génère une erreur un string n'est pas une référence à un objet enlève ça!
    un CheckBox1 est un contrôle que utilisateur coche ou décoche avec la sourie c'est mieux qu'un textbox!

  6. #6
    Membre averti
    Homme Profil pro
    apprenti
    Inscrit en
    Juillet 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 25
    Par défaut
    Je suis à mille lieux de vos esprits de développeur;

    - Oui, pour la checkbox on coche ou décoche, pas de soucis.

    - Si tu me dis que c'est mieux qu'un textbox, je te crois sur parole.

    Mais comment veux-tu que je tape une recherche du type: "589 478 USFR 7459" dans une checkbox??

    J'avais penser au début mettre une checkbox pour pouvoir avoir deux procédure, avec une textbox mais bon, vu comment je galérais, j'ai laissé tombé cette option.

  7. #7
    Invité
    Invité(e)
    Par défaut
    la nous somme en train de faire un dialogue de sourd!

    tu montre un code If Me.TextBox1.Value = True Then! et tu me parle de "589 478 USFR 7459"???

  8. #8
    Membre averti
    Homme Profil pro
    apprenti
    Inscrit en
    Juillet 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 25
    Par défaut
    If Me.TextBox1.Value = True Then

    j' avais écrit cela car je voulais que la condition " if " s’exécute si une valeur était saisie. Si aucune valeur était saisie, donc textbox1 vide, on passe alors a la seconde condition "if"

    La seconde condition if reprenais la même base (If Me.TextBox2.Value = True Then), mais pour la textbox2.

    Et enfin, si cette condition n'était pas remplie, (textbox 2 vide) on avait un msgbox qui me disais "aucune saisie"

    C'est un bidouillage à tes yeux certes, mais bon, ça marchait a peu près.


    Le soucis que j'ai, c'est surtout sur les sujets que j'ai évoqué en début de post...

  9. #9
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Private Sub btmfp_ok_click()
    Dim rdes As Range, rref As Range, adressetrouvee As String
    If Len(trim(Me.TextBox1.Value)) > 0 Then
         Set rref = ActiveSheet.Columns(1).Find(what:=Me.TextBox1.Value, lookat:=xlWhole)
        If rref Is Nothing Then 'Si aucune correspondance
            MsgBox "Aucune occurence n'a été trouvée pour la référence :" & vbCrLf & "" & vbCrLf & " " & Me.TextBox1.Value & " " & vbCrLf & "" & vbCrLf & " Cliquez sur okk pour revenir à l'écran précédent.", vbOKOnly
        Else         'Si correspondance
            adressetrouvee = rref.Address
            MsgBox "Une occurence a été trouvée pour la référence :" & vbCrLf & "" & vbCrLf & " " & Me.TextBox1.Value & " " & vbCrLf & "" & vbCrLf & " Cliquez pour afficher les informations", vbOKOnly
            consultation.Show
        End If
         Set rref = Nothing
    Else
        If Len(trim(Me.TextBox2.Value)) > 0 Then
                  Set rdes = ActiveSheet.Columns(3).Find(what:=Me.TextBox2.Text, lookat:=xlWhole)
            If rdes Is Nothing Then 'Si aucune correspondance
                MsgBox "Votre recherche" & Me.TextBox2.Value & ":  aucune correspondance pour cette recherche.", vbOKOnly
            Else 'Si correspondance
                adressetrouvee = rdes.Address
                MsgBox "Une occurence a été trouvée pour la référence :" & vbCrLf & "" & vbCrLf & " " & rdes & " " & vbCrLf & "" & vbCrLf & " Cliquez pour afficher les informations", vbOKOnly
                consultation.Show
            End If
             Set rdes = Nothing
        Else
            MsgBox "Aucune saisie", vbCritical
        End If
    End If
    End Sub

  10. #10
    Membre averti
    Homme Profil pro
    apprenti
    Inscrit en
    Juillet 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 25
    Par défaut
    Merveilleux, ça fonctionne parfaitement.

    Ca va beaucoup m'aidé et ce dans plusieurs parties de mon projet.

    Merci pour ton aide et ta patience .


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bug sur code compilation fichiers
    Par JulienG__ dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/08/2012, 12h06
  2. [WD17] Bug sur un bout de code
    Par PaulNero dans le forum WinDev
    Réponses: 10
    Dernier message: 08/05/2012, 14h02
  3. comment vous résolvez des bugs sur du code javascript
    Par bigs3232 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/12/2010, 20h11
  4. Bug sur une Ligne de Code
    Par vaucluseimmo dans le forum VBA Word
    Réponses: 1
    Dernier message: 15/03/2010, 08h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo