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 :

Rechercher cellule si elle contient.


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut Rechercher cellule si elle contient.
    bonjours à tous, voila je cherche à écrire une macro qui me permettrai
    de faire ceci :

    chercher dans une colonne ( genre G:G ) les cellules qui contienne le mot "produit" ( qui est une variable de la macro) mais qui contienne aussi POMPE ( c'est juste un mot) , et une fois la cellule trouvé, récupéré la valeur de la colonne Q, de la meme ligne donc. comme le ferai une sumif, à la différence qu'il n'y a qu'une seule ligne qui contient mes critères donc la somme est inutile mais cette ligne n'est jamais au meme endroit.
    j'ai donc pensé à sa en 1er :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Top20 répartition h MO").Cells(18, variable3).Formula = "=SUMIF(" & Worksheets(variable1).Name & "!D:D,"" *POMPE* ""," & Worksheets(variable1).Name & "!G:G)"
    qui ne donne pas d'erreur mais qui me donne zero tout le temps, ..


    ensuite j'ai pensé à ceci, car le texte que je cherche, se présente soit
    : ( 4 espaces) produit POMPE
    soit: (2 espaces) produit POMPE
    ( produit est une variable)
    donc j'ai voulu ecrire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rendement = "=SOMMEPROD( Quantités * (Désignation="  produit POMPE")) + SOMMEPROD( Quantités * (Désignations="    produit POMPE"))"
    qui ne marche quand meme pas ...

    merci de m'aider..

  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 : 51
    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,

    Ci dessous une autre approche en utilisant la méthode Find


    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
    Dim rg As Range
    Dim strAddress As String
     
    Set rg = Range("G:G").Find(What:="produit", LookAt:=xlPart)
     
    If Not rg Is Nothing Then
        strAddress = rg.Address
        Do
            If InStr(rg.Value, "pompe") > 0 Then
                MsgBox Range("H" & rg.Row).Value
                Exit Sub
            End If
     
            Set rg = Range("G:G").FindNext(rg)
     
        Loop While Not rg Is Nothing And rg.Address <> strAddress
     
    End If

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    tout d'abord merci de votre aide, j'ai modifié le code pour mon utilisation, j'ai précisé la page, et entré les bonnes range. mais je voulais savoir comment placer ce sous programme dans ma macro ? Sans Sub ni end sub? Séparé ?
    ( j'ai bien définis les variables utilisées)
    merci
    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
     
    Set rg = Sheets(variable1).Range("D:D").Find(What:="produit", LookAt:=xlPart)
     
                        If Not rg Is Nothing Then
                            strAddress = rg.Address
                            Do
                                If InStr(rg.Value, "POMPE") > 0 Then
                                    MsgBox Range("G" & rg.Row).Value
                                    Exit Sub
                                End If
     
                                Set rg = Range("D:D").FindNext(rg)
     
                            Loop While Not rg Is Nothing And rg.Address <> strAddress
     
                        End If

  4. #4
    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 : 51
    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
    Soit tu ajoutes ce code dans une procédure existante (celle qui contient la déclaration de la variable "variable1".
    Soit l'isoler dans une Sub si cette variable est GLOBAL
    ou encore l'adapter pour en faire une fonction qui retourne les informations concernant les mots a rechercher passé en paramètres

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    d'accord je vais essayer sa, merci beaucoup, et sur une recherchev comme celle ci que j'execute en vba uniquement, quelle est la syntaxe, car je m'y perds en faisant reference à une feuille spécifique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim utilisation as String
     
    utilisation = Application.VLookup(Worksheets(variable1).Range(D2, G65536), "*util*", 4, False)
    merci encore

  6. #6
    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 : 51
    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
    Dans un rechercheV la valeur cherchée est avant la matrice

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim utilisation as String
     
    utilisation = Application.WorksheetFunction.VLookup("*util*", Worksheets(variable1).Range(D2, G65536), 4, False)

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    malgres sa j'ai toujours une erreur par application ou l'objet???
    je vois pas du tout l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    utilisation = Application.WorksheetFunction.VLookup("*util*", Worksheets(variable1).Range(D2, G65536), 4, False)
    merci

  8. #8
    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 : 51
    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
    Le RechercheV retourne une erreur si la valeur cherchée n'est pas trouvée.
    Ne serais tu pas dans ce cas?

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    bin je pense que non car , pour voir si en passant par excel cela marche, j'ai fait ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Top20 répartition h MO").Cells(62, variable2).Formula = "=VLookup(""*util*"", " & Worksheets(variable1).Name & "!D2:G65536, 4, False)"
    utilisation = Sheets("Top20 répartition h MO").Cells(62, variable2).Value * 1000
    et j'obtiens bien le bon résultat, mais en passant par du excel, et j'aimerai éviter cela

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    c'est bon j'ai trouvé l'erreur, voila le code correct :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    utilisation = Application.WorksheetFunction.VLookup("*UTIL*", Worksheets(variable1).Range("D2: G65536"), 4, False)

    merci encore de votre aide

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/04/2015, 13h54
  2. Réponses: 1
    Dernier message: 17/02/2013, 11h16
  3. Réponses: 4
    Dernier message: 04/08/2008, 14h13
  4. [ImageMagick] Image ne pouvant être affichée car elle contient des erreurs
    Par hutchuck dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 09/12/2005, 13h59
  5. Recherche cellule contenant une chaine
    Par the java lover dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/11/2005, 15h37

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