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 :

Afficher le résultat d'une Fonction Find


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 10
    Par défaut Afficher le résultat d'une Fonction Find
    Bonjour,

    je souhaite utiliser la fonction Find dans une macro afin de rechercher une chaine de caractères dans une colonne, puis de remplacer cette chaine par un autre texte.

    J'écris ceci, sachant que T(i) est ma chaine de caractère stockée dans le tableau T.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
        Sheets(1).Columns(4).Find (T(i))
    Dans un premier temps je voudrais vérifier qu'il trouve bien la bonne case dans mon tableau excel. J'ai essayé avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Msgbox(Sheets(1).Columns(4).Find (T(i)).value)]
    mais cela ne fonctionne pas.

    Dans un second temps je voudrais récupérer le texte qui se trouve dans la cellule trouvée (car find renvoie bien une cellule ?) afin de l'exploiter, par exemple de remplacer des caractères.

    Merci d'avance pour votre aide.

    Cordialement

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Et comme cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox Sheets(1).Columns(4).Find(what:=T(i), lookat:=xlwhole).value

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour,

    en fait il n'y a aucunement besoin d'effectuer une recherche séparée : il suffit de sélectionner la colonne
    puis de lancer la commande Rechercher / Remplacer en répondant bien aux divers champs …

    La base de code peut être obtenue en utilisant l'Enregistreur de macros …

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 10
    Par défaut
    Bonjour à tous les deux et merci pour vos réponses.

    Tout d'abord la formule proposée par jfontaine ne fonctionne pas (erreur 91, une erreur générique donc je ne sais pas ce qui pose problème).

    Concernant Marc L, je ne peux malheureusement pas utiliser l'enregistreur de macro car mon but final est de réaliser une boucle recherchant des chaines de caractères variables. J'ai seulement isolé la partie qui me bloque dans mon programme en espérant avoir plus de lectures et de réponses.

    Je précise donc ma demande: j'aimerais avoir une étape intermédiaire qui me permette d'afficher le contenu du texte de la cellule que me retourne ma recherche, pour vérifier que la recherche se déroule bien comme je le demande dans mon code.

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bref une usine à gaz, sans moi !

    As-tu seulement testé depuis la feuille de calculs la fonction interne Rechercher / Remplacer ? Le B-A-BA d'Excel !

    Sinon oh que oui tu peux utiliser l'Enregistreur de macros pour avoir une base de code
    dans lequel tu feras des modifications pour tes éléments variables ‼

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 10
    Par défaut
    Oui j'ai testé la fonction rechercher mais cela ne convient pas à la situation car il faudrait faire la manip 500 fois (d'ou la macro avec boucle).

    Meme remarque pour le fait d'utiliser l'enregistreur: ca marche mais le fait de l'utiliser ne résoudra pas mon problème ici car ce qui m'intéresse c'est le résultat de la recherche. Dans l'interface c'est visuel, on se retrouve sur la bonne case. Par contre dans le code il faut pouvoir exploiter le contenu de la case que retourne la fonction find.

    Pour info mon but final est de rechercher "RJA-xxx.doc" dans une colonne (avec les xxx des nombres pouvant varier), puis de remplacer par un lien vers ce doc .

  7. #7
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour Gpadide


    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
    Set c = Sheets(1).Columns(4).Find(what:=T(i), lookat:=xlWhole, LookIn:=xlValues)
    'Utiliser xlFormulas au lieu de xlValues si tu veux chercher dans la formule et non dans le résultat de la formule
     
    Set result = Nothing
    If Not c Is Nothing Then
      premiere = c.Address
     Do
      MsgBox c.Address & " - " & c.Value
      If result Is Nothing Then
       Set result = c
       Else
       Set result = Union(result, c)
      End If
      Set c = Sheets(1).Columns(4).Find(what:=T(i), after:=c, lookat:=xlWhole, LookIn:=xlValues)
     Loop While c.Address <> premiere
     MsgBox result.Address
    End If
    Cordialement

    Docmarti

  8. #8
    Invité
    Invité(e)
    Par défaut Bonjour,
    la proposition de Marc d'utiliser l'enregistreur de macro est à mon sans la bonne, car l’enregistreur de marco générera un code type que tu pourra factorisé sous forme de sub.

    voila ce que dans mes jeunes années j'ai réalisé avec le générateur de macro et adapté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public SerchXls(Myrange As Range, MyCellule As Range, strRecherche, EntierCell As Boolean) As Long '
    On Error Resume Next
    SerchXls = 0
       SerchXls = Myrange.Cells.Find(What:=strRecherche, After:=MyCellule, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=EntierCell).Row
      If SerchXls <= MyCellule.Row Then SerchXls = 0
    End Function
    il ne faut pas croire, même les vieux routards de ce forum utilisent parfois le générateur, nous n'avons pas la science infuse!

    en touts cas pour ton problème c'est ce que je ferai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Macro1()
     
    ' Macro1 Macro
    'avec lenregistreur!
     
    '
        Columns("A:A").Select
        Selection.Replace What:="a", Replacement:="rdurupt", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub ReplaceTxt(Plage As Range, Quoi As String, Par As String)
     Plage.Replace What:=Quoi, Replacement:=Par, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    End Sub
    Sub TEST()
    ReplaceTxt ActiveSheet.Columns("A:A"), "DURUPT", "TOTO"
    End Sub
    Regarde ça
    http://www.developpez.net/forums/d13...e/#post7477379
    Dernière modification par Invité ; 20/12/2013 à 11h22.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/02/2011, 16h11
  2. Afficher le résultat d'une fonction dans une JList
    Par daviddu54 dans le forum Composants
    Réponses: 10
    Dernier message: 01/10/2008, 15h53
  3. Afficher le résultat d'une fonction
    Par Emilie83 dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 13/01/2008, 13h59
  4. Afficher le résultat d'une fonction dans une comboBox
    Par poussin_44 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 10/07/2007, 16h06
  5. Réponses: 6
    Dernier message: 02/10/2006, 13h13

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