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
| Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Initialisation des variables utilisées
Dim TrgLi As Integer
Dim TrgCo As Integer
Dim Colonne As Integer
Dim SelectionPlage As String
Dim CelluleCollage As String
Dim Cellule As Range
Dim SelectionVide As Boolean
Dim MonAlphabet
TrgLi = Target.Row
TrgCo = Target.Column
Application.ScreenUpdating = False 'Pour ne pas que l'écran "bouge"
If TrgLi = 1 And TrgCo = 3 Then
'Définition de la traduction chiffre lettre pour la référence des colonnes
MonAlphabet = Array("", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P")
'Pour demander la référence de la première cellule où coller
CelluleCollage = ""
Do While CelluleCollage = "" 'Test (Simpliste) que la cellule est bien donnée (en gros si on donne rien c'est pas bon
CelluleCollage = InputBox("Quelle sera la premère cellule de copie ?", "Copie")
If CelluleCollage = "" Then MsgBox ("Veuillez entrer une référence de cellule")
Loop
For Colonne = 1 To 9
Conv = MonAlphabet(Colonne) 'je convertit le chiffre de colonne en lettre pour le range
'Ici je regarde si la plage de cellule entre les lignes 6 et 25 de la colonne étudiée est totalement vide.
For Each Cellule In Range(Cells(6, Colonne), Cells(25, Colonne))
SelectionVide = True
If Cellule.Value <> Empty Then
SelectionVide = False
Exit For
End If
Next
'Si elle ne l'est pas je commence la séléction
If Not SelectionVide Then
MsgBox ("Colonne " & Conv & " séléctionnée ")
SelectionVide = False
SelectionPlage = SelectionPlage & Conv & "6:" 'Création de l'adresse de séléction a copier (range)
'Juste pour copier par bloc de colonne plutot que par colonne
Do Until SelectionVide
'Même test que précédement, la plage est-elle totalement vide ?
For Each Cellule In Range(Cells(6, Colonne + 1), Cells(25, Colonne + 1))
SelectionVide = True
If Cellule.Value <> Empty Then
SelectionVide = False
Exit For
End If
Next
'Si elle est vide on a un bloc !
If SelectionVide Then
Exit Do
'Sinon, on augmente le bloc avec la nouvelle colonne
Else
Colonne = Colonne + 1
MsgBox ("Colonne " & MonAlphabet(Colonne) & " séléctionnée ")
End If
Loop
Conv = MonAlphabet(Colonne)
'Le bloc de colonne étant défini, on le rajoute à la séléction à copier
SelectionPlage = SelectionPlage & Conv & "25,"
End If
Next
'Lorsque tout les blocs sont ajoutés à la séléction de copie, on supprime la dernière "," (pour pas ça bug)
SelectionPlage = Left(SelectionPlage, Len(SelectionPlage) - 1)
'Je copie la séléction
Range(SelectionPlage).Copy
'Je la colle anec un "Transpose"
Feuil21.Range(CelluleCollage).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=True _
, Transpose:=True
End If
'Je selectionne la cellule bouton
Target.Select
'J'annule la séléction de copie
Application.CutCopyMode = False
'Je permet à nouveau que le classeur "bouge"
Application.ScreenUpdating = True
End Sub |
Partager