Macro VBA sur tableaux dynamique

5thierry-36.xlsm (37.60 Ko)

Bonjour à tous :-)

Je suis un "neophite" en matiere de Visual Basic sur Excell...
j'essaye d'apprendre en faisant!...mais c'est dur...

Si quelqu'un pouvait m'aider à résoudre ce probleme
A savoir à partir d'un tableau dynamique (voir fichier ci-joint) mis dans onglet data,
-créer une macro dans onglet "export "
qui trie ces data en ne recopiant que les lignes qui contiennent le "Country Id", 1, 3 et 10
et en supprimant aussi la colonne A
-puis créer une message box (type Input Box?) qui demande ensuite
quel "Country Id" (parmi ces 3) on souhaite visualiser (soit dans cet onglet "Export" soit dans un autre)
A savoir tous les 3 "Id", ou 2 ou 1 seul (au choix)

Merci de votre aide!
Cordialement

Bonjour,

Je ne vois pas de TCD dans votre exemple. D'ailleurs à partir d'un TCD justement vous pourriez trés facilement obtenir une extraction des infos souhaitées.

Voir exemple en retour :

TCD qui filtre sur ID 1, 3, 10 ---> donne un total général de lignes trouvées de 18.

Un double clic sur le 18 et vous avez votre nouvel onglet avec uniquement votre sélection.

2thierry-36.xlsm (47.81 Ko)

Bonjour le fil, bonjour le forum,

En pièce jointe ton fichier modifié avec un tableau structuré dans l'onglet Export et le code ci-dessous :

Sub Macro1()
Dim OD As Worksheet 'déclare la variable OD (Onglet Data)
Dim OE As Worksheet 'déclare la variable OE (Onglet Export)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TP(1 To 3) As Byte 'déclare la variable TP (Tableau des Pays)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set OD = Worksheets("Data") 'définit l'onglet OD
Set OE = Worksheets("Export") 'définit l'onglet OD
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe a la ligne suivante)
OE.ListObjects(1).DataBodyRange.Delete 'efface les données de l'onglet OE (génère une erreur si déjà vide)
On Error GoTo 0 'annule la gestion des erreurs
TV = OD.Range("A1").CurrentRegion 'définuit le tableau des valeurs TV
TP(1) = 1: TP(2) = 3: TP(3) = 10 'définit les 3 pays dans le tableau des pays
For J = 1 To 3 'boucle 1 : sur les 3 pays
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
        If TV(I, 5) = TP(J) Then 'condition : si la données ligne I colonne 5 de TV (le code pays) correspond au pays de la boucle 1
            K = K + 1 'incrémente K
            ReDim Preserve TL(1 To UBound(TV, 2), 1 To K) 'redimensionne le tableau des lignes (autant de lignes que TV a de colonnes, K colonnes)
            For L = 1 To UBound(TV, 2) 'boucle 3 : sur toutes les colonnes L du tableau des valeurs TV
                TL(L, K) = TV(I, L) 'récupère dans la ligne L de TL la données e colonne L de TV (=> tranposition)
            Next L 'prochaine colonne de la boucle 3
        End If 'f'in de la condition
    Next I 'prochaine ligne de la boucle 2
Next J 'prochain pays de la boucle 1
'si K est supérieure à 0, renvoie le tableau transposé dans la cellule A2 redimensionnée de l'onglet OE
If K > 0 Then OE.Range("A2").Resize(K, UBound(TV, 2)).Value = Application.Transpose(TL)
OE.ListObjects(1).Resize OE.Range("A1").CurrentRegion 'redimensionne le tableau structuré "Tableau1"
End Sub

Le fichier :

Merci ThauTheme!

impressionnant de rapidité!

en revanche pour ma question sur apparition d'un message dans une input Box?

faisable, pas faisable?

Pour repondre a Xmenpl

TCD = ca veut dire quoi?

je n'ai pas compris la remarque...

Vous pourriez clarifier, SVP?

merci à tous !

Re,

la version 02 en pièce jointe avec une UserForm :

Rebonsoir

Je viens de modifier le fichier que m'a renvoyé Thautheme (version1)

pour ajouter la fonction "delete" de la colonne A

pour ca j'ai du ajouter quelques lignes (simple!), mais

j' ai du passer la ligne suivante en commentaire...

OE.ListObjects(1).Resize OE.Range("A1").CurrentRegion

car sinon ca bug...mais du coup ca detruit toute la lise en forme?

que puis je faire? (voir fichier joint)

Pour xmpl, j'ai vu qu'il fallait creer des Tables Pivot...mais je ne sais pas faire...comment on fait?

merci

Bonjour a tous

J'ai essayé de reprendre cette macro sur un fichier avec plus de data

ca plante, il n'aime pas cette ligne la! pourquoi?

"OE.ListObjects(1).Resize OE.Range("A1").CurrentRegion"

elle fait quoi?

Par ailleurs serait il possible d'avoir un formattage (grille simple en noir) sans surlignement des lignes en bleu une fois sur 2?

car la aussi c'est la meme fonction ci-dessus qui fait ca!

merci de votre aide

Re,

La version 3 en pièce jointe :

Rechercher des sujets similaires à "macro vba tableaux dynamique"