Simplification code VBA

Bonjour !

C'est super ça fonctionne à merveille et c'est optimisé au maximum selon ce que je cherche à faire !

Merci mille fois !

Pour ce qui est de la ligne vide pas de soucis !

Il s'agissait d'une mauvaise pratique de ma part car en insérant ma ligne en ligne 2 la nouvelle ligne prenait la mise en forme de la 1ere ligne (ce que je ne voulais pas).

Mais votre solution est plus cohérente et fonctionne alors c'est top ! Encore merci à vous

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

Bonjour LouReeD !

Excusez moi pour ce retour tardif. Je vient de prendre connaissance de votre proposition qui fonctionne en effet !

Je vous remercie pour ce retour qui est un vrai plus pour moi (j'apprends...).

Bonsoir,

pas de soucis, j'intervenais en plus de la solution données afin de mettre en avant l'un (des nombreux) avantages des tableaux structurés sous Excel.

Ensuite lorsqu'une structure de code parait se répéter, je cherche à savoir si une boucle est possible, quelque fois c'est simple, quelque fois il faut passer pas des tableaux, mais alors seul ces derniers sont à mettre à jour pour modifier le code plutôt que de faire des copier coller...

Mais je en sais si c'est vraiment utile de faire ceci si ce n'est dans le cadre d'une "réduction de ligne de code VBA" !

Merci pour votre retour et remerciement !

@ bientôt

LouReeD

Bonsoir,

Quoi qu'il en soit votre solution fonctionne très bien et elle me permets de regarder les choses sous un autre angle (c'est parfait pour moi qui apprend).

Ma demande était une "simplification du code" mais je cherchais en effet à optimiser au mieux le code.

Encore merci à vous.

Bonne soirée.

Rechercher des sujets similaires à "simplification code vba"