VBA recherche d’une valeur à travers différentes feuilles

Bonjour,

Etant novice sur VBA, je recherche actuellement dans mon travail un code qui puisse m'aider à me faciliter la tâche au quotidien.

Je pensais avant toutes choses aux boucles de VBA sachant que je travail sur deux classeurs.

Mon problème est le suivant :

1/ Je travail sur deux classeurs

2/ Le premier classeur me permet de suivre mes opérations

Classeur = TABLEAU DE BORD (KL).xlsm

Feuille = OPERATIONS EN COURS

3/ Le second classeur regroupe le découverts de toutes mes opérations (donc une multitude de feuilles). Chaque feuilles est nommé de la manière suivante 00045787_001 (00056887_002 etc. il y a toujours trois 0 devant et _001 parfois 002 etc. mais celles-ci ne m’intéressent pas)

Classeur = 0000 Synthèse.xlsx

J'ai mis une formule qui m'a permis de nommer sur mon tableau de bord chaque opérations à ce que j'ai le bon numéro d'opération comme ci-dessus.

Le but ultime dirais-je est de trouver à partir du numéro d'opération sur mon tableau de bord (00045789_001) la valeur en H9 (même cellule que pour chaque feuille) sur le second classeur qui se nomme "DECOUVERTS AOUT 2017" à travers toutes les feuilles existantes le montant (la valeur souhaitée qui se situe en H9) à reporter en colonne AP ligne 5,6,7 etc. cela représente pour chaque ligne une opération de mon tableau de bord (Classeur 1).

En espérant avoir été compréhensible

J'ai beau rechercher à travers différentes formules mais aucune ne semble correspondent à ce que je recherche

Sachant que je ne maîtrise absolument pas VBA, je fais donc appel à vous

En vous remerciant par avance

Bonjour et bienvenue sur le forum

Tu devrais joindre te 2 classeurs, au besoin anonymisés...

Bye !

Merci,

Désolé, j'ai été un peu long mais les voilà (j'ai dû les rendre un peu plus confidentiel)

Donc j'ai pu y inscrire trois code couleurs pour être un peu plus explicite

Le but étant de retrouver à travers le classeur "000 Synthèse" (j'y est mis que quelques feuilles compte tenu de l'amplitude du fichier) le pourcentage en H9 (violet) qui serait à reporter sur le classeur "TABLEAU DE BORD (KL)" dans la colonne AP (jaune) en fonction bien-sur de chaque numéro ESI qui se retrouve dans la colonne Q (vert) et qui bien entendu ce numéro correspond à un onglet du classeur "0000 Synthèse" (il est toute fois plus facile sans doute de faire une recherche en fonction d'une cellule de chaque feuille en I3 mais il faudra cependant changer le "_" par "/" dans la formule de la colonne verte.

Voilà

Encore une fois merci de m'aider et mille merci

130000-synthese.xlsx (55.80 Ko)

Bonjour

Un essai à tester. Te convient-il ?

Bye !

Alors là super y a un énorme début toutefois il y a une erreur qui peut être vient de ma part mais je résume

J'ai effacé toutes les données dans la colonne en jaune de mon tableau de bord, une fois cette tâche effectuée j'ai sélectionné ma colonne dans son intégralité puis j'ai fais exécuter la macro "ImporterLesPourCent" tout en laissant le classeur "0000 Synthèse" ouvert.

Cela marche bien, il retrouve le numéro des feuilles dès que celles-ci apparaissent dans le tableau de bord (colonne verte) or il met le même pourcentage soit 1,31227495148777% ou 0,0131227495148777% dans la colonne en jaune sauf qu'en vérifiant bien ce n'est pas le bon résultat.

Je sens qu'on va y arriver !

Nouvel essai.

Bye !

Ça fonctionne à la perfection !

Du coup je me suis dit que j'allais essayer de me débrouiller un peu seul pour récupérer d'autres données grâce à cette macro mais cela n'a pas l'air de fonctionner

Je pense que cela est dû au faite que je veuille récupérer du texte et non une valeur (%) et au faite que je comprenne la moitié de la macro lol

Ci-dessous la macro modifiée pour récupérer la cellule L6 de "0000 Synthèse" sur le "TABLEAU DE BORD" en S

Sub ImporterLesDAT()

Set fD = ActiveSheet

On Error Resume Next

Set wS = Workbooks("0000 Synthèse.xlsx")

If Err > 0 Then

MsgBox "Le fichier " & wS.Name & " doit être ouvert.", 16

Exit Sub

End If

wS.Activate

For Each f In wS.Worksheets

If Left(wS.f.Name, 3) = "000" Then

pc = f.Range("L6").Value

Set cell = fD.Range("Q:Q").Find(f.Name, lookat:=xlWhole, LookIn:=xlValues)

If Not cell Is Nothing Then

fD.Range("S" & cell.Row) = pc

End If

End If

Next f

fD.Activate

End Sub

Bonjour

La variable pc est déclarée comme un nombre, alors que tu veux t’en servir comme une variable de texte (ce que tu as en L6).

En tout début de ma macro tu as :

Dim pc !

Enlève le point d’exclamation et cela en fera un variant c’est-à-dire qu'elle pourra être ce que tu veux. Ou mieux, mets y un dollar ce qui en fera une variable de texte.

Et tu récupéreras le contenu de la cellule L6.

Mais ce ne sera pas forcément la date…

Bye !

Niquel ça marche ! (cependant j'ai du mettre les formats des cellules en "date courte")

Comme attendu, il a repris toutes les valeurs de la cellule, est-il possible en insérant la formule STXT que je puisse garder seulement les dates dans cette même macro ?

J'ai vu qu'après quelques recherches que cette fonction s'écrivait de cette manière sous VBA .FormulaR1C1 = "=MID(Column,9,10)" (par exemple) mais le problème est où positionner cette ligne ?

Sub ImporterLesDAT()

Set fD = ActiveSheet

On Error Resume Next

Set wS = Workbooks("0000 Synthèse.xlsx")

If Err > 0 Then

MsgBox "Le fichier " & wS.Name & " doit être ouvert.", 16

Exit Sub

End If

wS.Activate

For Each f In wS.Worksheets

If Left(wS.f.Name, 3) = "000" Then

pc = f.Range("L6").Value

Set cell = fD.Range("Q:Q").Find(f.Name, lookat:=xlWhole, LookIn:=xlValues)

If Not cell Is Nothing Then

fD.Range("S" & cell.Row) = pc

End If

End If

Next f

fD.Activate

End Sub

Bonjour

Kevin34db a écrit :

est-il possible en ...que je puisse garder seulement les dates dans cette même macro ?

Désolé mais je ne vois pas ce que tu veux dire...

Bye !

Avec la formule STXT on peut sélectionner qu'une partie. C'est à dire dans un phrase par exemple si il y a une date et qu'on veuille la garder, et bien on peut le faire grâce à cette formule

Ici, j'ai Date APL : 02/12/2017 en cellule A1 par exemple

Avec cette formule je peux garder que la date soit =STXT(A1;10;10) et j'aurais dans mon autre cellule que la date

Ma question est, est-il possible d'intégrer cette formule directement dans la macro ?

Le but est qu'avec ces dates je puisses par la suite y intégrer d'autres formules dans d'autres cellules mais qui ne relève pas du langage VBA. Or, avec du texte ça rend les choses plus compliqués lol

Bonjour

Essaie ça :

Option Explicit

Dim wS As Workbook, f As Worksheet, fD As Worksheet, cell As Range
Dim pc

Sub ImporterLesDAT()

    Set fD = ActiveSheet
    On Error Resume Next
    Set wS = Workbooks("0000 Synthèse.xlsx")
    If Err > 0 Then
        MsgBox "Le fichier " & wS.Name & " doit être ouvert.", 16
        Exit Sub
    End If
    wS.Activate
    For Each f In wS.Worksheets
        If Left(wS.f.Name, 3) = "000" Then
            pc = CDate(Mid(f.Range("L6"), 12, 10))
            Set cell = fD.Range("Q:Q").Find(f.Name, lookat:=xlWhole, LookIn:=xlValues)
            If Not cell Is Nothing Then
                If pc = 0 Then pc = "Sans date"
                fD.Range("S" & cell.Row) = pc
            End If
        End If
    Next f
    fD.Activate
End Sub

Bye !

Un peu tard mais bon,

Ça marche, merci pour ton aide je gagne énormément de temps

A plus

Rechercher des sujets similaires à "vba recherche valeur travers differentes feuilles"