1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim F As FileDialog 'déclare la variable F (Fichier)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim DL As Integer 'déclare la variable DL(dernière ligne)
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 Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau de lignes)
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Sheets("Feuil1") 'définit l'onglet destination OD
CH = CD.Path 'définit le chemin d'accès (à adapter à ton cas, ici j'ai pris le dossier où se trouve le classeur destination)
Set F = Application.FileDialog(msoFileDialogOpen) 'définit le fichier F
With F 'prend en compte le fichier F
.InitialFileName = CH 'chemin par défaut
.Filters.Add "Classeurs Excel", "*.xls" 'type de fichiers par défaut
.AllowMultiSelect = False 'ne permet la sélection que d'un seul fichier
If .Show = -1 Then 'si bouton "Ouvrir"
.Execute 'ouvre le fichier sélectionné
Else 'sinon
Exit Sub 'sort de la procédure
End If 'fin de la condition
End With 'fin de la prise en compte du fichier F
Set CS = ActiveWorkbook 'définit le classeur source CS
Set OS = CS.Sheets(Split(CS.Name, ".")(0)) 'définit l'onglet source OS (enlève l'entension du fichier)
DL = OS.Cells(Application.Rows.Count, 3).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 3 (=C) de l'onglet OS
TC = Range("C17:F" & DL) 'définit le tableau de cellules TC
K = 1 'initialise la variable K
For I = 1 To UBound(TC(I, 1)) 'boucle 1 : sur toutes les lignes I du tableau de cellues TC
If TC(I, 1) = 1 Then 'condition : si la valeur ligne I colonne 1 (=> Colonne C) de TC est égale à 1
ReDim Preserve TL(1 To 3, 1 To K) 'redimentsionne le tableau TL (3 lignes, K colonnes)
For J = 1 To 3 'boucle 2 : sur les 3 lignes J de TL
TL(J, K) = TC(I, J + 1) 'récupère dans la ligne J de TL la colonne J+1 de TC (Tranposition)
Next J 'prochaine ligne de la boucle 3
K = K + 1 'incrémente K (ajoute une colonne à TL)
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
'si K est supérieur à 1, renvoie dans la cellule A2 (redimensionnées) de l'onglet OD, le tableau TL transposé
If K > 1 Then OD.Range("A2").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
CS.Close SaveChanges:=False 'ferme le classeur source CS sans l'enregister
End Sub |
Partager