Affichage dynamique plage de données

Bonjour,

Je cherche à afficher une plage de données présente dans l'onglet "Données" dans une plage de cellule (identique en nombre de cellule) dans l'onglet "Affichage" suite à une recherche de référence (attribué à chaque plage de données dans "Données) dans l'onglet PARAMS.

L'onglet PARAMS presente les plages de cellule (de l'onglet "Données) à afficher dans l'onglet "Affichage" suivant la référence de la cellule K4 dans l'onglet Affichage.

La destination dans l'onglet "Affichage" est la plage de cellules : (B4:E10)

J'avais avant cette macro pour afficher / masquer mes lignes mais elle ne correspond plus à mon besoin.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
    If Target.Address = "$H$4" or Target.Address = "$I$4" or Target.Address = "$J$4" or Target.Address = "$K$4" Then
        With Sheets("Params")
        [2:36].EntireRow.Hidden = False
            Set c = .[A:D].Find(Range("$K$4").Value, , xlValues, xlWhole)
            If Not c Is Nothing Then Range(.Cells(c.Row, "E").Value).EntireRow.Hidden = False
        End With
    End If
End Sub

En pièce le fichier avec les données.

Pouvez vous m'aider?

Merci

B.

Bonjour

Pourquoi VBA alors qu'un simple formule suffit ?

Pourquoi 3 ou 4 paramètres alors que tu n'as pas prévu de combinatoires ?

Bonjour Chris,

J'ai simplifié ma demande pour obtenir de l'aide.

En réalité, j'ai plus de 20 000 references possibles

Re

Sans fichier vraiment REPRESENTATIF on risque de passer 20 post à trouver la solution correspondant au cas réél...

Edit : et le nombre de références n'empêche pas de traiter par une formule si la plage à restituer n'est pas plus grande

et les références 1/2/3/4 sont bien différentes pour chaque lignes.

Pour chaque ligne dan PARAM, 4 references différente peuvent afficher le même résultat.

En fait je cherche juste à modifier la macro ci-dessus pour qu'elle est pour instruction :

Si elle trouve la ref dans PARAMS

alors elle affiche la plage de données (de l'onglet Données") correspondante à la ref dans la plage de données (B4:E10) de l'onglet "Affichage"

Cependant, si tu a une formule à proposer, je suis preneur

RE

dans la mesure où les combinatoires ne sont pas visibles dans l'exemple

je te donne un code VBA : le tableau de paramètres a été mis sous forme de tableau structuré nommé Params

Hello

J'ai essayé d'inserer la macro dans mon fichier mais il y a un bug.

Peux tu m'aider ?

Une idee ?

Je suis bloqué les amis

Re

pas de MP, merci

Tu n'as pas lu attentivement mon post

je te donne un code VBA : le tableau de paramètres a été mis sous forme de tableau structuré nommé Params

Si tu suis bien cela en prenant la bonne plage (sachant qu'un tableau structuré ne doit jamais contenir de ligne vide puisque qu'il s'auto agrandit) le code fonctionne

code code2

Super, ca fonctionne presque.

Je ne connaissais pas les tableaux structurés.

La macro fonctionne mais lorsque que je modifie ma référence, les résultats ne s'affiche pas automatique.

Par contre, si je change d'onglet puis je reviens sur l'onglet ou s’affiche les résultats, les résultats sont bien la.

Une idée ?

RE

C'est bizarre chez moi cela fonctionne instantanément mais le souci c'est que tu as 4 cellules à saisir et cela lance le code à chaque saisie donc si ton vrai fichier est gros avec déjà beaucoup de calculs, tu as peut être un temps mort

C'était ta logique de lancer le code pour chaque cellule, que j'ai gardé.

Hello,

Ma logique est celle d'un novice malheuresement........

Je comprend pas pourquoi je dois aller sur un autre onglet puis revenir sur le premier pour voir les resultats ????

En tout cas, ca fonctionne. Merci merci

Autre chose, j'aimerai dupliquer la macro sur la meme feuille pour afficher les resultats a deux endroits differents.

Je ne sais pas comment faire ?

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range, Valeur As String, Plage As Range

    If Intersect(Target, Range("$BZ$7:$CD$7")) Is Nothing Then Exit Sub
    Valeur = Range("CE7")
    With [Params1].ListObject.DataBodyRange
        Set Plage = .Find(Valeur)
        If Not Plage Is Nothing Then Range("B17:F21").Value = Worksheets("Données").Range(.Cells(Plage.Row - .Row + 1, 5)).Value
    End With

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range, Valeur As String, Plage As Range

    If Intersect(Target, Range("$BZ$10:$CD$10")) Is Nothing Then Exit Sub
    Valeur = Range("CE10")
    With [Params2].ListObject.DataBodyRange
        Set Plage = .Find(Valeur)
        If Not Plage Is Nothing Then Range("BL17:BP21").Value = Worksheets("Données").Range(.Cells(Plage.Row - .Row + 1, 5)).Value
    End With

End Sub

Peux tu m'aider ?

On vient de me répondre pour les deux macro et ca fonctionne.

La première macro continue à ne pas afficher les resultats si on ne va pas sur un autre onglet pour retour sur le premier

Par contre, la seconde macro fonctionne parfaitement.

Bizarre non?

RE

Sur le fichier que j'ai posté est-ce que tu as le problème ou bien c'est en la recopiant sur ton classeur ?

Comme je l'ai dit je n'ai pas ce problème sur le fichier que j'ai posté, testé sur 2 PC différents avec une version Excel différente

Donc j'ai l'impression que tes problèmes viennent de ton fichier et surtout de sa taille "En réalité, j'ai plus de 20 000 references possibles" ce qui doit forcément donner un délai de recherche supérieur au fichier exemple de 15 références...

SI d'autres peuvent tester mon fichier posté Hier à 14:31 ...ou celui d'aujourd'hui, merci

Il semblerait que tu aies maintenant 2 tableaux de paramètres ???

On ne peut par avoir 2 Private Sub Worksheet_Change(ByVal Target As Range) sur une même feuille

Si j'ai bien compris voir ci-joint

Hello,

J'aimerai modifier le texte d'une forme suivant un tableau de référence (P1.1).

Actuellement j'utilise toujours la meme macro qui me permettait d'aller chercher un plage de cellule (B17:F21)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Valeur As String, Plage As Range

    If Not Intersect(Target, Me.Range("$BY$4:$CB$4")) Is Nothing And Target.Count = 1 Then
        Valeur = Me.Range("CC4")
        With [P1.1].ListObject.DataBodyRange
            Set Plage = .Find(Valeur)
            If Not Plage Is Nothing Then Me.Range("B17:F21").Value = Worksheets("DATA").Range(.Cells(Plage.Row - .Row + 1, 5)).Value
        End With
    End If

End Sub

Maintenant, je souhaite faire pareil mais pour aller chercher le texte à afficher dans un cellule dont le numero se trouve dans P1.1 (via une recherche de reference dans CC4 et copier ce texte dans une forme nommé

ActiveSheet.Shapes.Range(Array("Rectangle : coins arrondis 26")) presente sur ma feuille.

Pouvez vous m'aider à modifier ma macro ?

Rechercher des sujets similaires à "affichage dynamique plage donnees"