Copier contrôle TAG (USF vers Feuille) selon condition

Y compris Power BI, Power Query et toute autre question en lien avec Excel
G
Geoffrey027
Membre habitué
Membre habitué
Messages : 84
Inscrit le : 18 mars 2018
Version d'Excel : 2016

Message par Geoffrey027 » 25 mai 2019, 08:08

Bonjour à tous,

Vous m'avez beaucoup aidé sur mon programme de facturation à l'époque.
J'aimerais modifier le code qui me sert d'enregistrer mes facture / devis (selon contrôle TAG)
-> il enregistre dans des feuilles séparer selon si facture ou devis ...
Maintenant, j'aimerais rajouter une difficulté :/
Qu'il me copie en plus qu'avant la Textbox112 (soit TAG CQ)
dans la colonne CQ forcément, seulement et seulement si ComboBox13.Value = "Acompte"

J'ai forcément regarder mais déjà à l'époque j'était perdu dans le codage alors maintenant j'avoue que je suis vraiment trop nul pour faire cela :(

Merci de bien vouloir m'aider :)
'Enregistrer le devis ou la facture
Private Sub CommandButton24_click()

    If ComboBox13 = "" Then
    MsgBox "Aucun mode sélectionné"
    Exit Sub
    Else

    
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim PLV As Integer 'déclare la variable PLV (Première Ligne Vide)
Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
Dim PM As Integer 'Partie Mobile
Dim NN As String 'Nouveau Numéro
Dim PF As String 'Partie Fixe


If ComboBox13.Value = "Devis" Then
If TextBox96.Value = "" Then
TextBox96.Value = "0"
End If
End If

If TextBox99.Value = "" Then
MsgBox "Attention : Date du document manquant !"
Exit Sub
End If
 
If MsgBox("Êtes-vous sûr ?", 36, "Confirmation") = vbYes Then 'condition : si "Oui"au message

    Select Case UCase(Me.ComboBox13.Value) 'agit en fonction de la valeur de la ComboBox13 (convertie en majuscules)
    
        Case "DEVIS" 'cas "DEVIS"
            Set O = Worksheets("Devis") 'définit l'onglet O
        Case "FACTURE" 'cas "FACTURE"
            Set O = Worksheets("Facture") 'définit l'onglet O' c'est été plus malin de mettre le même
        Case "ACOMPTE" 'cas "ACOMPTE"
            Set O = Worksheets("Facture") 'définit l'onglet O' c'est été plus malin de mettre le même
    End Select 'fin de l'action en fonction de la valeur de la Combobox13
    PLV = O.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1 'définie la première ligne vide de la colonne A de l'onglet O
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'userForm
        'si la propriété [Tag] du contrôle n'est pas vide, renvoie la valeur du contrôle dans la cellule
        'ligne = PLV / colonne = valeur de la propriété [Tag] du contrôle
        If CTRL.Tag <> "" Then O.Cells(PLV, CTRL.Tag).Value = CTRL.Value
    Next CTRL 'prochaine contrôle de la boucle
End If 'fin de la condition
PF = Left(O.Cells(PLV - 1, 1).Value, 5)
PM = Mid(O.Cells(PLV - 1, 1).Value, 6) + 1
NN = PF & Format(PM, "00000")
O.Cells(PLV, 1).Value = NN
Worksheets("Facture").Range("BV:BX").ClearContents 'supprime les données qu'il copie en trop dans Facturier
Worksheets("Devis").Range("BZ:BZ").ClearContents 'supprime les données qu'il copie en trop dans Devis


MsgBox "Les données sont enregistrées"

'Methode simple pour revenir à l'userform "Vide"
Unload Me 'Quitte l'userform
UserForm1.Show 'Revient dans l'userform

End If
End Sub
A
AlgoPlus
Membre dévoué
Membre dévoué
Messages : 571
Appréciations reçues : 46
Inscrit le : 27 février 2019
Version d'Excel : 2003

Message par AlgoPlus » 25 mai 2019, 09:58

Bonjour,

Si j'ai bien compris:

au lieu de
If CTRL.Tag <> "" Then O.Cells(PLV, CTRL.Tag).Value = CTRL.Value
essayer:
If CTRL.Tag <> "" Then 
     If CTRL.Tag = "CQ" Then
          If  ComboBox13.Value = "Acompte" then O.Cells(PLV, CTRL.Tag).Value = CTRL.Value
     Else
          O.Cells(PLV, CTRL.Tag).Value = CTRL.Value
     End If
End If
A+
G
Geoffrey027
Membre habitué
Membre habitué
Messages : 84
Inscrit le : 18 mars 2018
Version d'Excel : 2016

Message par Geoffrey027 » 25 mai 2019, 10:04

Enfin on peut même ce passer du TAG je pense
J'aimerais juste qu'il m'indique un "1" ou un "oui" quand c'est un "acompte" dans la colonne CQ sur la ligne en cours

Pour qu'il copie le "1" je me servais d'une textbox qui sert à rien avec un tag mais si on peut le faire sans ...

Une fois cela fait, j'aimerais réussir à trouver une astuce pour qu'il m'affiche uniquement mes commandes en cours (acompte) dans une listbox...

pour le moment j'ai une listbox qui m'affiche la totalité de mes factures et de mes devis sans distingué une facture final ou une facture d'acompte ... (en gros si acompte = commande à faire)

Et j'avoue ne pas être doué surtout que j'ai presque rien fait moi même au codage donc pas simple :/
A
AlgoPlus
Membre dévoué
Membre dévoué
Messages : 571
Appréciations reçues : 46
Inscrit le : 27 février 2019
Version d'Excel : 2003

Message par AlgoPlus » 25 mai 2019, 10:59

Enfin on peut même ce passer du TAG je pense
Dans la mesure où l'écriture dans la feuille se fait dans une boucle sur tous les objets de l'USF ayant un Tag non vide, il faudra bien coder que pour ce tag ("CQ") on veut faire quelque chose de particulier (ou ne rien faire, mais il faudra traiter ce cas en dehors de la boucle).


une première solution:
If CTRL.Tag <> "" Then 
     If CTRL.Tag = "CQ" Then
          If  ComboBox13.Value = "Acompte" then O.Cells(PLV, CTRL.Tag).Value = 1 ' ou "OUI"
     Else
          O.Cells(PLV, CTRL.Tag).Value = CTRL.Value
     End If
End If
Une deuxième solution : si la textbox ne sert à rien, on peut la supprimer et le code deviendrait:
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'userForm 
        If CTRL.Tag <> "" Then O.Cells(PLV, CTRL.Tag).Value = CTRL.Value
    Next CTRL 'prochaine contrôle de la boucle
    If  ComboBox13.Value = "Acompte" then O.Cells(PLV, "CQ").Value = 1   ' ou "OUI"
G
Geoffrey027
Membre habitué
Membre habitué
Messages : 84
Inscrit le : 18 mars 2018
Version d'Excel : 2016

Message par Geoffrey027 » 26 mai 2019, 00:18

Bonsoir,

J'ai copier la seconde solution et sa fonctionne :)

Donc maintenant si je fait un acompte il me copie "1" en CQ super,

Maintenant je cherche à si je suis en mode "solder acompte" qu'il m’enlève le "1" de la facture d'acompte précédente
* PS : "1" veux dire acompte en cours donc si je solde la facture ce n'est plus une commande en cours...
 If ComboBox13.Value = "Acompte" Then O.Cells(PLV, "CQ").Value = 1    ' ou "OUI"
    
            If TextBox112.Value = "Solder Facture" Then
       Dim c As Range
      Set c = Sheets("Facture").[A:A].Find(Me.TextBox113.Value, LookIn:=xlValues)
        'If Not c Is Nothing Then
           With Sheets("FACTURE")
           O.Cells(PLV, "CQ").Value = 0
           End With
mais sa ne vas pas :/

en gros il doit chercher le numéro de la facture d'acompte qui est en TextBox113 (quand je suis en mode pour solder la facture)
dans la feuille "Facture" en A:A et me supprimer le "1" de cette ligne en question en CQ

possible ?
G
Geoffrey027
Membre habitué
Membre habitué
Messages : 84
Inscrit le : 18 mars 2018
Version d'Excel : 2016

Message par Geoffrey027 » 26 mai 2019, 08:11

Je vient de trouver ceci et le modifier et sa fonctionne :)

Si vous savez quand même regarder si rien ne cloche
mais le code fonctionne,
il me copie bien "0" à la ligne que je désire selon la fonction find :)
Dim r As Range 'déclare la variable r (Recherche)
Dim tr As String 'déclare la variable tr (Texte Recherché)
Dim li As Integer 'déclare la variable li (LIgne)

tr = TextBox113.Text 'définit la variable tr

With Sheets("Facture") 'prend en compte l'onglet "Facture"
'définit la variable r (recherche les occurrences de tr dans la colonne A de l'onglet "Facture")
Set r = .Columns(1).Find(tr, , xlValues, xlWhole)
If Not r Is Nothing Then 'condition : si il existe au moins une occurrence
li = r.Row 'définit la variable li
.Cells(li, 95).Value = "0"
End If 'fin de la condition
End With 'fin de la prise en compte de l'onglet "BDD"

End If
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message