Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2011, 11h54   #1
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
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 :
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 :
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..
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 12h35   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 907
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 907
Points : 7 202
Points : 7 202
Bonjour,

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


Code :
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
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 13h37   #3
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
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 :
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
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 13h58   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 907
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 907
Points : 7 202
Points : 7 202
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
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 14h51   #5
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
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 :
1
2
3
dim utilisation as String
 
utilisation = Application.VLookup(Worksheets(variable1).Range(D2, G65536), "*util*", 4, False)
merci encore
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 15h11   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 907
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 907
Points : 7 202
Points : 7 202
Dans un rechercheV la valeur cherchée est avant la matrice

Code :
1
2
3
dim utilisation as String
 
utilisation = Application.WorksheetFunction.VLookup("*util*", Worksheets(variable1).Range(D2, G65536), 4, False)
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 15h20   #7
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
malgres sa j'ai toujours une erreur par application ou l'objet???
je vois pas du tout l'erreur

Code :
utilisation = Application.WorksheetFunction.VLookup("*util*", Worksheets(variable1).Range(D2, G65536), 4, False)
merci
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 15h36   #8
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 907
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 907
Points : 7 202
Points : 7 202
Le RechercheV retourne une erreur si la valeur cherchée n'est pas trouvée.
Ne serais tu pas dans ce cas?
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 15h45   #9
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
bin je pense que non car , pour voir si en passant par excel cela marche, j'ai fait ceci:

Code :
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
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 09h50   #10
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
c'est bon j'ai trouvé l'erreur, voila le code correct :


Code :
utilisation = Application.WorksheetFunction.VLookup("*UTIL*", Worksheets(variable1).Range("D2: G65536"), 4, False)

merci encore de votre aide
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h37.


 
 
 
 
Partenaires

Hébergement Web