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 :

Fonction "Find" sous VBA Excel


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Par défaut Fonction "Find" sous VBA Excel
    Bonjour à tous

    j'ai dans une colonne B une liste de titres de différentes publications, dont certains contiennent le mot "SWOT". J'aimerais à chaque fois qu'apparaît ce mot dans un titre lui attribuer un id type particulier (par exemple 1) dans une colonne appelée id-type(=colonne A)

    J'ai essayé le code suivant mais ça ne marche pas du tout. On dirait que le logiciel ne repère pas le mot SWOT dans la colonne B et attribue 1 indifféremment dans la colonne A. J'ai essayé avec et sans boucle. Est-ce que qqn peut m'aider ? Merci d'avance. Hélène

    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
    Sub swot()
    '
    ' swot Macro
     
    Dim*Trouve*As*Range,*PlageDeRecherche*As*Range
    Dim*Valeur_Cherchee*As*String
     
    Set PlageDeRecherche = Sheets("Feuil1").Range("B2:B7")
    Valeur_Cherchee = "SWOT"
    Set Trouve = PlageDeRecherche.Cells.find(what:=Valeur_Cherchee, LookAt:=xlWhole)
    For i = 2 To 7
    If Trouve Is Nothing Then
    Sheets("Feuil1").Range("A2:A7").Value = 1
    Else
     
    Sheets("Feuil1").Range("A2:A7").Value = 2
    End If
    Next i
    End Sub

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    pour 'contient' c'est LookAt:=xlPart
    L'aide excel t'aurait fourni la réponse tout de suite.
    eric

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 138
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 138
    Par défaut
    Bonjour,

    Ton code est un peu bizarre avec tes astérisques et l'erreur signalée par eriiic, je te propose celui-ci qui fonctionne
    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
    Sub swot()
    '
    ' swot Macro
     
    Dim Trouve As Integer, i As Integer
    Dim Valeur_Cherchee As String
     
    Valeur_Cherchee = "SWOT"
    For i = 2 To 7
        Trouve = InStr(1, Range("B" & i), Valeur_Cherchee)
        If Trouve = 0 Then   ' non trouvé
            Sheets("Feuil1").Range("A" & i).Value = 1
        Else    ' trouvé
            Sheets("Feuil1").Range("A" & i).Value = 2
        End If
    Next i
    End Sub

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en utilisant la formule NB.SI comme tel (exemple sur A2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NB.SI(B2;"*SWOT*");1;2)
    On obtient en A2 la valeur 1 si B2 contient SWOT, sinon la valeur de A2 sera 2

    On utilise cette formule via la propriété R1C1 pour appliquer la formule sur la plage A2:A7

    et si pas besoin de conserver les formules, on remplace par sa valeur

    ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub toto()
    ' des variables pour faciliter la lecture
    ' et la maintenance
    Const LaValeur As String = "SWOT"
    Dim Plage As Range
     
    Set Plage = Range("A2:A7")
        With Plage
            .FormulaR1C1 = "=IF(COUNTIF(RC[1],""*" & LaValeur & "*""),1,2)"
            .Value = .Value ' pour remplacer les formules par la valeur
        End With
    End Sub
    D'autres méthodes possibles, suivant le contexte

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    Dans le cadre ou tu utilise une nouvelle colonne alors ne pas se priver de formule je suis Joe sur ce coup la
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    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 !

    Joe, il est possible d'utiliser directement la propriété Formula
    ou encore FormulaLocal pour une version française d'Excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Demo()
        With [A2:A7]
            .FormulaLocal = "=SI(NB.SI(B2;""*SWOT*"");1;2)"
                 .Formula = .Value
        End With
    End Sub
    Sinon ne pas oublier de libérer les variables de type objet (Range) en fin de procédure …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Par défaut Fonction "Find" sous VBA Excel
    Merci pour toutes vos propositions. Elles m'ont aidé à résoudre mon pb.

    Bonne soirée,

    Hélène

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

Discussions similaires

  1. [XL-2007] Fonction Left sous VBa EXCEL
    Par FramanKalima dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 18/06/2015, 21h50
  2. Formater le résultat d'une fonction perso sous VBA Excel
    Par miron_fds dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/06/2013, 15h07
  3. ptit probleme combobox sous vba/excel
    Par bandito dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/10/2006, 09h34

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