Bonsoir,
je me permet de vous proposer ceci :
Sub versionf_simplifiee()
Dim wsSource As Worksheet, wsDest As Worksheet
Dim Tablo As ListObject, Lrow As ListRow
Dim ListDonnée As String, tabloCel, tabloCol
' on arrête la mise à jour de l'écran
Application.ScreenUpdating = False
' Définir les feuilles source et de destination
Set wsSource = ThisWorkbook.Sheets("Formulaire")
Set wsDest = ThisWorkbook.Sheets("Contact prestataires")
' on défini le tableau structuré de la feuille de destination
Set Tablo = wsDest.ListObjects(1)
' ici on crée la liste des cellules du formulaire dans l'ordre du tableau de destination
ListDonnée = "H8-H11-H14-L11-L14-H17-H20-H23-L20-L23"
' on découpe cette valeur en tableau
tabloCel = Split(ListDonnée, "-")
' on crée le tableau des colonnes dans l'ordre d'insertion
tabloCol = Array(1, 3, 4, 5, 6, 7, 8, 9, 12, 13)
' Insérer une nouvelle ligne en haut du tableau de la feuille
Set Lrow = Tablo.ListRows.Add(1)
' on boucle sur le nombre de données à inscrire
For i = 0 To 9
' on met les données dans les différentes cellules de la ligne créée
Lrow.Range.Cells(1, tabloCol(i)).Value = wsSource.Range(tabloCel(i)).Value
Next i
' Effectuer une opération de découpage de texte pour la nouvelle ligne en haut
wsDest.Cells(2, 1).TextToColumns Destination:=wsDest.Cells(2, 2), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 1), Array(3, 9)), TrailingMinusNumbers:=True
' Effacer les données de la feuille source
Range("ZoneFormulaire").ClearContents
End Sub
Avec la mise en place d'un tableau structuré qui permet lors de l'ajout d'une ligne de faire la recopie des mise en formes des cellules "en colonne".
J'ai également sélectionner toutes les cellules "données" du formulaire en lui donnant un nom : ZoneFormulaire, comme cela pour effacer les données il suffit de renseigner "seulement" le nom pour effacer.
Le fichier :
@ bientôt
LouReeD