Répétition de colonnes dans une listview

Bonjour à tous,

Autre problème avec ma listview : Lorsque je valide plusieurs commandes à la suite, les données s'enregistrent dans la listview amis des colonnes se dupliquent à droite de la listview.

Comment éviter ce phénomène ?

Autre question : Comment centrer le userform, au milieu de l'écran au démarrage de la macro ?

Merci pour vos réponses, je vous joins le fichier avec le process en début.

Encore merci pour votre aide,.

4pizz-a-bibi.xlsm (159.99 Ko)

Bonjour

Il vous manque la feuille Temp dans le fichier ? Le code bloque là dessus.

Pour votre listview, vous devez enlever cette partie de votre code Bt_ProduitValider_Click et mettre cela dans une nouvelle sub Userform_initialize de votre USF

Private Sub UserForm_Initialize()

With Worksheets("Paramètres")
    Cmb_CommandeType.List = .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row).Value
End With

With Lsv_CommandeListe                                                                  ' Paramétrer la listview "Lsv_CommandeListe"
    .ListItems.Clear
    .Gridlines = True
    .View = lvwReport

    With .ColumnHeaders
        .Add , , "Type", 55
        .Add , , "Produit", 100, lvwColumnCenter
        .Add , , "Supplément", 85, lvwColumnCenter
        .Add , , "Supplément", 85, lvwColumnCenter
        .Add , , "Supplément", 85, lvwColumnCenter
        .Add , , "Quantité", 80, lvwColumnCenter
        .Add , , "Montant", 90, lvwColumnCenter
        .Add , , "Remise", 60, lvwColumnCenter
    End With
End With
End Sub

Votre code de chargement de la combo Cmdtypecommand, j'aurais plutôt fait ceci

Private Sub Cmb_CommandeType_Change()
Dim lig As Byte
Dim col As Byte
Dim dlg As Integer

Cmb_CommandeProduit.Clear ' Mettre à blanc la liste des pizza

With Worksheets("Paramètres")
    On Error Resume Next
    lig = .Range("A:A").Find(Cmb_CommandeType.Value, LookIn:=xlValues, lookat:=xlWhole).Row
    If lig > 0 Then col = .Rows("1:1").Find(.Range("B" & lig).Value, LookIn:=xlValues, lookat:=xlWhole).Column
    If col > 0 Then
        dlg = .Cells(Rows.Count, col).End(xlUp).Row
        Cmb_CommandeProduit.List = .Range(.Cells(2, col), .Cells(dlg, col)).Value
    End If
End With
End sub

Nul besoin de sélectionner la feuille accueil. Sutout si vous partez de là pour ouvrir l'usf
Ces deux instructions ne servent à rien puisque les deux libellés sont affichés par défaut à l'ouverture de l'usf
Lbl_TypeCommande.Visible = True
Cmb_CommandeType.Visible = True

A vous relire avant d'aller plus loin

Bonsoir Dan,

Merci pour la réponse.

J'ai essayé de suivre vos recommandations, mais plus rien ne fonctionne : Je ne parviens plus à saisir aucune information dans mon userform, hormis la référence et le type de produit.

Je vous reposte le fichier à jour.

Merci de votre aide,

Bonne soirée.

1pizz-a-bibi.xlsm (161.84 Ko)

Oui mais si vous ne suivez pas ce que je vous donne cela ne peut pas fonctionner

Regardez mon message précédent. Dans votre fichier vous avez mis ceci --> Private Sub Pizza_Commande_Initialize().
Ce n'est pas ce que je vous ai donné

Corrigez déjà cela puis on fera étape par étape

A noter que le code Charge Type ne sert plus puisque le Type est directement chargé à l'ouverture du l'USF

Edit :
- après les instructions de votre code Initialise_EcranAccueil pourraient être mieux placées si elles faisaient directement partie du code Private sub userform_initialize, c'est plus logique. Sinon pensez à ajoutez un CALL Initialise_EcranAccueil dans la Private sub userform_initialize

- Chose importante, dans la feuille paramètre mettez Pizza Cuite en B2. Il faut que cela corresponde à la ligne 1

- pourquoi ajoutez vous une feuille TEMP

Bonjour Dan,

6pizz-a-bibi.xlsm (162.21 Ko)

Oui, désolé, je n'avais pas compris vos commentaires et vos exemples.

J'ai corrigé, je pense, comme demandé. A ce stade, la combo des produits ne se charge pas.

L'onglet "Temp" contient la commande en cours, qui sert à charger la listview. Il est supprimé et recréé à chaque nouvelle commande. Une fois la commande validée, les lignes "temporaires" sont transférées dans l'onglet Liste_EnCours tant que la commande n'est pas payée. Au paiement, elle basculera dans l'onglet Liste_Cumul qui conservera toutes les commandes réglées du jour et des jours précédents.

Je joins le fichier à jour. Merci de votre aide.

Ok vous avez supprimé Type 1 et Type 2. donc le code est à modifier

1. Donc une chose à faire en B1 vous devez mettre la même chose que ce que vous avez en A2, donc --> "Pizza Cuite"
2. Dans le code Private Sub Cmb_CommandeType_Change(), modifiez cette ligne

If lig > 0 Then col = .Rows("1:1").Find(.Range("A" & lig).Value, LookIn:=xlValues, lookat:=xlWhole).Column

3. Supprimez le code Private Sub Pizza_Commande_Initialize() que vous avez laissé par erreur

4. Une chose à faire aussi, évitez les cellules fusionnées en ligne 1 dans la feuille Paramètres, cela risque d'apporter des soucis avec VBA
Faites ceci :
- Supprimez la fusion en B1
- Sélectionnez B1 et C1
- Cliquez sur l'icone Format dans le menu Accueil
- Choisir "Format de cellule" --> onglet "Alignement"
- dans la rubrique "Horizontal", choisir "Centrer sur plusieurs colonnes"
refaites la même chose pour les autres cellule en ligne 1

5. Une chose que je vois dans la sub initialize, à quoi servent les instructions checksupplement et montantsupplement que vous mettez à 0.

Ne postez pas de fichier, j'ai votre dernière version. Dites moi si ok avant d'aller plus loin

Rechercher des sujets similaires à "repetition colonnes listview"