J'ai un message qui me met :
Erreur 91 - Variable objet ou variable de bloc with non definie.
Sur cette ligne
Code:Set Sh = Wbk.Worksheets.Add
Version imprimable
J'ai un message qui me met :
Erreur 91 - Variable objet ou variable de bloc with non definie.
Sur cette ligne
Code:Set Sh = Wbk.Worksheets.Add
[EDIT] Je suis sûr que si tu relis encore une fois mes dernières réponses, tu sauras tout seul la cause.
Wbk doit être déclaré dans un module public
Regarde bien le fichier sur lequel tu travailles; j'ai bien testé sans problème.
Sinon, ajoute cette msgboxqu'est ce que tu obtiens?Code:
1
2
3 If Me.ListBox2.ListCount > 0 Then MsgBox -5 * (Not Wbk Is Nothing) & "/5" Set Sh = Wbk.Worksheets.Add 'Ajoute une feuille tampon sur classeurB
Mercatog,
A quel endroit je dois mettre ce bout de code ?
Désolé, mais tu dois fournir une tout petit effort pour la suite
Je ne répondrai pas à ta dernière question, oubli ma proposition du Msgbox
Mais, je propose que tu relise notre échange dès le départ et fais les tests doucement sur le fichier qui fonctionnait sur Excel 2007
Relis dès le début, tu as tous les ingrédients!!
Mercatog,
Je suis que tu as raison et qu'il y a quelque chose que je fais mal mais je t'assure que je lis tous tes posts et j'ai tout suivi.
Je ne vois pas d'où vient mon erreur. :?
Mercatog,
J'ai tout relu et tout tester de nouveau et ca fonctionne nickel.
Juste une dernière question si tu n'es pas faché avec moi, est-il possible d'ouvrir un classeur vierge sans utiliser un classeur au préalable enregistré sur mon disque dur ?
Si je t'ai saoulé, c'est compréhensible et je te remercie pour toutes tes réponses.Code:Set Wbk = Workbooks.Open("C:\Users\user\Desktop\TonFichierB.xls")
Salut
Je me permet
++Code:Set Wbk = Workbooks.Add
Qwaz
Qwazerty,
Merci pour ta réponse, bien que je sois un sacré boulet :roll:
l'ouverture d'un nouveau classeur vierge fonctionne, mais du coup l'affichage de mun USF2 ne peut se faire car le classeur A se ferme à l'execution de la macro.
Recapitulation
Sur ton ClasseurA
1. Module public2. Bouton qui permet d'ouvrir le nouveau fichierCode:
1
2
3 Option Explicit Public Wbk As Workbook Public aWbk As Workbook
3. Code Userform2Code:
1
2
3
4
5 Private Sub CommandButton1_Click() Set aWbk = ThisWorkbook Set Wbk = Workbooks.Add(1) UserForm2.Show End Sub
4. Transfert ListBox1 vers ListBox2Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Private Sub UserForm_Initialize() Dim LastLig As Long, i As Long Dim MonDico As Object With Wbk.Worksheets("Feuil1") 'Correspond à Feuil1 de ClasseurB aWbk.Sheets("Feuil3").UsedRange.Copy .Range("A1") '!!ON COPIE DONNEES DE FEUIL3 CLASSEURA VERS FEUIL1 CLASSEURB LastLig = .Cells(.Rows.Count, "B").End(xlUp).Row .Range("B1:B" & LastLig).Sort Key1:=.Range("B2"), Order1:=xlAscending, Header:=xlYes Set MonDico = CreateObject("scripting.dictionary") For i = 2 To LastLig If Trim(.Range("B" & i).Value) <> "" Then MonDico(UCase(.Range("B" & i).Value)) = 1 Next i Me.ListBox1.List = MonDico.keys Set MonDico = Nothing End With End Sub
5. ValidationCode:
1
2
3
4
5
6
7
8
9 Private Sub Transfert_Click() With Me.ListBox1 If .ListIndex > -1 Then Me.ListBox2.AddItem .List(.ListIndex) .RemoveItem .ListIndex .ListIndex = -1 End If End With End Sub
Explication:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Private Sub Valider_Click() Dim Sh As Worksheet Dim LastLig As Long Dim i As Integer Application.ScreenUpdating = False If Me.ListBox2.ListCount > 0 Then Set Sh = Wbk.Worksheets.Add 'Ajoute une feuille tampon sur classeurB With Wbk.Worksheets("Feuil1") 'Correspond à Feuil1 de ClasseurB .AutoFilterMode = False LastLig = .Cells(.Rows.Count, "B").End(xlUp).Row For i = 0 To Me.ListBox2.ListCount - 1 .Range("B1:B" & LastLig).AutoFilter field:=1, Criteria1:=Me.ListBox2.List(i) .Range("A" & IIf(i = 0, 1, 2) & ":X" & LastLig).SpecialCells(xlCellTypeVisible).Copy Sh.Cells(Sh.Rows.Count, 1).End(xlUp)(2) Next i .AutoFilterMode = False .UsedRange.ClearContents Sh.UsedRange.Cut .Range("A1") End With Application.DisplayAlerts = False Sh.Delete Set Sh = Nothing Unload Me Wbk.SaveAs aWbk.Path & "\Fich" & Format(Now(), "ddmmyyhhnn") & ".xlsx" Set aWbk = Nothing Application.DisplayAlerts = True Wbk.Close Set Wbk = Nothing Else MsgBox "Aucune donnée à traiter" End If End Sub
A partir de ClasseurA, on crée un nouveau ClasseurB, dans lequel on transfère les données issues de la Feuil3 du ClasseurA, On fait notre traitement sur le ClasseurB, on l'enregistre et on le ferme
Mercatog,
Super ca fonctionne nickel.
J'ai juste remplace xlsx dans le code car je vais utiliser le code avec un 2003.
Merci beaucoup pour ta patience et gentillesse.
Je te souhaite une bonne soirée.