Microsoft 365 données récupérer tableau

Piment

XLDnaute Occasionnel
Bonjour à tous,
Une fois encore j'ai besoin de votre aide.
J'ai un UserForm "Devis" qui récupère des données dans deux feuilles différentes pour inscrire ces données sur une feuille "Devis". La première partie des données récupérées (Feuilles client) s'affiche bien là ou je le veux.
Les données issues de la Feuille Prestation tableau ListForfaits je voudrais qu'il soient dans le tableau "Devis" Désignation ...
Je n'arrive pas à construire les lignes de codes dans Private Ajouter.
Par avance merci beaucoup pour votre aide.
 

Pièces jointes

  • Essai CL (4) .xlsm
    96.8 KB · Affichages: 9

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

voir dans le fichier joint cette sub :

VB:
Private Sub Ajouter_Click()
    Dim lr As ListRow
    Dim Ligne As Integer: Ligne = 2
    Dim lig As Integer, tablo
    With Sheets("Devis")

        Ligne = 2
        .Cells(Ligne + 2, "B") = TextBox6
        .Cells(Ligne, "C") = Jour
        .Cells(Ligne + 3, "E") = NOM
        .Cells(Ligne + 4, "E") = ADRESSE
        .Cells(Ligne + 5, "E") = CP & " " & ComboBox3
        .Cells(Ligne + 8, "B") = TextBox1

        With .ListObjects("Devis")
            With .ListRows.Add()
                If Désignation.ListIndex > -1 Then .Range(1, 1) = Désignation.Value
                If IsNumeric(Qté.Text) Then .Range(1, 2) = CDbl(Qté.Text)
                If IsNumeric(PrixUnité.Text) Then .Range(1, 3) = CDbl(PrixUnité.Text)
                If IsNumeric(Montant_HT) Then .Range(1, 4) = CDbl(Montant_HT.Text)
            End With
        End With
    End With
End Sub

Lorsque vous utilisez une structure With Sheets(..)...End With.
Vous devez mettre un . (point) devant Cells pour notifier que vous utilisez les .Cells de la feuille référencée par With et non les Cells de la feuille active du moment.
Les With imbriqués doivent être des objets enfants de l'objet With précédent dans l'arbre.

Code:
With Feuille

      With .ListObjects("Devis") ' enfant de Feuille

           With .ListRows.Add() ' enfant de ListObject, lui même

                    .Range(1, 1) = "truc" ' Range est ici enfant de ListRow, Petit-enfant de ListObject, Arrière petit - petit fils de Feuille
Cordialement
 

Pièces jointes

  • Essai CL (4) .xlsm
    105.5 KB · Affichages: 2

Piment

XLDnaute Occasionnel
Je reviens vers vous, j'ai testé l'UserForm Devis, tout marche correctement, c'est génial, mais 2 choses que j'aimerais pouvoir affiner: 1°) lorsque je valide le contenu de la ComboBox 4 (Désignation) et je valide, il m'inscrit le contenu dans une deuxième ligne dans le tableau. J'ai donc une ligne vierge en premier. Si je valide une deuxième informations, là il me le met bien à la suite.
2°) comment lui dire que le montant HT est le calcul de la Qté*Prix unitaire?
Je pourrais faire faire le calcul sur le devis directement, mais j'aurais préféré que tout se passe au niveau del'UserForm.
Merci d'avance.
Pour info je débute en vba, je parts de 0.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Pour le 1° aidez vous de l'aide en ligne (F1 sur un mot clef):
VB:
Private Sub Ajouter_Click()
    Dim lRange As Range
    Dim Ligne As Integer: Ligne = 2
    Dim lig As Integer, tablo
    With Sheets("Devis")
        Ligne = 2
        .Cells(Ligne + 2, "B") = TextBox6
        .Cells(Ligne, "C") = Jour
        .Cells(Ligne + 3, "E") = NOM
        .Cells(Ligne + 4, "E") = ADRESSE
        .Cells(Ligne + 5, "E") = CP & " " & ComboBox3
        .Cells(Ligne + 8, "B") = TextBox1

        With .ListObjects("Devis")
            If Not .InsertRowRange Is Nothing Then
                Set lRange = .InsertRowRange
            Else
                Set lRange = .ListRows.Add().Range
            End If
        End With
    End With
    With lRange
        If Désignation.ListIndex > -1 Then .Cells(1, 1) = Désignation.Value
        If IsNumeric(Qté.Text) Then .Cells(1, 2) = CDbl(Qté.Text)
        If IsNumeric(PrixUnité.Text) Then .Cells(1, 3) = CDbl(PrixUnité.Text)
        If IsNumeric(Montant_HT) Then .Cells(1, 4) = CDbl(Montant_HT.Text)
    End With
End Sub

Pour le 2° je pense que vous savez faire une multiplication, un affichage dans un textbox (qui devrait être un label puisque l'utilisateur n'aura pas à y accéder ), et une reprise de la valeur pour la mettre dans une cellule.

Vous avez toutes les clefs pour le faire.

Alors essayez au moins et revenez avec vos tentatives si vous n'y arrivez pas.

Cordialement
 

Piment

XLDnaute Occasionnel
Désolé Roblochon, j'ai réussi pour la ligne vide dans le tableau, mais je sèche (c'est le cas de le dire) pour faire la multiplication.
J'ai aussi voulu faire afficher le Prix unitaire entier au lieu décimal= échec. J'ai tenté CDec au lieu CDbl
Merci pour votre patience.
 

Hasco

XLDnaute Barbatruc
Repose en paix

974RE

XLDnaute Occasionnel
Bonsoir Roblochon,
J'ai tout essayé je n'ai pas réussi. Je suis aller voir l'aide, mais je n'ai réussi .
Pourriez vous me donner une copie du fichier avec le code (Mettre le Prix unitaire en Entier et le code pour lui faire faire la multiplication Qté*PrixUnité avec le résultat en nombre Entier.
J'ai également rajouter dans le tableau qui figure sur la feuille "Prestation" une ligne Remise. Je n'arrive pas dans l'UserForm Estimatif qui se trouve sur l'UserForm Devis, à entrer par exemple 10%.
Merci encore pour votre aide . Désolé d'être si nul!
 

Hasco

XLDnaute Barbatruc
Repose en paix
Pourriez vous me donner une copie du fichier avec le code (Mettre le Prix unitaire en Entier et le code pour lui faire faire la multiplication Qté*PrixUnité avec le résultat en nombre Entier.
Non, c'est à vous de fournir un effort et de donner vos tentatives. Pour le moment j'ai trop le sentiment de faire à votre place. Si vous ne comprenez pas, trouvez des tutoriels.
 

974RE

XLDnaute Occasionnel
Je regrette que vous ayez le sentiment que vous faites à ma place. Je peux vous assurer que j'ai essayé, mais je n'y arrive pas.
A 61 ans j'ai eu envie d'apprendre. Je fais ce que je peux, mais comme on dit "la plus belle femme du monde ne peut donner que ce qu'elle a.
Merci de votre aide, elle m'a permis de franchir une étape.
Je vous souhaite une bonne soirée.
Merci encore.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Si vous voulez apprendre, ne vous lancez pas tête baissée dans un projet qui vous dépasse et allez-y à petits pas. La conversion d'un type à un autre est une des bases de presque tous les langages de programmation.
Commencez par là.

Cordialement
 

974RE

XLDnaute Occasionnel
Merci du conseil.
L'aide du forum m'a permis de réaliser un fichier qui me facilite la vie.
Je me suis dit que je pouvais aller plus loin en essayant de réaliser un projet un peu plus élaboré.
Apprendre tout seul c'est compliqué.
Quand on me donne une solution, je m'efforce de comprendre le pourquoi du comment.
Je dissèque le fichier que l'on me donne avec les corrections ou encore les lignes de codes qui permet de réaliser ce que je tente de faire.
Petit à petit à j'y arrive. Mais je vous le concède c'est laborieux.
Merci encore.
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 322
Membres
103 178
dernier inscrit
BERSEB50