Problème d'odre dans une liste de contacts - VBA

Bonjour,

Je travaille sur une gestion de stocks de produits d'entretien et étant débutant avec VBA, je rencontre des difficultés.

Le premier cas de figure à été résolu pour l'ajout de fournisseurs par Banzaï64 (encore une fois merci), j'ai donc pu transposer sa solution pour l'ajout de contacts dans un tableau.

(A savoir : Pour mes différents tableaux, tout se base sur la première colonne "LOT N°".

En fait, après chaque appel d'offre, il est choisi plusieurs fournisseurs (en général entre 2 et 5) et ils sont identifiés par LOT N°1, LOT N°2,...sachant que pour les commandes,le N°1 est prioritaire et si un article ne figure pas dans ce lot, on se reporte sur le N°2 et ainsi de suite.)

Mon soucis est que, quand j'ajoute un contact, je souhaiterais que sur mon tableau dans l'onglet "Contacts" ils apparaissent par ordre de LOT et non pas de façon "anarchique". (il peut y avoir 1, 2 ou 3 contacts par LOT).

Le problème se posera de la même façon pour l'ajout de produits.

Je sollicite donc votre aide pour m'aiguiller dans ce cas de figure.

Par avance, je vous remercie de l'intérêt que vous porterez à ma requète.

Cordialement.

Bonjour Krobart501

Si j'ai bien compris, il suffit de trier tes contacts,

pour cela tu peux utiliser une Sub à mettre dans un module

Sub TriContacts()
  Dim DLig As Long
  With ThisWorkbook.Sheets("Contacts")
    ' Dernière ligne des contacts
    DLig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Avec l'objet champs de tri
    With .Sort.SortFields
      .Clear
      .Add Key:=Range("A2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      .Add Key:=Range("B2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      .Add Key:=Range("D2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    End With
    ' Avec l'objet tri
    With .Sort
      .SetRange Range("A1:H" & DLig)
      .Header = xlYes
      .MatchCase = False
      .Orientation = xlTopToBottom
      .SortMethod = xlPinYin
      .Apply
    End With
  End With
End Sub

Tu appelles ta Sub par

Call TriContacts

A+

Bonjour Bruno,

Merci pour ta réponse, je teste ça dès que je rentre ce soir.

Bonsoir,

Malgré la solution de BrunoM45, cela ne fonctionne pas. Ou plutôt je n'arrive pas à intégrer son code.

Voici une image qui montre ce que je souhaite obtenir dans mon tableau "Contacts".

Petit rappel : le LOT N°1 correspond à une entreprise, le LOT N°2 à une autre entreprise,...

Je peux avoir 1,2 ou 3 contacts par entreprise. Mon souhait est que les contacts se classent par ordre de LOT.

J'ai joint au fichier une image de ce que souhaite obtenir.

Merci d'avance pour votre aide.

Bonjour,

Désolé de te le dire comme ça, mais tu es nul ou quoi apprends déjà à utiliser Excel

Dans ton image tu nous montres 4 lignes avec en n° de Lot, le numéro "1"

tableau1

Et dans le tableau tu as 6 lots différents : 1,4,5 et 6

2015 06 18 05h47 01

Forcément que le tri ne se fait pas comme souhaité, puisque le 1er critère est le numéro du lot

Allez hop, je me désabonne de cette discussion à la C*

Bonne chance

Bonjour Bruno,

L'image que j'ai inclus dans le fichier est une image de ce que je souhaiterais obtenir (je l'ai rempli "à la main" pour vous montrer).

Dans cet exemple, le LOT N°1 correspond au fournisseur BIO'CLEAN et le LOT N°2 au fournisseur NETTOITOU (noms fictifs).

Et effectivement, dans le fichier, en réel, on obtiens 1,2,3,4,5,6...

Alors, peut-être que ce n'est pas possible d'y parvenir, je devrais certainement enlever cette option et faire simplement un tri par ordre alphabétique.

Au passage, pas besoin de me rappeler que je suis nul, ça, je le sais déjà

En tout cas, merci pour votre coopération.

Bonne journée à vous.

Re-bonjour à tous,

BrunoM45, avait raison, je suis nul.

J'en ai retiré comme enseignement que j'ai voulu faire trop compliqué sans réfléchir.

J'ai simplifié mon fichier en regroupant l'ajout de fournisseurs et de contacts dans le même formulaire de saisie et dans le même tableau.

Donc le problème du tri ne se pose plus.

Par contre, j'aimerais savoir s'il était possible d'ajouter un deuxième contact à un fournisseur (que l'on pourrait renseigner dans le formulaire de saisie) et que celui-ci s'ajoute en dessous du premier dans le tableau, mais ce qui impliquerait que le fournisseur suivant soit décaler d'une ligne.

Merci d'avance pour votre aide et pour vos enseignements.

PS : Je joins une image dans le fichier pour voir ce que cela donnerai si c'était possible.

Bonjour

Stop moi j'ai bossé sur l'ancienne version

A toi de voir et surtout à tester

Bonjour Banzaï64,

Merci pour ton aide, je viens de tester mais si je choisis (par ex) LOT N°1, je ne peux pas renseigner le nom de l'entreprise dans le champs bleu.

Alors j'ai testé de partir d'un contact existant pour le LOT N°1, je modifie les coordonnées, je fais "Ajouter" et cela me l'ajoute mais à la suite du LOT N°2.

En tout cas, merci beaucoup pour ton aide, je vais étudier ton code pour essayer de trouver.

EDIT : Quoique, cest pas génant, vu qu'on peut consulter les contacts via le formulaire, pas besoin de consulter le tableau.

Je suis long à la détente

Bonjour

krobart501 a écrit :

je ne peux pas renseigner le nom de l'entreprise dans le champs bleu.

Normal tu es dans le formulaire contact, tu ne peux pas changer le nom de l'entreprise (c'est ailleurs que cela se passe)

krobart501 a écrit :

Alors j'ai testé de partir d'un contact existant pour le LOT N°1, je modifie les coordonnées, je fais "Ajouter" et cela me l'ajoute mais à la suite du LOT N°2.

Pas important en soi, tu peux trier si tu veux

Rajoute à la fin de la procédure Private Sub ajouter_Click()

    End With
    tricontacts
    Init_ListBox
  End If

End Sub

Re Bonjour à tous,

Je rouvre le sujet car malgré la précieuse aide de Banzaï64, il y a une petite chose qui cloche dans mon fichier.

Lorsque l'on rempli le formulaire "Fournisseurs", Le nom du fournisseur est associé à un numéro de LOT et la macro enregistre ce numéro de LOT dans le formulaire "Contacts".

Ensuite, pour remplir le Formulaire "Contacts", on choisis un numéro de LOT dans la liste déroulante et normalement, le nom de l'entreprise associé à ce numéro de LOT devrait apparaitre dans le champs "Entreprise".

Mais cela n'apparait pas.

J'ai besoin de votre aide pour trouver ce qu'il manque à la macro pour que cela fonctionne.

Merci d'avance à tous.

Bonjour Krobart501,

Peux-tu nous dire à quel endroit pour toi,

tu fais le nécessaire pour récupérer le nom de l'entreprise ??

' Liste déroulante lot n°
Private Sub lot_Change()
  Dim Ligne As Long
  Nettoyage
  If Me.lot.ListIndex = -1 Then Exit Sub
  ' Avec la feuille Fournisseurs
  With WsF
    ' Trouver la ligne correspondant au LOT
    Ligne = .Columns("A").Find(what:=Me.lot, LookIn:=xlValues, lookat:=xlWhole).Row
    ' Inscrire le nom de la société
    Me.entreprise = .Cells(Ligne, "B")
  End With
End Sub

A+

Bonjour BrunoM45,

Désolé de répondre si tard, je rentre du boulot.

Je viens de regarder, je ne faisait pas référence au Worksheet "Fournisseur" (Wsf) et à la ligne correspondante au LOT, c'est vraiment très bête

Maintenant, cela fonctionne bien, dans le formulaire de saisie, si je choisis "LOT N°1", cela me met bien le nom de l'entreprise associée.

Mais, lorsque j'enregistre le contact, dans le tableau (onglet contacts), c'est le numéro 0 qui apparait à la place de l'entreprise.

Je regarde à ça et je vous tiens au courant.

Merci beaucoup de votre intervention et de votre aide.

Bonsoir à tous,

Après une longue absence, je me suis remis sur mon fichier et j'ai réussi à mettre en application l'aide de BrunoM45 et Banzaï64 (encore merci à eux).

Ma gestion de fournisseurs et de contacts fonctionne maintenant, comme je le souhaitais.

Seul petit souci, lorsque je sélectionne un fournisseur ou un contact pour le supprimer, cela en supprime un autre dans ma liste.

Je n'ai pas réussi à trouver de solution, alors je me tourne vers vous pour m'aider.

Merci d'avance.

Salut Krobart501

Il n'y a pas quelque chose qui te choque dans ton code de suppression des contacts !?

    Ligne = Me.ListBox1.List(Me.ListBox1.ListIndex, 7)  ' Ok c'est bon
    If MsgBox("Voulez vous supprimer ce contact ?", vbCritical + vbYesNo + vbDefaultButton2, "Suppression") <> vbYes Then Exit Sub
    WsC.Rows(Me.cbb_lot.ListIndex + 2).Delete ' Pourquoi ceci !?

Tu récupères le numéro de ligne enregistré dans la colonne 7 de ta listbox, c'est très bien, mais tu ne t'en sers pas

A+

Bonjour BrunoM45,

Merci pour ta réponse, je me trompais en n'indiquant pas ma ListBox1 mais la ComboBox.

Voici le bon code :

Code: Tout sélectionner
        Ligne = Me.ListBox1.List(Me.ListBox1.ListIndex, 7)  ' Ok c'est bon
       If MsgBox("Voulez vous supprimer ce contact ?", vbCritical + vbYesNo + vbDefaultButton2, "Suppression") <> vbYes Then Exit Sub
        WsC.Rows(Me.ListBox1.ListIndex + 2).Delete         ' Il fallait faire référence à la ListBox1

Je joins le fichier corrigé.

Je peux maintenant clore ce sujet.

Merci beaucoup pour ton aide.

Bon dimanche.

Re,

Non, non tu te trompes encore

Il faut impérativement utiliser ta variable "ligne"

Re Bruno,

Pourtant en faisant comme ça, ça fonctionne.

Je regarde à ça et te tiens au courant.

Merci.

Edit : Effectivement, cela ne fonctionne qu'avec le fournisseur n°1 et pas avec les autres.

Je vais travailler sur cette erreur.

Re,

krobart501 a écrit :

Re Bruno,

Pourtant en faisant comme ça, ça fonctionne.

Je regarde à ça et te tiens au courant.

Merci.

Edit : Effectivement, cela ne fonctionne qu'avec le fournisseur n°1 et pas avec les autres.

Je vais travailler sur cette erreur.

Normalement, ton formulaire "Fournisseurs" devrait fonctionner comme il était

Moi je te parle du formulaire des Contacts, dans lequel il faut juste remplacer la ligne

WsC.Rows(LigneMe.ListBox1.ListIndex + 2).Delete

par

WsC.Rows(Ligne).Delete

De plus il va falloir penser que si tu supprimes un fournisseur, il faudra également supprimer les contacts de celui-ci

A+

Bon,

encore une fois tu me mâche le travail

Je galèrai à essayer tout un tas de bidouilles...et c'était aussi simple que ça

J'avais compris qu'il fallait mettre la référence "Ligne" mais bêtement je mettais une "," avec la colonne du nom du contact.

Je n'étais pas loin mais encore une fois je n'avais rien compris.

J'admire ta maîtrise du VBA

J'en suis au début, je potasse sur un bouquin, je fais des recherches, consulte des tutos, mais il existe tellement de façon de procéder, quand on ne maîtrise pas, c'est quand même pas évident.

Un grand merci à toi Bruno.

Maintenant je vais regarder pour la suppression d'un fournisseur afin que celle-ci efface les contacts en même temps.

Rechercher des sujets similaires à "probleme odre liste contacts vba"