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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
455
Réponses
18
Affichages
134
Réponses
2
Affichages
214
Réponses
17
Affichages
878
  • Question Question
Microsoft 365 Erreur de format
Réponses
5
Affichages
436
Retour