Calculateur de transport

Y compris Power BI, Power Query et toute autre question en lien avec Excel
W
Winnylourson
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 31 juillet 2015
Version d'Excel : 2007

Message par Winnylourson » 31 juillet 2015, 11:19

Bonjour,

J'ai un formulaire de calcul de transport en VBA. Lorsque je rentre un département et un poids dans ce formulaire, il sort un prix de transport pour ce poids et ce département. Dès lors ma feuille Excel se met à jour.
Ce que je souhaiterais c'est pouvoir entrer le département non pas dans le formulaire mais dans la cellule de la feuille excel et que cela mette à jour le reste de la feuille.

Voici le code VBA du formulaire:
Public Dep As String

Public Sub Affiche()
    'Affiche le résultat
    If Me.Num_Département And Me.Poids <> " kg" Then
        Me.Titre_qte = "Livraison de " & Me.Poids & vbCr & " dans le " & Me.Num_Département & " - " & Me.Nom_Département
        
        Me.T_chr_qte = Cells(51, 4) & " € HT"
       
        Me.Top13_qte = Cells(38, 4) & " € HT"
       
        Me.Top_13_delai = Cells(25, 12) & "H"
        
        Me.Top18_qte = Cells(45, 4) & " € HT"
       
        Me.Top_18_delai = Cells(26, 12) & "H"
        
        Me.T_exp_qte = Cells(32, 4) & " € HT"
        
        Me.express_delai = Cells(24, 12) & "H"
        
        Me.T_aff_qte = Cells(26, 4) & " € HT - " & Cells(24, 3) & " palette(s)"
       
        Me.Cout_Qte = Cells(29, 13) & " = " & Cells(29, 12) & " € HT"
      
    Else
        Me.Titre_qte = ""
       
        Me.T_chr_qte = ""
      
        Me.Top13_qte = ""
        
        Me.Top_13_delai = ""
        
        Me.Top18_qte = ""
       
        Me.Top_18_delai = ""
        
        Me.T_exp_qte = ""
        
        Me.express_delai = ""
       
        Me.T_aff_qte = ""
       
        Me.Cout_Qte = ""
      
    End If
End Sub
Private Sub Cb_Quitter_Click()
    If Workbooks.Count = 1 Then
        Application.DisplayAlerts = False
        Application.Quit
    Else
        Application.ActiveWorkbook.Close SaveChanges:=False
    End If
End Sub


Private Sub Num_Département_Enter()
    Me.Dep = Me.Num_Département
    Me.Num_Département.BackColor = -2147483629
End Sub

Private Sub Num_Département_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim i As Integer
    Application.ScreenUpdating = False
    
    'Test si le département à changé
    If Me.Num_Département = Me.Dep Then
        Me.Num_Département.BackColor = -2147483629
        Application.ScreenUpdating = True
        Exit Sub
    End If
    Cells(18, 3) = Me.Num_Département
    'Ajoute un 0 devant le département si compris entre 1 et 9
    If Me.Num_Département > 0 And Me.Num_Département < 10 Then
        Me.Num_Département = "0" & Right(Me.Num_Département, 1)
    End If
    If Me.Num_Département > 0 And Me.Num_Département < 96 Then
        'Affiche le nom du département
        Me.Nom_Département.Value = Fichier.INIGetSetting("Z:\Transport\Département.ini", "Num-Nom", Me.Num_Département.Value)
        'Récupère les valeur pour l'Express
        i = 2
        Sheets("Transport").Select
        Do While i < 41
            Cells(5, i) = CDec(Fichier.INIGetSetting("Z:\Transport\Express.ini", Me.Num_Département, i))
            i = i + 1
        Loop
        'Récupère les valeur pour l'Affretement
        i = 2
        Do While i < 34
            Cells(2, i) = CDec(Fichier.INIGetSetting("Z:\Transport\Affretement.ini", Me.Num_Département, i))
            i = i + 1
        Loop
        'Récupère les valeur pour Joyau TOP 13
        i = 2
        Do While i < 41
            Cells(10, i) = CDec(Fichier.INIGetSetting("Z:\Transport\top13.ini", Me.Num_Département, i))
            i = i + 1
        Loop
        'Récupère les valeur pour Joyau TOP 18
        i = 2
        Do While i < 41
            Cells(13, i) = CDec(Fichier.INIGetSetting("Z:\Transport\top18.ini", Me.Num_Département, i))
            i = i + 1
        Loop

        Me.Num_Département.BackColor = -2147483629
        Call Me.Affiche
    Else
        'Message si erreur de saisie
        MsgBox "Ce département n'éxiste pas !" & vbCr & "Veuillez corriger votre saisie.", vbInformation, "Erreur de saisie"
        Me.Num_Département = ""
        Cancel = True
    End If
    Application.ScreenUpdating = True
    
End Sub

Private Sub Poids_Enter()
    If Right(Me.Poids, 3) = " kg" Then
        Me.Poids = Left(Me.Poids, Me.Poids.TextLength - 3)
    End If
    Me.Poids.BackColor = -2147483629
End Sub

Private Sub Poids_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Me.Poids < 1 And Me.Poids <> "" Or Me.Poids > 8500 And Me.Poids <> "" Then
        MsgBox "Ce poids ne peux être calculé avec les tarifs !" & vbCr & "Veuillez corriger votre saisie.", vbInformation, "Erreur de saisie"
        Me.Poids = ""
        Cancel = True
    Else
        If Right(Me.Poids, 3) <> " kg" Then
            If Me.Poids <> "" Then
                Cells(20, 3) = Int(Me.Poids)
            End If
            Me.Poids = Me.Poids & " kg"
        End If
        Me.Poids.BackColor = -2147483629
        Call Me.Affiche
    End If
End Sub

Private Sub UserForm_Click()

End Sub
Auriez-vous une idée SVP?

Espérant avoir été clair dans ma demande, et vous remerciant par avance de votre aide,

Bonne journée
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 31 juillet 2015, 11:32

Bonjour,

Une idée ? Oui.

Le formulaire met le département dans la cellule où tu le souhaites, et tu n'as plus à le faire toi-même.
Ou le formulaire récupère tout seul le département que tu as mis dans la cellule, et n'as plus à le faire.
Ça fait déjà 2 !

Bonne journée.
Ferrand
W
Winnylourson
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 31 juillet 2015
Version d'Excel : 2007

Message par Winnylourson » 31 juillet 2015, 11:38

C'est l'idée 2 qui m'intéresse! que le formulaire récupère le dép renseigné dans la cellule. Que lorsque je renseigne le département dans la cellule tout le reste de la feuille se mette à jour.

Comment faire?
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 31 juillet 2015, 12:33

Apparemment le formulaire affecte déjà le numéro de département à la cellule C18 ?
W
Winnylourson
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 31 juillet 2015
Version d'Excel : 2007

Message par Winnylourson » 31 juillet 2015, 14:09

Oui mais pas l'inverse et c'est ce que je souhaite.
tout comme pour le formulaire, je veux que lorsque je renseigne le département dans la cellule C18 cela mette à jour toute la feuille. Actuellement ce n'est pas le cas. Ce n'est que par le biais du formulaire que j'actualise la feuille.
J'ai un tarif de transport par département. Par le biais du formulaire cela charge le tarif en fonction du département. En passant par la cellule C18, cela ne charge rien. Il reste sur le département renseigné par le formulaire.

L'idée finale est de pouvoir associer ce formulaire de calcul à un listing comportant plusieurs département. J'ai réussi à l'associé mais pour un seul département, le dernier renseigné par le formulaire. Si je pouvais agir directement depuis la cellule C18 je pourrais alors faire un "copier avec liaison" avec le listing.
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 31 juillet 2015, 14:25

Si le département suffit à mettre à jour, tu peux en principe te passer du formulaire : des formules ou, si cela se révèle trop lourd, une simple macro peut opérer. Si tu souhaites alors le formulaire pour affichage, ce n'est plus la même fonction...

On ne peut pas modifier ça au jugé, sans support précis, si on veut éviter des catastrophes.
W
Winnylourson
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 31 juillet 2015
Version d'Excel : 2007

Message par Winnylourson » 31 juillet 2015, 14:46

Tout à fait.

Donc, en fait, quelle fonction pourrait générer les tarifs transport en fonction du département renseigné par la cellule C18. L'équivalent de la fonction appelé dans le code VBA?
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 31 juillet 2015, 15:36

A ce qu'on peut déduire : il faudrait que tu serves le département en C18 et le poids en C20.
A partir de là, une macro reprenant les vérifications et blocages éventuels opérés par le formulaire en cas de saisie non conforme ou non traitable, puis la partie récupération des tarifs opérés par le formulaire pour les insérer dans une feuille Transport.
Il semblerait donc que les calculs soient opérés sur la feuille (par formules), ce qui est à confirmer.
Il faut encore voir de près la procédure de récupération des tarifs : fonction INIGetSetting dans un module Fichier ? (récupération se faisant dans des fichiers texte)
Et je n'ai rien vu concernant le lancement du formulaire et le nettoyage de la feuille Transport ?
Pour l'instant, c'est encore très hasardeux...

Mais pourquoi vouloir modifier cette méthode qui fonctionne : saisir 2 valeurs dans un formulaire ou les saisir dans la feuille, c'est à peu près équivalent, cela ne fait rien gagner ?
La saisie est plus aisément controlable dans un formulaire, et j'avoue que j'aurais plutôt tendance à privilégier un formulaire en bloquant toute saisie dans la feuille ! :chat2:

En l'état actuel, il manque un certain nombre d'éléments, et surtout il faut pouvoir tester ce que l'on fait...
p
philaplon
Membre habitué
Membre habitué
Messages : 81
Inscrit le : 30 août 2010
Version d'Excel : 2000 FR

Message par philaplon » 31 juillet 2015, 17:56

Prix transport 2012.xls
(235 Kio) Téléchargé 80 fois
Tu devrais essayer ça ... c'est pas du VBA mais ça fonctionne très bien.
W
Winnylourson
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 31 juillet 2015
Version d'Excel : 2007

Message par Winnylourson » 31 juillet 2015, 18:39

c'est gentil mais ce n'est pas ce que je recherche. Je cherche à gagner du temps en fait.

J'ai un client qui nous donne un listing:
50 départements pour des poids différents. Le prix varie énormément d'un département à l'autre.

Pour un devis classique (1 demande, 1 poids), le formulaire que je vous ai présenté est très pratique mais dès que l'on plusieurs ligne, faut se les taper une par une. D'où ma recherche de lier ce formulaire à un listing qui me sortirait mon prix de transport immédiatement pour tous les départements de mon listing.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message