XL 2010 Copier donnée d'un onglet global selon nom de l'onglet ou la coller

Sissou71

XLDnaute Occasionnel
Bonjour,

Dans un onglet Global, je recense mois par mois des quantités.
J'ai pour chaque mois un onglet.
Je voudrais que dans chaque onglet mensuel il aille récupérer la quantité du mois.

Il semble que la fonction indirect soit mon amie mais je ne vois pas comment j'informe excel qu'il prend le nom de l'onglet (mois) dans lequel il est.

Pour plus de clarté, un fichier exemple ci-joint.
Merci pour votre aide.
Cécile
 

Pièces jointes

  • Test.xlsx
    22.4 KB · Affichages: 38

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir Cécile,

(...) je veux bien que tu m'expliques la partie lignes() dans le recherchev. Je comprends qu'elle fait référence au numéro de colonne mais je ne la comprends pas. (...)

=RECHERCHEV($F$1;Global!$A$1:$G$13;LIGNES($1:4);FAUX)

Une fois que RECHERCHEV a trouvé (dans le tableau Global!$A$1:$G$13 ) la ligne du mois ($F$1), il faut indiquer le numéro de colonne de la cellule à retourner. Du tableau Global, on désire retourner la valeur de la 4ème colonne, puis de la 5ème, puis de la 6ème pour terminer la 7ème.

La formule RECHERCHEV étant copiées sur des lignes successives, il faut trouver une expression qui retourne 4 sur la première ligne et qui s'incrémente de une unité à chaque fois qu'on recopie la cellule vers le bas.

C'est ici qu'intervient l'expression LIGNES($1:4)
LIGNES(Plage) renvoie le nombre de lignes de Plage.

Plage est défini comme les lignes d'une zone commençant toujours à la ligne 1 ($1)et s'étendant jusqu'à la ligne 4 ( :4) soit $1:4
LIGNES($1:4) renvoie donc le nombre 4.

Quand on recopie la formule RECHERCHEV vers le bas, l'expression LIGNES($1:4) devient respectivement:
LIGNES($1:5), LIGNES($1:6), LIGNES($1:7) termes qui retournent respectivement 5 , 6, 7
 
Dernière édition:

klin89

XLDnaute Accro
Bonjour à tous,:)

Pour le fun, une solution sans formules :
VB:
Option Explicit
Sub Ventile()
Dim a, i As Long, j As Long
Dim ws As Worksheet, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    a = Sheets("Global").[a1].CurrentRegion.Value
    For i = 2 To UBound(a, 1)
        Set dico(a(i, 1)) = CreateObject("Scripting.Dictionary")
        dico(a(i, 1)).CompareMode = 1
        For j = 4 To UBound(a, 2)
            If a(i, j) <> "" Then dico(a(i, 1))(a(1, j)) = a(i, j)
        Next
    Next
    Application.ScreenUpdating = False
    For Each ws In Worksheets
        If dico.exists(ws.Name) Then
            With ws.Range("a3").CurrentRegion
                .Columns(2).ClearContents
                For i = 1 To .Rows.Count
                    If dico(ws.Name).exists(.Cells(i, 1).Value) Then
                        .Cells(i, 2).Value = dico(ws.Name)(.Cells(i, 1).Value)
                    End If
                Next
            End With
        End If
    Next
    Application.ScreenUpdating = True
End Sub
klin89
 

Discussions similaires

Statistiques des forums

Discussions
312 163
Messages
2 085 860
Membres
103 006
dernier inscrit
blkevin