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

dgeo27

XLDnaute Junior
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

VB:
'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
 
C

Compte Supprimé 979

Guest
Salut degeo27,

Normalement ça ce passe ici en faisant par exemple
VB:
      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
          If CTRL.Tag = "CQ" And Me.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
      Next CTRL 'prochaine contrôle de la boucle

A tester

A+
 
Dernière modification par un modérateur:

dgeo27

XLDnaute Junior
Merci à toi en effet je pense que sa doit fonctionner mais...
Vus que de toute façon une fois qu'on est en dessous de la condition :

If CTRL.Tag = "CQ" And Me.ComboBox13.Value = "Acompte" Then
O.Cells(PLV, CTRL.Tag).Value = CTRL.Value

il fait ensuite :

Else
O.Cells(PLV, CTRL.Tag).Value = CTRL.Value

Du coup il me copie quand même le tag CQ même si je suis pas en "Acompte"

Il y à pas un moyen de dire à la seconde ligne qu'il doit copier uniquement les tag de A à CP ?
 
C

Compte Supprimé 979

Guest
Re,

Oula, tu es très fort en VBA toi

Bon... plus sérieusement, le Else n'est exécuté que si le IF est faux et non à la suite ;)

Il se peut que le contenu de ton Combobox13 ne soit pas tout à fait la valeur testée, essaye avec
VB:
If CTRL.Tag = "CQ" And instr(1,Me.ComboBox13,"Acompte",vbTextCompare) >0 Then

A+
 

Discussions similaires