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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
Public i As Integer
Public ClasseurOuv As String
Public ClasseurOrg As String
Public FeuilleOrg As String
Public Sub Copier_Click()
'=macro de copiage des feuilles du classeur ouvert vers le classeur d'origine=
Dim liste_feuilles() As String, taille_tableau As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'== on défini la feuille du classeur d'origine qui servira de repère au moment de la copie ==
With UsfImport.ListeOrg
For i = 0 To .ListCount - 1
If .Selected(i) Then
FeuilleOrg = .List(i)
Exit For
End If
Next i
End With
'== on rempli la variable tableau avec les items sélectionnés dans la liste de gauche ==
With UsfImport.Liste
For i = 0 To .ListCount - 1
If .Selected(i) Then
On Error Resume Next
taille_tableau = UBound(liste_feuilles)
If Err.Number <> 0 Then
taille_tableau = 0
ReDim liste_feuilles(0)
Err.Clear
Else
taille_tableau = taille_tableau + 1
ReDim Preserve liste_feuilles(taille_tableau)
End If
liste_feuilles(taille_tableau) = Sheets(.List(i)).Name
On Error GoTo 0
End If
Next i
End With
'== on vérifie que l'utilisateur a bien choisi où il voulait copier ses feuilles ==
If Avant.Value = False And Apres.Value = False Then
MsgBox ("Veuillez précisez à quel endroit du classeur voulez-vous copier les feuilles sélectionnées")
Avant.SetFocus
Exit Sub
End If
'== PROVISOIRE == on regarde ce qu'il y a dans la variable tableau ==
MsgBox Join(liste_feuilles, vbLf)
'== si on choisi de copier avant ==
If Avant.Value = True Then
Sheets(liste_feuilles).Copy before:=Workbooks(ClasseurOrg).Sheets(FeuilleOrg)
'on copie les éléments de la variable tableau
'réactualisation de la liste des feuilles du classeur d'origine
Workbooks(ClasseurOrg).Activate
UsfImport.ListeOrg.Clear
For i = 1 To Sheets.Count
UsfImport.ListeOrg.AddItem Sheets(i).Name
Next i
'on pose la question d'une autre copie
Select Case MsgBox("Autre copie ?", vbQuestion + vbYesNo)
Case vbYes 'si oui on sort en laissant tout ouvert
Exit Sub
Case vbNo 'si non on ferme tout en réinitalisant les listes
Workbooks(ClasseurOuv).Close
UsfImport.Liste.Clear
UsfImport.ListeOrg.Clear
UsfImport.Hide
Exit Sub
End Select
'== idem si on choisi de copier après ==
ElseIf Apres.Value = True Then
Sheets(liste_feuilles).Copy after:=Workbooks(ClasseurOrg).Sheets(FeuilleOrg)
'réactualisation de la liste des feuilles du classeur d'origine
Workbooks(ClasseurOrg).Activate
UsfImport.ListeOrg.Clear
For i = 1 To Sheets.Count
UsfImport.ListeOrg.AddItem Sheets(i).Name
Next i
Select Case MsgBox("Autre copie ?", vbQuestion + vbYesNo)
Case vbYes
Exit Sub
Case vbNo
Workbooks(ClasseurOuv).Close
UsfImport.Liste.Clear
UsfImport.ListeOrg.Clear
UsfImport.Hide
Exit Sub
End Select
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Private Sub UserForm_Activate()
Dim Chemin As Variant
Dim Ws As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
UsfImport.Liste.Clear
UsfImport.ListeOrg.Clear
ClasseurOrg = ActiveWorkbook.Name
For i = 1 To Sheets.Count
UsfImport.ListeOrg.AddItem Sheets(i).Name
Next i
Chemin = Application.GetOpenFilename("Classeurs Microsoft Exel(*.xls),*.xls")
If Chemin = False Then
UsfImport.Hide
Exit Sub
End If
Workbooks.Open Chemin
ClasseurOuv = ActiveWorkbook.Name
For i = 1 To Sheets.Count
UsfImport.Liste.AddItem Sheets(i).Name
Next i
UsfImport.Classeur.Value = ClasseurOuv
UsfImport.Origine.Value = ClasseurOrg
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub |
Partager