Transférer les données générales sur une autre feuille
Bonjour,
J'ai besoin un peu d'aide,
Ci-joint sur le fichier ci joint, je souhaite à partir du menu déroulant de la "feuille travail" rapatrier dans le tableau, les données présentes dans la feuille "données TRAM". C'est à dire, ramener dans le tableau vierge de la "feuille de travail" toutes les données matériels (toutes les lignes) correspodant la la ville selectionnée dans le menu déroullant.
La feuille "mise en forme" sert à préparer le menu déroullant de la "feuille travail" en suprimant des doublons, pour créer un menu déroulant cohérent.
merci de votre aide
Cordialement Patrice
Bonjour Patrice, bonjour le forum,
En pièce jointe ton fichier modifié avec le code commenté ci-dessous :
• dans le composant Feuil1(Feuille de travail) :
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Application.EnableEvents = False 'empêche l'exécution des procédure événementielles
Range("B8:P21").ClearContents 'efface la plage B8:P21
Select Case Target.Address 'agit en fonction de l'adresse de la cellue modifiée
Case "$C$2" 'si C2
Range("C3")(1).Value = "": Target.Offset(1, 0).Select 'vide puis sélectionne C3
Case "$C$3" 'si C3
'si C2 est vide, sort de la procédure, sinon lance ma macro "Macro1" du module "Module1"
If Range("C2")(2).Value = "" Then Exit Sub Else Module1.Macro1
End Select 'fin de l'action en fonction de l'adresse
Application.EnableEvents = True 'autorise l'exécution des procédures événementielles
End Sub• dans le module Module1 :
Sub Macro1()
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim TD() As Variant 'déclare la variable TD (Tableau des Données)
Dim K As Integer 'déclare la variable K (incrément)
Set OD = Sheets("Feuille de travail") 'définit l'onglet OD
Set OS = Sheets("Données Tram") 'définit l'onglet OS
TC = OS.Range("A1").CurrentRegion 'définit le tableau de cellules TC
K = 1 'initialise la variable K
For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes du tableau TC
'condition : si la valeur en colonne 1 de la ligne de TC est égale à la valeur en C2 de l'onglet OD
'et si la valeur en colonne 2 de la ligne de TC est égale à la valeur en C3 de l'onglet OD
If TC(I, 1) = OD.Range("C2")(1).Value And TC(I, 2) = OD.Range("C3")(1).Value Then
ReDim Preserve TD(1 To 15, 1 To K) 'redimensionne le tableau TD (autant de lignes que le tableau de l'onglet OD a de colonnes, K colonnes)
'récupères les valeur de l'onglet OS dans le tableau TD
TD(1, K) = TC(I, 4)
TD(2, K) = TC(I, 5)
TD(3, K) = TC(I, 6)
TD(4, K) = TC(I, 11)
TD(5, K) = TC(I, 9)
TD(6, K) = TC(I, 12)
TD(7, K) = TC(I, 13)
TD(8, K) = TC(I, 14)
TD(9, K) = TC(I, 15)
TD(10, K) = TC(I, 18)
TD(11, K) = TC(I, 19)
TD(12, K) = TC(I, 20)
TD(13, K) = TC(I, 21)
TD(14, K) = TC(I, 22)
TD(15, K) = TC(I, 23)
K = K + 1 'incrémente K
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
OD.Range("B8").Resize(UBound(TD, 2), UBound(TD, 1)) = Application.Transpose(TD) 'renvoie dans B8 le tableau TD transposé
End Sub
Merci ThauThème,
Ca marche effectivement bien, merci. Bien que je comprenne bien ta programmation, j'avoue que je ne sais pas bien comment cela fonctionne intégré à Exell. Je n'ai jamais fait de VB sous Exell, il faut que je comprenne comment se lancent ces petits bout de programmation dans Exell, car j'ai d'autres dev a faire.
merci
A+