Microsoft 365 Problème d'affichage lors de l'exécution d'une macro excel

lichtt

XLDnaute Nouveau
Bonjour à tous,

J'ai essayer de réaliser un fichier excel de gestion de commande en y intégrant une macro lier au remplissage d'un formulaire.
Malheureusement, à l'exécution de cette macro, j'ai des problèmes d'affichage comme des bug sur mon onglet.

En me renseignant un peu, j'ai cru comprendre que ce problème était lier à la manière dont j'ai réaliser la macro.
Ayant utilisé l'outil d'enregistrement de macro, le fait qu'il y'ait plusieurs sélection de cellule d'un onglet à l'autre provoquerait ce problème.
J'ai crus comprendre que je devait "nettoyer" ma macro afin de la rendre plus rapide et ne plus avoir cette problématique.

Malheureusement, mes compétences ne sont pas assez grandes pour faire cela ^^

Je demande donc si quelqu'un pourrait m'aider pour arriver à "optimiser" cette macro ?

Le but de cette macro est de transférer les informations entrées dans le formulaire directement dans un tableau.


Ci-joint la macro :

Sub NvlCommande()
'
' NvlCommande Macro
'

'
Range("C6").Select
Sheets("Commande").Select
Rows("2:2").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("Formulaire").Select
Selection.Copy
Sheets("Commande").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Formulaire").Select
Range("E6").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Commande").Select
Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Formulaire").Select
Range("C9").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Commande").Select
Range("C2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Formulaire").Select
Range("C12").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Commande").Select
Range("D2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Formulaire").Select
Range("C15").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Commande").Select
Range("E2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Formulaire").Select
Range("C18").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Commande").Select
Range("F2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Formulaire").Select
Range("C21").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Commande").Select
Range("G2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Formulaire").Select
Range("C21,C6,E6,C9,C12,C15,C18").Select
Range("C18").Activate
Application.CutCopyMode = False
Selection.ClearContents
Range("C6").Select
End Sub
 

Pièces jointes

  • Gestion des commandes.xlsm
    426.1 KB · Affichages: 7

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

J'ai renommé votre tableau de commandes en 'T_Commandes', nom qui renseigne, à la fois sur sa nature par le T pour 'Tableau' et sur ce qu'il est censé contenir : des commandes.
N'hésitez pas à renommer vos tableaux d'un nom explicite, vos formule et autres macros en seront plus compréhensibles.

Vous trouverez cette macro dans le fichier joint
VB:
Sub test()
'
' Variable range qui référencera la prochaine ligne de commande du tableau T_Commandes
Dim rngLigne As Range

'
' Déterminer la future ligne de commande
With ThisWorkbook.Sheets("Commande").ListObjects("T_Commandes")
    If Not .InsertRowRange Is Nothing Then
        ' soit elle existe (ligne vide en bas de tableau)
        Set rngLigne = .InsertRowRange
    Else
        ' soit elle n'existe pas, la créer
        Set rngLigne = .ListRows.Add().Range
    End If
End With
'
'  y mettre ensuite les valeurs du formulaire à partir de la feuille Formulaire
With ThisWorkbook.Sheets("Formulaire")
     rngLigne(1, 1) = .Range("E6") ' nom
     rngLigne(1, 2) = .Range("C6") ' prénom
     rngLigne(1, 3) = .Range("C9") ' menu 1
     rngLigne(1, 4) = .Range("C12") ' etc..
     rngLigne(1, 5) = .Range("C15")
     rngLigne(1, 6) = .Range("C18")
     rngLigne(1, 7) = .Range("C21")
     '
     ' Demander si l'utilisateur veut effacer les données du formulaire
     If MsgBox("Commande enregistrée !" & vbCrLf & _
            "Voulez-vous effacer les données du formulaire pour saisir une nouvelle commande ?", _
                vbQuestion + vbYesNo, "Saisie des commandes") = vbYes Then
         '
         ' S'il a répondu Oui à la boîte de dialogue, alors effacer les données du formulaire
        .Range("C6,C9,C12,C15,C18,C21,E6").ClearContents
     End If
End With

End Sub

Cordialement
 

Pièces jointes

  • Gestion des commandes.xlsm
    427.5 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
314 778
Messages
2 112 864
Membres
111 686
dernier inscrit
daniel delichy