Partager via

Recherche infructueuse

Anonyme
2015-03-22T11:03:00+00:00

Bonjour,

Soit 2 classeurs : Un contenant des données, le second des macros.

Dans le classeur de données en ligne 1 sont présents (mais pas les guillemets) :

A1 : "Désignation", B1 : "Matière" , C1 : "Référence", E1 : xxx, F1 : yyy,G1 : "Autre Référence" valeurs issues d'autres feuilles qui ne posent pas de problème, sans espace ou autres caractères. D'une feuille à une autre, les titres des colonnes peuvent se trouver dans des colonnes différentes, d'où la recherche suivante.

Si je demande à VBA de me trouver la colonne contenant "Référence" par le code :

Col1 = Activesheet.Rows("1:1").Find("Référence", Range("A1"), xlValues, xlWhole, , xlNext, False, False, False).Column

Il me dit que ce texte n'existe pas !

Idem, avec Désignation ou Matière.

Si je copie cette ligne plus bas, même déconvenue.

Si je copie cette ligne dans un autre classeur, cela fonctionne bien...

Autre essai, si dans mon premier classeur je fais une recherche en changeant uniquement xlWhole par xlPart, cela fonctionne mais cela ne me convient pas à cause du doublon, d'où le xlWhole.

Troisième essai, si dans mon premier classeur je fais une recherche en changeant uniquement xlValues par xlFormulas, cela fonctionne aussi... mais la valeur cherchée est bien une valeur en dur.

Merci de noter que copier le contenu de la cellule dans le code de recherche en VBA n'améliore rien.

Toutes les recherches faites manuellement donnent le même résultat que VBA.

J'ai souvent fait cette remarque lors de recherches manuelles (je sais alors trier visuellement les réponses attendues des autres) mais c'est la première fois avec VBA et le classeur (un parmi une petite centaine, utilisé depuis des années) ne fonctionne plus.

Le second classeur qui contient les macros pilote une batterie de classeurs identiques, en structure, à celui "en panne", il n'est pas possible de modifier le code.

Merci pour les idées.

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

10 réponses

  1. DanielCo 107.7K Points de réputation
    2015-03-22T17:55:04+00:00

    Pour une raison que j'ignore, la ligne 1 est au format comptabilité (euro valencien ???).Sooit tu changes le format à "Standard", soit tu changes "Valeurs" par "Formules" dans la fenêtre de recherche, soit tu conserves "Valeurs" et tu enlèves la sélection de la case "Totalité du contenu de la cellule".

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. DanielCo 107.7K Points de réputation
    2015-03-22T17:37:01+00:00

    Au temps pour moi. Je n'avais pas vu ton classeur. Je recherche.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. DanielCo 107.7K Points de réputation
    2015-03-22T15:47:10+00:00

    Bonjour,

    Quand tu écris :

    Col1 = Activesheet.Rows("1:1").Find("Référence", Range("A1"), xlValues, xlWhole, , xlNext, False, False, False).Column

    la commande fonctionne si la feuille sur laquelle s'effectue la recherche est la feuille active (celle que tu affiches au dessus. Si c'est le classeur contenant les macros qui est le classeur actif, le code fait la recherche sur la feuille active du classeur de macros et donc la recherche n'aboutit pas. C'est pourquoi Norman a précisé le classeur et la feuille sur lesquels doivent se faire la recherche :

    *****

        Set WB = Workbooks("TestData.xlsx")

        Set SH = WB.ActiveSheet 'Ou, par example, WB.Sheets("Feuil1")

        Set Rng = SH.Rows("1:1").Find(sStr, Range("A1"), xlValues, xlWhole, , xlNext, False, False, False)

    *****

    Cordialement.

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. Anonyme
    2015-03-22T14:25:20+00:00

    Bonjour Norman,

    Merci pour ces lignes dont je partage à la fois l'idée et le contenu.

    Mon problème n'est pas là !

    Je voudrais comprendre pourquoi Excel et VBA nous disent que ce que nous voyons n'existe pas !

    Le message est le même avec Client ou Rubrique alors que ces textes entiers figurent bien dans les cellules !

    Un extrait du fichier est ici :http://cjoint.com/?3CwpH3GlJSL

    Merci.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  5. Anonyme
    2015-03-22T12:50:42+00:00

    Bonjour

    J'ai essayé comme suit:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH As Worksheet

        Dim Rng As Range

        Dim Col1 As Long

        Dim sMsg As String

        Const sStr As String = "Référence"                                     '<<==== Modifie

        Set WB = Workbooks("TestData.xlsx")

        Set SH = WB.ActiveSheet 'Ou, par example, WB.Sheets("Feuil1")

        Set Rng = SH.Rows("1:1").Find(sStr, Range("A1"), xlValues, xlWhole, , xlNext, False, False, False)

        If Not Rng Is Nothing Then

            Col1 = Rng.Column

            sMsg = "La valeur " & sStr & " a été trouvé dans la colonne " _

                 & Col1 _

                 & " de la feuille " _

                 & SH.Name _

                 & "  du fichier " _

                 & WB.Name

        Else

            sMsg = "La valeur " _

                 & sStr _

                 & " n'a pas été trouvé!"

        End If

        MsgBox sMsg

    End Sub

    '<<=========

    Je ai téléchargé mes deux fichiers de test TestData.xlsx et TestMacros a:

                         http://1drv.ms/1CJtqah

    ===

    Regards,

    Norman

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire