Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Remplir un formulaire en fonction d'une liste

  • Initiateur de la discussion Initiateur de la discussion bobjazz
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

bobjazz

XLDnaute Impliqué
Bonjour le Forum

Je voudrais faire des impressions de la feuille "PR_Q12" en partant d'une liste qui se situe dans la feuille "QUESTIONNAIRE", en fonction de la DATE PREVUE D'ENVOI (Colonne I). Je remplie la feuille "PR_Q12" et j'imprime le groupe concernné, besoin d'aide.
Dans le fichier joint, j'ai mis en bleu ce que je remplie dans la feuille "PR_Q12"

Merci d'avance

Bobjazz
 

Pièces jointes

Re : Remplir un formulaire en fonction d'une liste

Salut Cher Ami !, Bonjour le Forum

Rapidement une approche avec quelques remaniements de ton UserForm....


Code:
Option Explicit
Const T As String = "QUESTIONNAIRE"
Private Sub UserForm_Initialize()
Dim Cel As Range, Plage As Range
    With Me
        .TxbDate = Date
        .ComboBox1.MatchRequired = True
        .Caption = T
    End With

        With Sheets("QUESTIONNAIRE")
            Set Plage = .Range(.Range("I6"), .Range("I65536").End(xlUp))
        End With
                For Each Cel In Plage
                    ComboBox1.AddItem Format(CDate(Cel.Value), "DD/MM/YYYY")
                Next Cel
End Sub

Private Sub CmdMaj_Click()
Dim Cel As Range, Plage As Range
If Me.ComboBox1.ListIndex = -1 Then Exit Sub

        With Sheets("QUESTIONNAIRE")
            Set Plage = .Range(.Range("I6"), .Range("I65536").End(xlUp))
        End With
                For Each Cel In Plage
                    If CDate(Cel.Value) = CDate(Me.ComboBox1) Then
                        With Sheets("PR - Q12")
                        .Activate
                        .Range("E5") = Cel.Offset(0, -8)
                        .Range("E7") = Cel.Offset(0, -7) & " " & Cel.Offset(0, -6)
                        .Range("E9") = Cel.Offset(0, -5)
                        .Range("E11") = Cel.Offset(0, -2)
                        .Range("E13") = Cel.Offset(0, -1)
                            With .Range("E15")
                                .Value = Cel.Offset(0, -4)
                                .NumberFormat = "DD/MM/YY"
                            End With
'                        .PrintOut '<<<<< RENDRE ACTIF POUR IMPRESSION
                        End With
                    
                    End If
                Next Cel
                
End Sub
 
Private Sub CmdExit_Click()
    Unload USFSuivi
End Sub

Bonne Fin de Journée
@+Thierry
 
Re : Remplir un formulaire en fonction d'une liste

Bonjour Thierry

Merci cela marche, mais mon sousi si c'en est un, lorsque je lance l'impression, rien ne se passe, si je ferme l'USF et j'imprime, il imprime que celle devant et non la totalité, exemple MAI.
Je vais essayé d'adapter un code de pierrejean avec aperçu

Merci d'avance

Bobjazz
 
Re : Remplir un formulaire en fonction d'une liste

Re BobJazz, le Forum

Ton souci vient du fait que, par exemple, pour la Ligne 10 "N° 0105B99-BT1-FS" la Date en I10 provient de la Cellule E10 (16/01/2006) + 90 soit le 08/05/2006... Et même si tu fais un Format Perso "MMM-YY" la valeur reste 08/05/2005.

Il faudrait faire une algo plus poussé pour rechercher sur une notion du mois courant...

Je dois partir, si personne ne trouve, j'essaierai de repasser.

Bonne Soirée
@+Thierry
 
Re : Remplir un formulaire en fonction d'une liste

Bonsoir Thierry,

Je suis arrivé à ce que je voulais, mais je pense qu'il y a plus simple et surtout je voudrais faire en sorte que quand je lance mon impression, un message me dit combien de feuilles je vais imprimer.

question: est ce qu'il est possible qu'il n'y a pas de doublon quand j'ouvre ma combobox

voilà le code retravaillé

Option Explicit
Const T As String = "QUESTIONNAIRE"
Private Sub UserForm_Initialize()
Dim Cel As Range, Plage As Range
With Me
.TxbDate = Date
.ComboBox1.MatchRequired = True
.Caption = T
End With

With Sheets("QUESTIONNAIRE")
Set Plage = .Range(.Range("I6"), .Range("I65536").End(xlUp))
End With
For Each Cel In Plage
ComboBox1.AddItem Format(CDate(Cel.Value), "MM/YYYY")
Next Cel
End Sub

Private Sub CmdMaj_Click()
Dim Cel As Range, Plage As Range
If Me.ComboBox1.ListIndex = -1 Then Exit Sub

With Sheets("QUESTIONNAIRE")
Set Plage = .Range(.Range("I6"), .Range("I65536").End(xlUp))
End With
For Each Cel In Plage
If CDate(Cel.Value) > CDate(Me.ComboBox1) And CDate(Cel.Value) < (30 + CDate(Me.ComboBox1)) Then
With Sheets("PR - Q12")
.Activate
.Range("E5") = Cel.Offset(0, -8)
.Range("E7") = Cel.Offset(0, -7) & " " & Cel.Offset(0, -6)
.Range("E9") = Cel.Offset(0, -5)
.Range("E11") = Cel.Offset(0, -2)
.Range("E13") = Cel.Offset(0, -1)
With .Range("E15")
.Value = Cel.Offset(0, -4)
.NumberFormat = "MM/YYYY"
End With
.PrintOut
End With

End If
Next Cel

End Sub

Private Sub CmdExit_Click()
Unload USFSuivi
End Sub
 
Re : Remplir un formulaire en fonction d'une liste

Bonjour BobJazz, le Forum

J'ai un peu paufiné cet algo afin de rendre la sélection plus précise sur le Mois courant réél (avec année) plutot que cette solution d'un ajout de + 30 jours à la Date.

Voici ce que ça donne, c'est un peu plus compliqué mais celà montre l'usage de la Function "DatePart" très utile dans ce cas là et de la célèbre "Collection" pour éviter les doublons...

En effet j'en ai donc profité pour virer les doublons dans la ComBoBox et faire un Message d'avertissement pour le nombre d'impressions avec une liste.

Code:
Option Explicit
Const T As String = "QUESTIONNAIRE"

Private Sub UserForm_Initialize()
Dim Cel As Range, Plage As Range
Dim ColMonthStr As New Collection
Dim ColMonthNum As New Collection
Dim x As Integer
 
 
    With Me
        .TxbDate = Format(Date, "DD/MM/YYYY")
            With .ComboBox1
                .ColumnCount = 2
                .ColumnWidths = "100;0"
                .MatchRequired = True
            End With
        .Caption = T
    End With
    With Sheets("QUESTIONNAIRE")
        Set Plage = .Range(.Range("I6"), .Range("I65536").End(xlUp))
    End With
    
    
        For Each Cel In Plage
            
            On Error Resume Next
                ColMonthStr.Add CStr(Format(CDate(Cel.Value), "MMMM")) & "-" & CStr(Format(CDate(Cel.Value), "YYYY")), _
                                CStr(Format(CDate(Cel.Value), "MMMM")) & "-" & CStr(Format(CDate(Cel.Value), "YYYY"))
                ColMonthNum.Add CStr(DatePart("m", CDate(Cel.Value))) & CStr(DatePart("YYYY", CDate(Cel.Value))), _
                                CStr(DatePart("m", CDate(Cel.Value))) & CStr(DatePart("YYYY", CDate(Cel.Value)))
            On Error GoTo 0
        Next Cel
        
                For x = 1 To ColMonthStr.Count
                    With Me.ComboBox1
                    .AddItem ColMonthStr(x)
                    .Column(1, x - 1) = ColMonthNum(x)
                    End With
                Next
End Sub
 
 
 
Private Sub CmdMaj_Click()
Dim Cel As Range, Plage As Range
Dim Total As Integer
Dim Question As Byte
Dim Listing As String
If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'Si pas de sélection on sort
    With Sheets("QUESTIONNAIRE")
        Set Plage = .Range(.Range("I6"), .Range("I65536").End(xlUp))
    End With
    
        For Each Cel In Plage
             
                If CStr(DatePart("m", CDate(Cel.Value))) & CStr(DatePart("YYYY", CDate(Cel.Value))) = _
                        Me.ComboBox1.Column(1, Me.ComboBox1.ListIndex) Then
                        Total = Total + 1
                        Listing = Listing & "Date " & Format(Cel.Value, "DD/MM/YY") & vbTab & Cel.Offset(0, -1) & vbCrLf
                End If
        Next
    
        Question = MsgBox(Total & " Formulaires à imprimer les organimes suivants :" & vbCrLf & Listing, vbQuestion + vbYesNo, T)
        If Question = vbNo Then Exit Sub 'Si NON on sort...
        
    
        For Each Cel In Plage
             
                If CStr(DatePart("m", CDate(Cel.Value))) & CStr(DatePart("YYYY", CDate(Cel.Value))) = _
                        Me.ComboBox1.Column(1, Me.ComboBox1.ListIndex) Then
            
             
                With Sheets("PR - Q12")
                    .Activate
                    .Range("E5") = Cel.Offset(0, -8)
                    .Range("E7") = Cel.Offset(0, -7) & " " & Cel.Offset(0, -6)
                    .Range("E9") = Cel.Offset(0, -5)
                    .Range("E11") = Cel.Offset(0, -2)
                    .Range("E13") = Cel.Offset(0, -1)
                With .Range("E15")
                    .Value = Cel.Offset(0, -4)
                    .NumberFormat = "MM/YYYY"
                End With
                
'                  .PrintOut '<<<<<<<<< A REMETTRE ACTIF pour avoir les Impressions
                End With
End If
Next Cel
End Sub
 
 
Private Sub CmdExit_Click()
Unload USFSuivi
End Sub

Je pense que tu seras satisfait cher ami !

Bon Appétit

@+Thierry

 
Re : Remplir un formulaire en fonction d'une liste

Re Bonjour

Merci Thierry
en plein dans le mille, et je vais essayé de comprendre, mais il va me falloir beaucoup de patience

Merci encore
bobjazz
 
Re : Remplir un formulaire en fonction d'une liste

Re bonjour Thierry
J'ai essayé de trouver un code sur le tien pour que , quand je lance l'impression, j'ai le choix entre tous ou choisir les personnes.
Si tu suis toujours le fil, je suis toujours à l'écoute de tes codes si parfait.

Merci d'avance

bobjazz
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
614
Réponses
10
Affichages
493
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…