Menu

Macro, excel, rechercher une valeur [Résolu/Fermé]

Messages postés
24
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
21 décembre 2011
- - Dernière réponse : michel_m
Messages postés
15831
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2019
- 21 déc. 2011 à 16:08
Bonjour,

Je souhaiterai rechercher une valeur dans une feuille et la mettre dans une autre.*Mon problème aujourd'hui c'est que cette valeur n'est pas toujours sur la même ligne. Je m'explique :

La feuille ou je veux récuperer la valeur change tous les mois, donc je la change automatiquement via ma macro et de ce fait des lignes peuvent être rajoutée et ma valeur chercher decalé.

J'avais pensé utilisé :
.formulalocal ="=Recherchev("TOTAL";A:A;18)


seulement comme TOTAL peut varier de ligne suivant les mois cela ne fonctionne pas!

J'essai avec .Find mais je n'arrive à aucun résultat.

Clairement, je souhaiterai pouvoir récuperer une valeur dont la colonne ne change jamais mais la ligne change, par contre la valeur de ma 1ère colonne de la ligne qui m'intéresse ne change jamais c'est "TOTAL"

Es ce quelqu'un pourrait m'aider je suis perdu...

Sub Gest()

'Activation du fichier
classeur1 = ActiveWorkbook.Name

Workbooks("" & classeur1 & "").Activate
'X = n° de chantier
X = Sheets("Données").Range("B1")
'Suppression ancienne feuille de gestion
Application.DisplayAlerts = False
Sheets("feuille de gestion").Delete

Application.DisplayAlerts = True

'Ouverture de la feuille de gestion sur le Serveur Progib
Workbooks.Open "\\192.168.1.3\chantier\snee\" & X & "\" & X & ".xls"
'Activation feuille de gestion et copie dans le découpage
Workbooks("" & X & ".xls").Activate
Workbooks("" & X & ".xls").Sheets("Feuil1").Copy Before:=Workbooks("" & classeur1 & "").Sheets("GENERAL")
Workbooks("" & classeur1 & "").Activate
'Renomme la feuille de gestion
Sheets("Feuil1").Name = ("feuille de gestion")
'fermeture de la feuille de gestion du serveur Progib
Workbooks("" & X & ".xls").Close False

'Remplissage des cases dans le Gestion
Y = Sheets("feuille de gestion").Range("AD9")
Worksheets("Gestion").Range("I6") = Y
W = Range("S65536").End(xlUp).Offset(0, 0)
Worksheets("Gestion").Range("D5") = W
Z = Sheets("PRimes").Range("D24")
Worksheets("Gestion").Range("D27") = Z * 2
O = Range("R65536").End(xlUp).Offset(0, 0)
M = Sheets("Gestion").Range("D7")
N = Sheets("Gestion").Range("D9")
P = Sheets("Gestion").Range("D19")
Q = Sheets("Gestion").Range("D25")
Worksheets("Gestion").Range("J35") = O + M + N + P + Q
'R = Sheets("feuille de gestion").Range("J9")
'S = Sheets("feuille de gestion").Range("R9")
'Worksheets("Gestion").Range("I33") = R
'Worksheets("Gestion").Range("I35") = S
Worksheets("Gestion").Range("I33").FormulaLocal = "=RECHERCHEV('Données'!H1;'feuille de gestion'!A3:AJ37;1)"
Worksheets("Gestion").Range("I35").FormulaLocal = "=RECHERCHEV('Données'!H1;'feuille de gestion'!A3:AJ37;1)"

T = Range("J65536").End(xlUp).Offset(0, 0)
U = Range("I65536").End(xlUp).Offset(0, 0)
Worksheets("GS MO").Range("B4") = T / U
V = Sheets("feuille de gestion").Range("AE4")
Worksheets("Gestion").Range("L10") = V
Worksheets("GS MO").Range("B7") = T


End Sub


Afficher la suite 

3 réponses

Messages postés
118
Date d'inscription
dimanche 14 septembre 2008
Statut
Membre
Dernière intervention
30 août 2012
24
0
Merci
Bonjour Clemdore,

j'ai une solution toute simple à te proposer, je te la pose ici dans quelques minutes (le temps que je rentre chez moi en fait :))

@ tout'
Phoenellion
Messages postés
118
Date d'inscription
dimanche 14 septembre 2008
Statut
Membre
Dernière intervention
30 août 2012
24 -
Donc !

ce que je te propose, c'est de faire une boucle qui va lire la colonne et chercher la valeur que tu veux :

Je pars du principe que ta colonne TOTAL est la colonne H, et qu'il n'y a pas de cellule vide, et comme je ne sais pas si la valeur que tu recherche est fixe, je la mets également en variable.

Cette macro va lire la colonne H et ouvrir une MsgBox en indiquer quelle cellule contient Ma_Valeur.

Sub Toto()

Dim i, x as Long
Dim Ma_Valeur as Variant

x = cells (1,8).End(XlDown).Row
'ceci va chercher le numéro de la dernière ligne de la colonne H

For i = 1 to x
     If Cells (i,8).Value = Ma_Valeur Then MsgBox "Valeur trouvée en H" & i
Next i
End Sub


A adapter selon tes besoins
Messages postés
15831
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2019
2725
0
Merci
Bonjour

dans ta ligne
Worksheets("Gestion").Range("I33").FormulaLocal = "=RECHERCHEV('Données'!H1;'feuille de gestion'!A3:AJ37;1)"

tu oublies le 0 de recherchev puisque tu cherches une valeur exacte

Worksheets("Gestion").Range("I33").FormulaLocal = "=RECHERCHEV('Données'!H1;'feuille de gestion'!A3:AJ37;1;0)"

mais on ne voit pas l'intérêt dans ce cas d'utiliser VBA pour écrire une formule !

si tu veux du VBA, cela se fait sans boucler avec la fonction FIND. on suppose que la valeur dans H1 existe dans la colonne et est différent de "" ou 0
'....  
With Sheets("Gestion")  
     xxx = Sheets("données").Range("H1")  
     lig = .Columns("A").Find(xxx, .Range("A2"), xlValues).Row  
     .Range("I33") = .Cells(lig, "A")  
     .Range("I35") = .Range("I33")  
End With


au passage: il ya beaucoup de choses à améliorer dans ton code, mais c'est un autre problème

Michel
Messages postés
24
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
21 décembre 2011
0
Merci
Bonjour,

Je vous remercie tous les 2! Mais hier soir j'ai travailler dur et j'ai réussi !! Je vous envoie mon code :
Sub Gest()
'Activation du fichier
classeur1 = ActiveWorkbook.Name

Workbooks("" & classeur1 & "").Activate
'X = n° de chantier
X = Sheets("Données").Range("B1")
'Suppression ancienne feuille de gestion
Application.DisplayAlerts = False
Sheets("feuille de gestion").Delete

Application.DisplayAlerts = True
 
'Ouverture de la feuille de gestion sur le Serveur Progib
Workbooks.Open "\\192.168.1.3\chantier\snee\" & X & "\" & X & ".xls"
'Activation feuille de gestion et copie dans le découpage
Workbooks("" & X & ".xls").Activate
Workbooks("" & X & ".xls").Sheets("Feuil1").Copy Before:=Workbooks("" & classeur1 & "").Sheets("GENERAL")
Workbooks("" & classeur1 & "").Activate
'Renomme la feuille de gestion
Sheets("Feuil1").Name = ("feuille de gestion")
'fermeture de la feuille de gestion du serveur Progib
Workbooks("" & X & ".xls").Close False
 
'Remplissage des cases dans le Gestion
Y = Sheets("feuille de gestion").Range("AD9")
Worksheets("Gestion").Range("I6") = Y
W = Range("S65536").End(xlUp).Offset(0, 0)
Worksheets("Gestion").Range("D5") = W
Z = Sheets("PRimes").Range("D24")
Worksheets("Gestion").Range("D27") = Z * 2
O = Range("R65536").End(xlUp).Offset(0, 0)
M = Sheets("Gestion").Range("D7")
N = Sheets("Gestion").Range("D9")
P = Sheets("Gestion").Range("D19")
Q = Sheets("Gestion").Range("D25")
Worksheets("Gestion").Range("J35") = O + M + N + P + Q
T = Range("J65536").End(xlUp).Offset(0, 0)
U = Range("I65536").End(xlUp).Offset(0, 0)
Worksheets("GS MO").Range("B4") = T / U
V = Sheets("feuille de gestion").Range("AE4")
Worksheets("Gestion").Range("L10") = V
Worksheets("GS MO").Range("B7") = T

'Valeur théorique devis

Dim FindString As String
    Dim Rng As Range
    FindString = "TOTAL PREVISIONS"
    'InputBox("chercher mot")
    If Trim(FindString) <> "" Then
        With Sheets("feuille de Gestion").Range("A:A")
            Set Rng = .Find(What:=FindString, _
                            After:=.Cells(.Cells.Count), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)
            If Not Rng Is Nothing Then
                Application.Goto Rng, True
            Else
                MsgBox "Nothing found"
            End If
        End With
    End If
i = ActiveCell.Column
j = ActiveCell.Row
d = ActiveCell.Column + 5
Value = ActiveCell.Offset(0, 9).Value
Value2 = ActiveCell.Offset(0, 17).Value
 
Worksheets("Gestion").Range("I33") = Value
Worksheets("Gestion").Range("I35") = Value2


End Sub


Bonne journée

@Michel : Oui je pense qu'il y a bcp de chose a améliorer dans mon code, mais je suis assez fier de ma 1ere macro lol
michel_m
Messages postés
15831
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2019
2725 -
Oui, c'était pas méchant, ma remarque; pour une 1° macro tu as un AAA+ :o)