Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et des
boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy _After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe worksheet
a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
e%Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)= false
then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi, ça
marche.
Daniel
"ga51" a écrit dans le message de news:
eKF%Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug car le
programme supprime les onglets et s'arrête au dernier car un classeur
doit obligatoirement avoir un onglet minimum.(puisqu'il ne trouve rien
à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque chose
?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus ! On
Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la listbox ?
car le dernier copié se met avant l'autre. Normal je pense à cause
du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).ActivateWith ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End IfNext i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles vides
qui sont par défaut dans le classeur créé ? pour finioler !! pour
éviter d'envoyer un fichier avec des onglets vides.
Merci encore pour tout
Cordialement
Ga51En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs avaient
les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet sélectionné
? si oui, c'est effectivement le nom de l'onglet qui fait parti
de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel classeur ?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom affiché
appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
%Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné sur
mon classeur. Le 1er onglet sélectionné se copie parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la 2ième
tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
O9$Merci pour ton exemple, il fonctionne super bien en effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le renommer
avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi futur
par mail) plutôt que d'envoyer ces onglets dans un classeur
déjà existant.
Car dans ma configuration de travail, cela sera impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51J'ai créé un nouveau classeur minimal avec une userform et
une listbox. Ca fonctionne sans problème. Je te l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur cible
ouvert!)...
Mais si je le transpose dans ma macro, cela ne fonctionne
pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y avoir
autre chose.
Fais une éxécution en mode pas à pas du fichier qui t'a
été transmis et regarde ce que ca donne.
A+J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51Problème de version ?
La listbox est configurée de telle manière qu'il faut
maintenir la touche CTRL enfoncée pour faire une
seconde sélection.
Sinon il va falloir que les VRAIS gourous se penchent
sur ton problème.
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule feuille et
non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" a écrit dans le message de
news: %Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur ouvert et
donc actif.
Cordialement
GaBonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" a écrit dans le message de
news: %Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
OgUEYF9WFHA.3840@tk2msftngp13.phx.gbl...
Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et des
boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy _After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe worksheet
a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51
Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e%23eXSv5WFHA.3348@TK2MSFTNGP14.phx.gbl...
Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)= false
then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51
Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi, ça
marche.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
eKF%23J1xWFHA.3584@TK2MSFTNGP14.phx.gbl...
Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug car le
programme supprime les onglets et s'arrête au dernier car un classeur
doit obligatoirement avoir un onglet minimum.(puisqu'il ne trouve rien
à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51
Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque chose
?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51
Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
uKAsbmvWFHA.1040@TK2MSFTNGP10.phx.gbl...
Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus ! On
Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la listbox ?
car le dernier copié se met avant l'autre. Normal je pense à cause
du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51
En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e0RmbquWFHA.3280@TK2MSFTNGP09.phx.gbl...
Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).Activate
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles vides
qui sont par défaut dans le classeur créé ? pour finioler !! pour
éviter d'envoyer un fichier avec des onglets vides.
Merci encore pour tout
Cordialement
Ga51
En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs avaient
les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O4oeIJuWFHA.1240@TK2MSFTNGP14.phx.gbl...
J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet sélectionné
? si oui, c'est effectivement le nom de l'onglet qui fait parti
de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel classeur ?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51
Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom affiché
appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
%233GhwPtWFHA.2700@TK2MSFTNGP12.phx.gbl...
Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné sur
mon classeur. Le 1er onglet sélectionné se copie parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la 2ième
tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51
Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O9$Z4WmWFHA.3928@TK2MSFTNGP15.phx.gbl...
Merci pour ton exemple, il fonctionne super bien en effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le renommer
avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi futur
par mail) plutôt que d'envoyer ces onglets dans un classeur
déjà existant.
Car dans ma configuration de travail, cela sera impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51
J'ai créé un nouveau classeur minimal avec une userform et
une listbox. Ca fonctionne sans problème. Je te l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e966FIlWFHA.1468@tk2msftngp13.phx.gbl...
Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur cible
ouvert!)...
Mais si je le transpose dans ma macro, cela ne fonctionne
pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51
Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y avoir
autre chose.
Fais une éxécution en mode pas à pas du fichier qui t'a
été transmis et regarde ce que ca donne.
A+
J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51
Problème de version ?
La listbox est configurée de telle manière qu'il faut
maintenir la touche CTRL enfoncée pour faire une
seconde sélection.
Sinon il va falloir que les VRAIS gourous se penchent
sur ton problème.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: upaVZ4iWFHA.612@TK2MSFTNGP12.phx.gbl...
Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule feuille et
non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51
Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: %23l0OY0hWFHA.2664@TK2MSFTNGP15.phx.gbl...
Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur ouvert et
donc actif.
Cordialement
Ga
Bonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: %2304hDVhWFHA.2420@TK2MSFTNGP12.phx.gbl...
Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et des
boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy _After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe worksheet
a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
e%Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)= false
then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi, ça
marche.
Daniel
"ga51" a écrit dans le message de news:
eKF%Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug car le
programme supprime les onglets et s'arrête au dernier car un classeur
doit obligatoirement avoir un onglet minimum.(puisqu'il ne trouve rien
à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque chose
?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus ! On
Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la listbox ?
car le dernier copié se met avant l'autre. Normal je pense à cause
du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).ActivateWith ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End IfNext i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles vides
qui sont par défaut dans le classeur créé ? pour finioler !! pour
éviter d'envoyer un fichier avec des onglets vides.
Merci encore pour tout
Cordialement
Ga51En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs avaient
les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet sélectionné
? si oui, c'est effectivement le nom de l'onglet qui fait parti
de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel classeur ?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom affiché
appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
%Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné sur
mon classeur. Le 1er onglet sélectionné se copie parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la 2ième
tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
O9$Merci pour ton exemple, il fonctionne super bien en effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le renommer
avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi futur
par mail) plutôt que d'envoyer ces onglets dans un classeur
déjà existant.
Car dans ma configuration de travail, cela sera impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51J'ai créé un nouveau classeur minimal avec une userform et
une listbox. Ca fonctionne sans problème. Je te l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur cible
ouvert!)...
Mais si je le transpose dans ma macro, cela ne fonctionne
pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y avoir
autre chose.
Fais une éxécution en mode pas à pas du fichier qui t'a
été transmis et regarde ce que ca donne.
A+J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51Problème de version ?
La listbox est configurée de telle manière qu'il faut
maintenir la touche CTRL enfoncée pour faire une
seconde sélection.
Sinon il va falloir que les VRAIS gourous se penchent
sur ton problème.
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule feuille et
non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" a écrit dans le message de
news: %Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur ouvert et
donc actif.
Cordialement
GaBonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" a écrit dans le message de
news: %Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et des
boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
e%Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)= false
then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi,
ça marche.
Daniel
"ga51" a écrit dans le message de news:
eKF%Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug car
le programme supprime les onglets et s'arrête au dernier car un
classeur doit obligatoirement avoir un onglet minimum.(puisqu'il ne
trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque
chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus ! On
Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la listbox
?
car le dernier copié se met avant l'autre. Normal je pense à cause
du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).ActivateWith ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End IfNext i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles vides
qui sont par défaut dans le classeur créé ? pour finioler !!
pour éviter d'envoyer un fichier avec des onglets vides.
Merci encore pour tout
Cordialement
Ga51En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs
avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de l'onglet
qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel classeur
?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom affiché
appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
%Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné sur
mon classeur. Le 1er onglet sélectionné se copie
parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la
2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
O9$Merci pour ton exemple, il fonctionne super bien en effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le
renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi
futur par mail) plutôt que d'envoyer ces onglets dans un
classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51J'ai créé un nouveau classeur minimal avec une userform
et une listbox. Ca fonctionne sans problème. Je te
l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur
cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des
onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y avoir
autre chose.
Fais une éxécution en mode pas à pas du fichier qui t'a
été transmis et regarde ce que ca donne.
A+J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51Problème de version ?
La listbox est configurée de telle manière qu'il faut
maintenir la touche CTRL enfoncée pour faire une
seconde sélection.
Sinon il va falloir que les VRAIS gourous se penchent
sur ton problème.
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule feuille
et non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" a écrit dans le message de
news: %Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur ouvert
et donc actif.
Cordialement
GaBonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" a écrit dans le message
de news:
%Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51
Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
OgUEYF9WFHA.3840@tk2msftngp13.phx.gbl...
Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et des
boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51
Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e%23eXSv5WFHA.3348@TK2MSFTNGP14.phx.gbl...
Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)= false
then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51
Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi,
ça marche.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
eKF%23J1xWFHA.3584@TK2MSFTNGP14.phx.gbl...
Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug car
le programme supprime les onglets et s'arrête au dernier car un
classeur doit obligatoirement avoir un onglet minimum.(puisqu'il ne
trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51
Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque
chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51
Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
uKAsbmvWFHA.1040@TK2MSFTNGP10.phx.gbl...
Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus ! On
Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la listbox
?
car le dernier copié se met avant l'autre. Normal je pense à cause
du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51
En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e0RmbquWFHA.3280@TK2MSFTNGP09.phx.gbl...
Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).Activate
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles vides
qui sont par défaut dans le classeur créé ? pour finioler !!
pour éviter d'envoyer un fichier avec des onglets vides.
Merci encore pour tout
Cordialement
Ga51
En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs
avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O4oeIJuWFHA.1240@TK2MSFTNGP14.phx.gbl...
J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de l'onglet
qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel classeur
?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51
Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom affiché
appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
%233GhwPtWFHA.2700@TK2MSFTNGP12.phx.gbl...
Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné sur
mon classeur. Le 1er onglet sélectionné se copie
parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la
2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51
Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O9$Z4WmWFHA.3928@TK2MSFTNGP15.phx.gbl...
Merci pour ton exemple, il fonctionne super bien en effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le
renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi
futur par mail) plutôt que d'envoyer ces onglets dans un
classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51
J'ai créé un nouveau classeur minimal avec une userform
et une listbox. Ca fonctionne sans problème. Je te
l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e966FIlWFHA.1468@tk2msftngp13.phx.gbl...
Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur
cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des
onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51
Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y avoir
autre chose.
Fais une éxécution en mode pas à pas du fichier qui t'a
été transmis et regarde ce que ca donne.
A+
J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51
Problème de version ?
La listbox est configurée de telle manière qu'il faut
maintenir la touche CTRL enfoncée pour faire une
seconde sélection.
Sinon il va falloir que les VRAIS gourous se penchent
sur ton problème.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: upaVZ4iWFHA.612@TK2MSFTNGP12.phx.gbl...
Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule feuille
et non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51
Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: %23l0OY0hWFHA.2664@TK2MSFTNGP15.phx.gbl...
Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur ouvert
et donc actif.
Cordialement
Ga
Bonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message
de news:
%2304hDVhWFHA.2420@TK2MSFTNGP12.phx.gbl...
Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et des
boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
e%Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)= false
then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi,
ça marche.
Daniel
"ga51" a écrit dans le message de news:
eKF%Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug car
le programme supprime les onglets et s'arrête au dernier car un
classeur doit obligatoirement avoir un onglet minimum.(puisqu'il ne
trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque
chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus ! On
Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la listbox
?
car le dernier copié se met avant l'autre. Normal je pense à cause
du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).ActivateWith ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End IfNext i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles vides
qui sont par défaut dans le classeur créé ? pour finioler !!
pour éviter d'envoyer un fichier avec des onglets vides.
Merci encore pour tout
Cordialement
Ga51En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs
avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de l'onglet
qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel classeur
?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom affiché
appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
%Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné sur
mon classeur. Le 1er onglet sélectionné se copie
parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la
2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
O9$Merci pour ton exemple, il fonctionne super bien en effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le
renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi
futur par mail) plutôt que d'envoyer ces onglets dans un
classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51J'ai créé un nouveau classeur minimal avec une userform
et une listbox. Ca fonctionne sans problème. Je te
l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur
cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des
onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y avoir
autre chose.
Fais une éxécution en mode pas à pas du fichier qui t'a
été transmis et regarde ce que ca donne.
A+J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51Problème de version ?
La listbox est configurée de telle manière qu'il faut
maintenir la touche CTRL enfoncée pour faire une
seconde sélection.
Sinon il va falloir que les VRAIS gourous se penchent
sur ton problème.
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule feuille
et non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" a écrit dans le message de
news: %Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur ouvert
et donc actif.
Cordialement
GaBonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" a écrit dans le message
de news:
%Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
Quand tu positionnes le curseur sur Sheets.Count, est-ce que tu obtiens bien
le nombre de feuilles du classeur cible ? Sinon, quel est le message
d'erreur ?
Daniel
"ga51" a écrit dans le message de news:
O5k9TF%re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et des
boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
e%Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)= false
then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi,
ça marche.
Daniel
"ga51" a écrit dans le message de news:
eKF%Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug car
le programme supprime les onglets et s'arrête au dernier car un
classeur doit obligatoirement avoir un onglet minimum.(puisqu'il ne
trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque
chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus ! On
Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la listbox
?
car le dernier copié se met avant l'autre. Normal je pense à cause
du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).ActivateWith ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End IfNext i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles vides
qui sont par défaut dans le classeur créé ? pour finioler !!
pour éviter d'envoyer un fichier avec des onglets vides.
Merci encore pour tout
Cordialement
Ga51En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs
avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de l'onglet
qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel classeur
?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom affiché
appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
%Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné sur
mon classeur. Le 1er onglet sélectionné se copie
parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la
2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
O9$Merci pour ton exemple, il fonctionne super bien en effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le
renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi
futur par mail) plutôt que d'envoyer ces onglets dans un
classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51J'ai créé un nouveau classeur minimal avec une userform
et une listbox. Ca fonctionne sans problème. Je te
l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur
cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des
onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y avoir
autre chose.
Fais une éxécution en mode pas à pas du fichier qui t'a
été transmis et regarde ce que ca donne.
A+J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51Problème de version ?
La listbox est configurée de telle manière qu'il faut
maintenir la touche CTRL enfoncée pour faire une
seconde sélection.
Sinon il va falloir que les VRAIS gourous se penchent
sur ton problème.
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule feuille
et non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" a écrit dans le message de
news: %Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur ouvert
et donc actif.
Cordialement
GaBonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" a écrit dans le message
de news:
%Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
Quand tu positionnes le curseur sur Sheets.Count, est-ce que tu obtiens bien
le nombre de feuilles du classeur cible ? Sinon, quel est le message
d'erreur ?
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O5k9TF%23WFHA.3572@TK2MSFTNGP12.phx.gbl...
re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51
Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
OgUEYF9WFHA.3840@tk2msftngp13.phx.gbl...
Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et des
boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51
Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e%23eXSv5WFHA.3348@TK2MSFTNGP14.phx.gbl...
Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)= false
then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51
Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi,
ça marche.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
eKF%23J1xWFHA.3584@TK2MSFTNGP14.phx.gbl...
Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug car
le programme supprime les onglets et s'arrête au dernier car un
classeur doit obligatoirement avoir un onglet minimum.(puisqu'il ne
trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51
Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque
chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51
Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
uKAsbmvWFHA.1040@TK2MSFTNGP10.phx.gbl...
Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus ! On
Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la listbox
?
car le dernier copié se met avant l'autre. Normal je pense à cause
du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51
En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e0RmbquWFHA.3280@TK2MSFTNGP09.phx.gbl...
Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).Activate
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles vides
qui sont par défaut dans le classeur créé ? pour finioler !!
pour éviter d'envoyer un fichier avec des onglets vides.
Merci encore pour tout
Cordialement
Ga51
En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs
avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O4oeIJuWFHA.1240@TK2MSFTNGP14.phx.gbl...
J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de l'onglet
qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel classeur
?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51
Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom affiché
appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
%233GhwPtWFHA.2700@TK2MSFTNGP12.phx.gbl...
Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné sur
mon classeur. Le 1er onglet sélectionné se copie
parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la
2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51
Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O9$Z4WmWFHA.3928@TK2MSFTNGP15.phx.gbl...
Merci pour ton exemple, il fonctionne super bien en effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le
renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi
futur par mail) plutôt que d'envoyer ces onglets dans un
classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51
J'ai créé un nouveau classeur minimal avec une userform
et une listbox. Ca fonctionne sans problème. Je te
l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e966FIlWFHA.1468@tk2msftngp13.phx.gbl...
Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur
cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des
onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51
Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y avoir
autre chose.
Fais une éxécution en mode pas à pas du fichier qui t'a
été transmis et regarde ce que ca donne.
A+
J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51
Problème de version ?
La listbox est configurée de telle manière qu'il faut
maintenir la touche CTRL enfoncée pour faire une
seconde sélection.
Sinon il va falloir que les VRAIS gourous se penchent
sur ton problème.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: upaVZ4iWFHA.612@TK2MSFTNGP12.phx.gbl...
Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule feuille
et non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51
Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: %23l0OY0hWFHA.2664@TK2MSFTNGP15.phx.gbl...
Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur ouvert
et donc actif.
Cordialement
Ga
Bonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message
de news:
%2304hDVhWFHA.2420@TK2MSFTNGP12.phx.gbl...
Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
Quand tu positionnes le curseur sur Sheets.Count, est-ce que tu obtiens bien
le nombre de feuilles du classeur cible ? Sinon, quel est le message
d'erreur ?
Daniel
"ga51" a écrit dans le message de news:
O5k9TF%re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et des
boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
e%Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)= false
then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi,
ça marche.
Daniel
"ga51" a écrit dans le message de news:
eKF%Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug car
le programme supprime les onglets et s'arrête au dernier car un
classeur doit obligatoirement avoir un onglet minimum.(puisqu'il ne
trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque
chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus ! On
Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la listbox
?
car le dernier copié se met avant l'autre. Normal je pense à cause
du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).ActivateWith ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End IfNext i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles vides
qui sont par défaut dans le classeur créé ? pour finioler !!
pour éviter d'envoyer un fichier avec des onglets vides.
Merci encore pour tout
Cordialement
Ga51En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs
avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de l'onglet
qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel classeur
?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom affiché
appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
%Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné sur
mon classeur. Le 1er onglet sélectionné se copie
parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la
2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
O9$Merci pour ton exemple, il fonctionne super bien en effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le
renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi
futur par mail) plutôt que d'envoyer ces onglets dans un
classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51J'ai créé un nouveau classeur minimal avec une userform
et une listbox. Ca fonctionne sans problème. Je te
l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur
cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des
onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y avoir
autre chose.
Fais une éxécution en mode pas à pas du fichier qui t'a
été transmis et regarde ce que ca donne.
A+J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51Problème de version ?
La listbox est configurée de telle manière qu'il faut
maintenir la touche CTRL enfoncée pour faire une
seconde sélection.
Sinon il va falloir que les VRAIS gourous se penchent
sur ton problème.
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule feuille
et non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" a écrit dans le message de
news: %Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur ouvert
et donc actif.
Cordialement
GaBonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" a écrit dans le message
de news:
%Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
Bonsoir,
Le classeur source se nomme "audit agence" et le classeur cible
"SauveOnglets" que je renomme ensuite "synthese agences"
J'obtiens le nombre des onglets du classeur "audit agence" à partir duquel
je copie, à savoir 9.
Le message d'erreur est: L'indice n'appartient pas à la sélection
Cordialement
Ga51Quand tu positionnes le curseur sur Sheets.Count, est-ce que tu obtiens
bien le nombre de feuilles du classeur cible ? Sinon, quel est le message
d'erreur ?
Daniel
"ga51" a écrit dans le message de news:
O5k9TF%re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et
des boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
e%Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)=
false then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi,
ça marche.
Daniel
"ga51" a écrit dans le message de news:
eKF%Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug
car le programme supprime les onglets et s'arrête au dernier car un
classeur doit obligatoirement avoir un onglet minimum.(puisqu'il ne
trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque
chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la
listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus !
On Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la
listbox ?
car le dernier copié se met avant l'autre. Normal je pense à
cause du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).ActivateWith ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End IfNext i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles
vides qui sont par défaut dans le classeur créé ? pour
finioler !! pour éviter d'envoyer un fichier avec des onglets
vides.
Merci encore pour tout
Cordialement
Ga51En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs
avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de l'onglet
qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel
classeur ?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom
affiché appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
%Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné
sur mon classeur. Le 1er onglet sélectionné se copie
parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la
2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
O9$Merci pour ton exemple, il fonctionne super bien en
effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le
renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi
futur par mail) plutôt que d'envoyer ces onglets dans un
classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51J'ai créé un nouveau classeur minimal avec une userform
et une listbox. Ca fonctionne sans problème. Je te
l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur
cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des
onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y
avoir autre chose.
Fais une éxécution en mode pas à pas du fichier qui
t'a été transmis et regarde ce que ca donne.
A+J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51Problème de version ?
La listbox est configurée de telle manière qu'il
faut maintenir la touche CTRL enfoncée pour faire
une seconde sélection.
Sinon il va falloir que les VRAIS gourous se
penchent sur ton problème.
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule
feuille et non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" a écrit dans le message
de news:
%Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur
ouvert et donc actif.
Cordialement
GaBonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" a écrit dans le
message de news:
%Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
Bonsoir,
Le classeur source se nomme "audit agence" et le classeur cible
"SauveOnglets" que je renomme ensuite "synthese agences"
J'obtiens le nombre des onglets du classeur "audit agence" à partir duquel
je copie, à savoir 9.
Le message d'erreur est: L'indice n'appartient pas à la sélection
Cordialement
Ga51
Quand tu positionnes le curseur sur Sheets.Count, est-ce que tu obtiens
bien le nombre de feuilles du classeur cible ? Sinon, quel est le message
d'erreur ?
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O5k9TF%23WFHA.3572@TK2MSFTNGP12.phx.gbl...
re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51
Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
OgUEYF9WFHA.3840@tk2msftngp13.phx.gbl...
Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et
des boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51
Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e%23eXSv5WFHA.3348@TK2MSFTNGP14.phx.gbl...
Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)=
false then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51
Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi,
ça marche.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
eKF%23J1xWFHA.3584@TK2MSFTNGP14.phx.gbl...
Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug
car le programme supprime les onglets et s'arrête au dernier car un
classeur doit obligatoirement avoir un onglet minimum.(puisqu'il ne
trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51
Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque
chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51
Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
uKAsbmvWFHA.1040@TK2MSFTNGP10.phx.gbl...
Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la
listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus !
On Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la
listbox ?
car le dernier copié se met avant l'autre. Normal je pense à
cause du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51
En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e0RmbquWFHA.3280@TK2MSFTNGP09.phx.gbl...
Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).Activate
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles
vides qui sont par défaut dans le classeur créé ? pour
finioler !! pour éviter d'envoyer un fichier avec des onglets
vides.
Merci encore pour tout
Cordialement
Ga51
En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs
avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O4oeIJuWFHA.1240@TK2MSFTNGP14.phx.gbl...
J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de l'onglet
qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel
classeur ?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51
Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom
affiché appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
%233GhwPtWFHA.2700@TK2MSFTNGP12.phx.gbl...
Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné
sur mon classeur. Le 1er onglet sélectionné se copie
parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la
2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51
Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O9$Z4WmWFHA.3928@TK2MSFTNGP15.phx.gbl...
Merci pour ton exemple, il fonctionne super bien en
effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le
renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi
futur par mail) plutôt que d'envoyer ces onglets dans un
classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51
J'ai créé un nouveau classeur minimal avec une userform
et une listbox. Ca fonctionne sans problème. Je te
l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: e966FIlWFHA.1468@tk2msftngp13.phx.gbl...
Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur
cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des
onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51
Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y
avoir autre chose.
Fais une éxécution en mode pas à pas du fichier qui
t'a été transmis et regarde ce que ca donne.
A+
J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51
Problème de version ?
La listbox est configurée de telle manière qu'il
faut maintenir la touche CTRL enfoncée pour faire
une seconde sélection.
Sinon il va falloir que les VRAIS gourous se
penchent sur ton problème.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: upaVZ4iWFHA.612@TK2MSFTNGP12.phx.gbl...
Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule
feuille et non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51
Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message
de news:
%23l0OY0hWFHA.2664@TK2MSFTNGP15.phx.gbl...
Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur
ouvert et donc actif.
Cordialement
Ga
Bonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le
message de news:
%2304hDVhWFHA.2420@TK2MSFTNGP12.phx.gbl...
Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
Bonsoir,
Le classeur source se nomme "audit agence" et le classeur cible
"SauveOnglets" que je renomme ensuite "synthese agences"
J'obtiens le nombre des onglets du classeur "audit agence" à partir duquel
je copie, à savoir 9.
Le message d'erreur est: L'indice n'appartient pas à la sélection
Cordialement
Ga51Quand tu positionnes le curseur sur Sheets.Count, est-ce que tu obtiens
bien le nombre de feuilles du classeur cible ? Sinon, quel est le message
d'erreur ?
Daniel
"ga51" a écrit dans le message de news:
O5k9TF%re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et
des boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
e%Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)=
false then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi,
ça marche.
Daniel
"ga51" a écrit dans le message de news:
eKF%Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug
car le programme supprime les onglets et s'arrête au dernier car un
classeur doit obligatoirement avoir un onglet minimum.(puisqu'il ne
trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque
chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la
listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus !
On Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la
listbox ?
car le dernier copié se met avant l'autre. Normal je pense à
cause du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).ActivateWith ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End IfNext i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles
vides qui sont par défaut dans le classeur créé ? pour
finioler !! pour éviter d'envoyer un fichier avec des onglets
vides.
Merci encore pour tout
Cordialement
Ga51En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs
avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de l'onglet
qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel
classeur ?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom
affiché appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
%Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné
sur mon classeur. Le 1er onglet sélectionné se copie
parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la
2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
O9$Merci pour ton exemple, il fonctionne super bien en
effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le
renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi
futur par mail) plutôt que d'envoyer ces onglets dans un
classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51J'ai créé un nouveau classeur minimal avec une userform
et une listbox. Ca fonctionne sans problème. Je te
l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur
cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des
onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y
avoir autre chose.
Fais une éxécution en mode pas à pas du fichier qui
t'a été transmis et regarde ce que ca donne.
A+J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51Problème de version ?
La listbox est configurée de telle manière qu'il
faut maintenir la touche CTRL enfoncée pour faire
une seconde sélection.
Sinon il va falloir que les VRAIS gourous se
penchent sur ton problème.
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule
feuille et non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" a écrit dans le message
de news:
%Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur
ouvert et donc actif.
Cordialement
GaBonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" a écrit dans le
message de news:
%Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
Essaie de mettre le nom du classeur source : workboorks("audit
agence").Sheets(.List(i)).Copy
Daniel
"ga51" a écrit dans le message de news:
%23M14hi%Bonsoir,
Le classeur source se nomme "audit agence" et le classeur cible
"SauveOnglets" que je renomme ensuite "synthese agences"
J'obtiens le nombre des onglets du classeur "audit agence" à partir duquel
je copie, à savoir 9.
Le message d'erreur est: L'indice n'appartient pas à la sélection
Cordialement
Ga51Quand tu positionnes le curseur sur Sheets.Count, est-ce que tu obtiens
bien le nombre de feuilles du classeur cible ? Sinon, quel est le message
d'erreur ?
Daniel
"ga51" a écrit dans le message de news:
O5k9TF%re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et
des boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
e%Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)=
false then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi,
ça marche.
Daniel
"ga51" a écrit dans le message de news:
eKF%Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug
car le programme supprime les onglets et s'arrête au dernier car un
classeur doit obligatoirement avoir un onglet minimum.(puisqu'il ne
trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque
chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la
listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus !
On Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la
listbox ?
car le dernier copié se met avant l'autre. Normal je pense à
cause du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).ActivateWith ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End IfNext i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles
vides qui sont par défaut dans le classeur créé ? pour
finioler !! pour éviter d'envoyer un fichier avec des onglets
vides.
Merci encore pour tout
Cordialement
Ga51En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs
avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de l'onglet
qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel
classeur ?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom
affiché appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
%Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné
sur mon classeur. Le 1er onglet sélectionné se copie
parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la
2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
O9$Merci pour ton exemple, il fonctionne super bien en
effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le
renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi
futur par mail) plutôt que d'envoyer ces onglets dans un
classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51J'ai créé un nouveau classeur minimal avec une userform
et une listbox. Ca fonctionne sans problème. Je te
l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur
cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des
onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y
avoir autre chose.
Fais une éxécution en mode pas à pas du fichier qui
t'a été transmis et regarde ce que ca donne.
A+J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51Problème de version ?
La listbox est configurée de telle manière qu'il
faut maintenir la touche CTRL enfoncée pour faire
une seconde sélection.
Sinon il va falloir que les VRAIS gourous se
penchent sur ton problème.
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule
feuille et non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" a écrit dans le message
de news:
%Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur
ouvert et donc actif.
Cordialement
GaBonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" a écrit dans le
message de news:
%Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
Essaie de mettre le nom du classeur source : workboorks("audit
agence").Sheets(.List(i)).Copy
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
%23M14hi%23WFHA.2980@TK2MSFTNGP10.phx.gbl...
Bonsoir,
Le classeur source se nomme "audit agence" et le classeur cible
"SauveOnglets" que je renomme ensuite "synthese agences"
J'obtiens le nombre des onglets du classeur "audit agence" à partir duquel
je copie, à savoir 9.
Le message d'erreur est: L'indice n'appartient pas à la sélection
Cordialement
Ga51
Quand tu positionnes le curseur sur Sheets.Count, est-ce que tu obtiens
bien le nombre de feuilles du classeur cible ? Sinon, quel est le message
d'erreur ?
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O5k9TF%23WFHA.3572@TK2MSFTNGP12.phx.gbl...
re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51
Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
OgUEYF9WFHA.3840@tk2msftngp13.phx.gbl...
Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et
des boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51
Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e%23eXSv5WFHA.3348@TK2MSFTNGP14.phx.gbl...
Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)=
false then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51
Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi,
ça marche.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
eKF%23J1xWFHA.3584@TK2MSFTNGP14.phx.gbl...
Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug
car le programme supprime les onglets et s'arrête au dernier car un
classeur doit obligatoirement avoir un onglet minimum.(puisqu'il ne
trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51
Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque
chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51
Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
uKAsbmvWFHA.1040@TK2MSFTNGP10.phx.gbl...
Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la
listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus !
On Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la
listbox ?
car le dernier copié se met avant l'autre. Normal je pense à
cause du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51
En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e0RmbquWFHA.3280@TK2MSFTNGP09.phx.gbl...
Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).Activate
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles
vides qui sont par défaut dans le classeur créé ? pour
finioler !! pour éviter d'envoyer un fichier avec des onglets
vides.
Merci encore pour tout
Cordialement
Ga51
En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs
avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O4oeIJuWFHA.1240@TK2MSFTNGP14.phx.gbl...
J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de l'onglet
qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel
classeur ?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51
Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom
affiché appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
%233GhwPtWFHA.2700@TK2MSFTNGP12.phx.gbl...
Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné
sur mon classeur. Le 1er onglet sélectionné se copie
parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la
2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51
Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O9$Z4WmWFHA.3928@TK2MSFTNGP15.phx.gbl...
Merci pour ton exemple, il fonctionne super bien en
effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le
renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi
futur par mail) plutôt que d'envoyer ces onglets dans un
classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51
J'ai créé un nouveau classeur minimal avec une userform
et une listbox. Ca fonctionne sans problème. Je te
l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: e966FIlWFHA.1468@tk2msftngp13.phx.gbl...
Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur
cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des
onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51
Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y
avoir autre chose.
Fais une éxécution en mode pas à pas du fichier qui
t'a été transmis et regarde ce que ca donne.
A+
J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51
Problème de version ?
La listbox est configurée de telle manière qu'il
faut maintenir la touche CTRL enfoncée pour faire
une seconde sélection.
Sinon il va falloir que les VRAIS gourous se
penchent sur ton problème.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: upaVZ4iWFHA.612@TK2MSFTNGP12.phx.gbl...
Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule
feuille et non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51
Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message
de news:
%23l0OY0hWFHA.2664@TK2MSFTNGP15.phx.gbl...
Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur
ouvert et donc actif.
Cordialement
Ga
Bonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le
message de news:
%2304hDVhWFHA.2420@TK2MSFTNGP12.phx.gbl...
Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
Essaie de mettre le nom du classeur source : workboorks("audit
agence").Sheets(.List(i)).Copy
Daniel
"ga51" a écrit dans le message de news:
%23M14hi%Bonsoir,
Le classeur source se nomme "audit agence" et le classeur cible
"SauveOnglets" que je renomme ensuite "synthese agences"
J'obtiens le nombre des onglets du classeur "audit agence" à partir duquel
je copie, à savoir 9.
Le message d'erreur est: L'indice n'appartient pas à la sélection
Cordialement
Ga51Quand tu positionnes le curseur sur Sheets.Count, est-ce que tu obtiens
bien le nombre de feuilles du classeur cible ? Sinon, quel est le message
d'erreur ?
Daniel
"ga51" a écrit dans le message de news:
O5k9TF%re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9 onglets et
des boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière feuille
copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur sur
cjoint ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
e%Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if listbox1.selected(i)=
false then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur: "la
méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?, chez moi,
ça marche.
Daniel
"ga51" a écrit dans le message de news:
eKF%Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un bug
car le programme supprime les onglets et s'arrête au dernier car un
classeur doit obligatoirement avoir un onglet minimum.(puisqu'il ne
trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire quelque
chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la
listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné, voulez-vous
poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant dessus !
On Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur select
single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la
listbox ?
car le dernier copié se met avant l'autre. Normal je pense à
cause du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).ActivateWith ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End IfNext i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les feuilles
vides qui sont par défaut dans le classeur créé ? pour
finioler !! pour éviter d'envoyer un fichier avec des onglets
vides.
Merci encore pour tout
Cordialement
Ga51En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux classeurs
avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de l'onglet
qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le classeur
d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel
classeur ?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom
affiché appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
%Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à la
sélection" lors de la copie du 2ième onglet sélectionné
sur mon classeur. Le 1er onglet sélectionné se copie
parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors de la
2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement des
boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
O9$Merci pour ton exemple, il fonctionne super bien en
effet.
Pour aller plus loin, en fait je voulais sauvegarder les
onglets sélectionnés dans un nouveau classeur et le
renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour envoi
futur par mail) plutôt que d'envoyer ces onglets dans un
classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51J'ai créé un nouveau classeur minimal avec une userform
et une listbox. Ca fonctionne sans problème. Je te
l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le classeur
cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox, créée
dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je remplis la
listbox avec Additem pour l'alimenter du noms des
onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51Bonjour,
pas de pb pour moi non plus avec le fichier de Daniel
alors que j'ai la même config que toi. Il doit y
avoir autre chose.
Fais une éxécution en mode pas à pas du fichier qui
t'a été transmis et regarde ce que ca donne.
A+J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51Problème de version ?
La listbox est configurée de telle manière qu'il
faut maintenir la touche CTRL enfoncée pour faire
une seconde sélection.
Sinon il va falloir que les VRAIS gourous se
penchent sur ton problème.
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la selection)
De plus dans la msgbox, il n'y a qu'1 seule
feuille et non toutes les feuilles sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51Je t'envoie le classeur qui m'a servi à faire le
test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" a écrit dans le message
de news:
%Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur
ouvert et donc actif.
Cordialement
GaBonjour.
J'ai pas trop étudié ton code; est-ce que la
feuille copiée fait partie du classeur actif ?
Cordialement.
Daniel
"ga51" a écrit dans le
message de news:
%Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas à la
sélection.
Merci encore pour ton aide,
Cordialement.
Re,
J'ai la même erreur...
Cordialement.Essaie de mettre le nom du classeur source : workboorks("audit
agence").Sheets(.List(i)).Copy
Daniel
"ga51" a écrit dans le message de news:
%23M14hi%Bonsoir,
Le classeur source se nomme "audit agence" et le classeur cible
"SauveOnglets" que je renomme ensuite "synthese agences"
J'obtiens le nombre des onglets du classeur "audit agence" à partir
duquel je copie, à savoir 9.
Le message d'erreur est: L'indice n'appartient pas à la sélection
Cordialement
Ga51Quand tu positionnes le curseur sur Sheets.Count, est-ce que tu
obtiens bien le nombre de feuilles du classeur cible ? Sinon, quel
est le message d'erreur ?
Daniel
"ga51" a écrit dans le message de news:
O5k9TF%re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9
onglets et des boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy
After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière
feuille copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur
sur cjoint ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
e%Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if
listbox1.selected(i)= false then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur:
"la méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?,
chez moi, ça marche.
Daniel
"ga51" a écrit dans le message de news:
eKF%Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un
bug car le programme supprime les onglets et s'arrête au
dernier car un classeur doit obligatoirement avoir un onglet
minimum.(puisqu'il ne trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire
quelque chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la
listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné,
voulez-vous poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant
dessus ! On Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur
select single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la
listbox ?
car le dernier copié se met avant l'autre. Normal je pense
à cause du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).ActivateWith ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End IfNext i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les
feuilles vides qui sont par défaut dans le classeur créé
? pour finioler !! pour éviter d'envoyer un fichier avec
des onglets vides.
Merci encore pour tout
Cordialement
Ga51En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux
classeurs avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de
l'onglet qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le
classeur d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel
classeur ?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom
affiché appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" a écrit dans le message de
news: %Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à
la sélection" lors de la copie du 2ième onglet
sélectionné sur mon classeur. Le 1er onglet
sélectionné se copie parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors
de la 2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement
des boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" a écrit dans le message de
news: O9$Merci pour ton exemple, il fonctionne super bien
en effet.
Pour aller plus loin, en fait je voulais
sauvegarder les onglets sélectionnés dans un
nouveau classeur et le renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour
envoi futur par mail) plutôt que d'envoyer ces
onglets dans un classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51J'ai créé un nouveau classeur minimal avec une
userform et une listbox. Ca fonctionne sans
problème. Je te l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" a écrit dans le message
de news:Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le
classeur cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox,
créée dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je
remplis la listbox avec Additem pour l'alimenter
du noms des onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51Bonjour,
pas de pb pour moi non plus avec le fichier de
Daniel alors que j'ai la même config que toi.
Il doit y avoir autre chose.
Fais une éxécution en mode pas à pas du fichier
qui t'a été transmis et regarde ce que ca donne.
A+J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51Problème de version ?
La listbox est configurée de telle manière
qu'il faut maintenir la touche CTRL enfoncée
pour faire une seconde sélection.
Sinon il va falloir que les VRAIS gourous se
penchent sur ton problème.
Cordialement.
Daniel
"ga51" a écrit dans le
message de news:Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la
selection)
De plus dans la msgbox, il n'y a qu'1 seule
feuille et non toutes les feuilles
sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51Je t'envoie le classeur qui m'a servi à
faire le test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" a écrit dans le
message de news:
%Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur
ouvert et donc actif.
Cordialement
GaBonjour.
J'ai pas trop étudié ton code; est-ce que
la feuille copiée fait partie du classeur
actif ?
Cordialement.
Daniel
"ga51" a écrit dans le
message de news:
%Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas
à la sélection.
Merci encore pour ton aide,
Cordialement.
Re,
J'ai la même erreur...
Cordialement.
Essaie de mettre le nom du classeur source : workboorks("audit
agence").Sheets(.List(i)).Copy
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
%23M14hi%23WFHA.2980@TK2MSFTNGP10.phx.gbl...
Bonsoir,
Le classeur source se nomme "audit agence" et le classeur cible
"SauveOnglets" que je renomme ensuite "synthese agences"
J'obtiens le nombre des onglets du classeur "audit agence" à partir
duquel je copie, à savoir 9.
Le message d'erreur est: L'indice n'appartient pas à la sélection
Cordialement
Ga51
Quand tu positionnes le curseur sur Sheets.Count, est-ce que tu
obtiens bien le nombre de feuilles du classeur cible ? Sinon, quel
est le message d'erreur ?
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
O5k9TF%23WFHA.3572@TK2MSFTNGP12.phx.gbl...
re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51
Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
OgUEYF9WFHA.3840@tk2msftngp13.phx.gbl...
Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9
onglets et des boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy
After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière
feuille copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51
Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur
sur cjoint ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e%23eXSv5WFHA.3348@TK2MSFTNGP14.phx.gbl...
Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if
listbox1.selected(i)= false then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur:
"la méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51
Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?,
chez moi, ça marche.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
eKF%23J1xWFHA.3584@TK2MSFTNGP14.phx.gbl...
Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un
bug car le programme supprime les onglets et s'arrête au
dernier car un classeur doit obligatoirement avoir un onglet
minimum.(puisqu'il ne trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51
Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire
quelque chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51
Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
uKAsbmvWFHA.1040@TK2MSFTNGP10.phx.gbl...
Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la
listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné,
voulez-vous poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant
dessus ! On Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur
select single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la
listbox ?
car le dernier copié se met avant l'autre. Normal je pense
à cause du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51
En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de news:
e0RmbquWFHA.3280@TK2MSFTNGP09.phx.gbl...
Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).Activate
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les
feuilles vides qui sont par défaut dans le classeur créé
? pour finioler !! pour éviter d'envoyer un fichier avec
des onglets vides.
Merci encore pour tout
Cordialement
Ga51
En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux
classeurs avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: O4oeIJuWFHA.1240@TK2MSFTNGP14.phx.gbl...
J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de
l'onglet qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le
classeur d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel
classeur ?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51
Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom
affiché appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: %233GhwPtWFHA.2700@TK2MSFTNGP12.phx.gbl...
Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à
la sélection" lors de la copie du 2ième onglet
sélectionné sur mon classeur. Le 1er onglet
sélectionné se copie parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors
de la 2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement
des boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51
Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message de
news: O9$Z4WmWFHA.3928@TK2MSFTNGP15.phx.gbl...
Merci pour ton exemple, il fonctionne super bien
en effet.
Pour aller plus loin, en fait je voulais
sauvegarder les onglets sélectionnés dans un
nouveau classeur et le renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour
envoi futur par mail) plutôt que d'envoyer ces
onglets dans un classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51
J'ai créé un nouveau classeur minimal avec une
userform et une listbox. Ca fonctionne sans
problème. Je te l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le message
de news: e966FIlWFHA.1468@tk2msftngp13.phx.gbl...
Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le
classeur cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox,
créée dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je
remplis la listbox avec Additem pour l'alimenter
du noms des onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51
Bonjour,
pas de pb pour moi non plus avec le fichier de
Daniel alors que j'ai la même config que toi.
Il doit y avoir autre chose.
Fais une éxécution en mode pas à pas du fichier
qui t'a été transmis et regarde ce que ca donne.
A+
J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51
Problème de version ?
La listbox est configurée de telle manière
qu'il faut maintenir la touche CTRL enfoncée
pour faire une seconde sélection.
Sinon il va falloir que les VRAIS gourous se
penchent sur ton problème.
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le
message de news:
upaVZ4iWFHA.612@TK2MSFTNGP12.phx.gbl...
Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la
selection)
De plus dans la msgbox, il n'y a qu'1 seule
feuille et non toutes les feuilles
sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51
Je t'envoie le classeur qui m'a servi à
faire le test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le
message de news:
%23l0OY0hWFHA.2664@TK2MSFTNGP15.phx.gbl...
Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur
ouvert et donc actif.
Cordialement
Ga
Bonjour.
J'ai pas trop étudié ton code; est-ce que
la feuille copiée fait partie du classeur
actif ?
Cordialement.
Daniel
"ga51" <ga51@hotmail.fr> a écrit dans le
message de news:
%2304hDVhWFHA.2420@TK2MSFTNGP12.phx.gbl...
Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas
à la sélection.
Merci encore pour ton aide,
Cordialement.
Re,
J'ai la même erreur...
Cordialement.Essaie de mettre le nom du classeur source : workboorks("audit
agence").Sheets(.List(i)).Copy
Daniel
"ga51" a écrit dans le message de news:
%23M14hi%Bonsoir,
Le classeur source se nomme "audit agence" et le classeur cible
"SauveOnglets" que je renomme ensuite "synthese agences"
J'obtiens le nombre des onglets du classeur "audit agence" à partir
duquel je copie, à savoir 9.
Le message d'erreur est: L'indice n'appartient pas à la sélection
Cordialement
Ga51Quand tu positionnes le curseur sur Sheets.Count, est-ce que tu
obtiens bien le nombre de feuilles du classeur cible ? Sinon, quel
est le message d'erreur ?
Daniel
"ga51" a écrit dans le message de news:
O5k9TF%re,
J'ai essayé Sheets(Sheets.count) mais même erreur...
je ne pige pas pourquoi...
Cordialement
Ga51Au temps pour moi :
Sheets(.List(i)).Copy
after:=Workbooks("LeNomQueTuVeux.xls").Sheets(Sheets.Count)
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Bonsoir,
Mon classeur fait plus de 700 ko, il est très lourd avec 9
onglets et des boutons de contrôles.
En fait, la dernière instruction que tu m'as donnée à savoir:
Sheets(.List(i)).Copy
_After:=Workbooks("LeNomQueTuVeux.xls").Sheets.count
à la place de:
Sheets(.List(i)).Copy
After:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
ne fonctionne pas, j'ai une erreur "la méthode copy de la classe
worksheet a échouée".
Rappel:
je désirais copier dans l'ordre de la listbox c-à-d la dernière
feuille copiée derrière celle déjà copiée dans le nouveau classeur.
Tout Le reste est nickel maintenant.
Merci de ton aide.
Cordialement
Ga51Bonsoir.
Là, je n'arrive plus à suivre. Si tu pouvais mettre ton classeur
sur cjoint ?
Cordialement.
Daniel
"ga51" a écrit dans le message de news:
e%Bonjour,
Je n'arrivais pas à sortir de la boucle... ??
J'ai modifié en utilisant l'instruction: if
listbox1.selected(i)= false then etc... et çà marche bien.
par contre le .count à la fin de la ligne copy crée une erreur:
"la méthode copy de la classe worksheet a échouée".
Merci encore pour ta disponibilité
Cordialement
Ga51Pour la ligne do while, qu'est-ce qui ne fonctionne pas ?,
chez moi, ça marche.
Daniel
"ga51" a écrit dans le message de news:
eKF%Bonsoir,
en fait, dans la macro, si on ne sélectionne rien, il y a un
bug car le programme supprime les onglets et s'arrête au
dernier car un classeur doit obligatoirement avoir un onglet
minimum.(puisqu'il ne trouve rien à copier).
La boucle do while avec ListIndex ne fonctionne pas...
peut-être à cause de la propriété multi de la listbox ??
Merci de l'aide
Cordialement
Ga51Merci beaucoup Daniel, je fais essayé.
Pour l'ordre des onglets dans le classeur, peut-on faire
quelque chose ?
(pour respecter l'ordre de la listbox)
Merci pour tout
Cordialement
Ga51Je pense que le code suivant doit le faire :
Dans Private Sub UserForm_Initialize()
ajouter :
ListBox1.ListIndex = -1
et le test (à ajouter après le userform1.hide dans mon code)
Do While ListBox1.ListIndex = -1
MsgBox "Faut choisir quelque chose !"
Loop
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Super
Merci beaucoup pour ta disponibilité
Dernière question:
Comment verifier si la sélection a bien été faite dans la
listbox.
J'ai testé:
If IsNull(ListBox1) Then
reponse = MsgBox("vous n'avez rien sélectionné,
voulez-vous poursuivre ?", vbYesNo)
If reponse = 6 Then
MsgBox "Ok, Alors Sélectionnez une Option en cliquant
dessus ! On Recommence"
Else
MsgBox "OK ! On arrête alors"
UserForm44.Hide
End If
Else ...
mais cela ne fonctionne qu'avec la propriété listbox sur
select single et plus sur select multi.
Petit plus, peut-on copier les onglets dans l'ordre de la
listbox ?
car le dernier copié se met avant l'autre. Normal je pense
à cause du Before dans la copie ?
Après, c'est promis, j'arrête de te solliciter!!
Merci encore pour tout.
Cordialement
Ga51
Cordialement
Ga51En remplaçant :
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
par :
With Workbooks("LeNomQueTuVeux.xls")
Application.DisplayAlerts = False
.Sheets("Feuil1").Delete
.Sheets("Feuil2").Delete
.Sheets("Feuil3").Delete
Application.DisplayAlerts = True
.Save
.Close
End With
si tes classeurs vierges ont trois feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de news:Merci beaucoup pour ta réponse rapide,
Cela fonctionne au poil avec ces quelques modifs:
Private Sub CommandButton1_Click()Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"UserForm1.Show
End Sub
Sub CommandButton1_Click()
UserForm1.Hide
Workbooks(1).ActivateWith ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(1).Activate 'active le classeur source
End IfNext i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Une dernière chose, comment peut-on supprimer les
feuilles vides qui sont par défaut dans le classeur créé
? pour finioler !! pour éviter d'envoyer un fichier avec
des onglets vides.
Merci encore pour tout
Cordialement
Ga51En plein dans le mille :
Code du bouton de la feuille "Feuil4" :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(2).Activate 'active le classeur source
UserForm1.Show
End Sub
et le code du bouton de l'userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Workbooks(2).Activate 'active le classeur
source
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Le code ne fonctionnait que parce que les deux
classeurs avaient les mêmes noms de feuilles.
Cordialement.
Daniel
"ga51" a écrit dans le message de
news:J'avais déjà supprimé la ligne MsgBox .list(i).
De quel nom affiché parles-tu ? de celui de l'onglet
sélectionné ? si oui, c'est effectivement le nom de
l'onglet qui fait parti de mon classeur d'origine.
Ne serait-ce pas un problème de classeur actif ?
Lors de la copie, quel classeur doit être actif, le
classeur d'origine ou le classeur de sauvegarde ?
L'instruction Workbooks(1).Activate correspond à quel
classeur ?
Merci encore de t'occuper de "mon cas"
Cordialement.
Ga51Si tu n'as pas ôté la ligne "msgbox .list(i)", le nom
affiché appartient-il à ton classeur origine ?
Cordialement.
Daniel
"ga51" a écrit dans le message de
news: %Merci beaucoup pour ta réponse
C'est exactement ce que je voulais
Cela fonctionne impec avec un classeur test.
Mais j'ai une erreur: "L'indice n'appartient pas à
la sélection" lors de la copie du 2ième onglet
sélectionné sur mon classeur. Le 1er onglet
sélectionné se copie parfaitement.
Une exécution pas à pas m'arrête sur la ligne lors
de la 2ième tentative de copie:
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
Mes onglets ne sont pas protégés, ils ont simplement
des boutons de contrôles et des mise en formes.
Pourquoi ce bug ?
Cordialement
Ga51Bonjour.
Code du bouton de Feuil3 :
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="LeNomQueTuVeux.xls"
Workbooks(1).Activate
UserForm1.Show
End Sub
Code du bouton du userform :
Private Sub CommandButton1_Click()
UserForm1.Hide
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
MsgBox .List(i)
Sheets(.List(i)).Copy
Before:=Workbooks("LeNomQueTuVeux.xls").Sheets(1)
End If
Next i
End With
Workbooks("LeNomQueTuVeux.xls").Save
Workbooks("LeNomQueTuVeux.xls").Close
End Sub
Cordialement.
Daniel
"ga51" a écrit dans le message de
news: O9$Merci pour ton exemple, il fonctionne super bien
en effet.
Pour aller plus loin, en fait je voulais
sauvegarder les onglets sélectionnés dans un
nouveau classeur et le renommer avec:
ActiveWorkbook.SaveAs Filename:= ...etc.. (pour
envoi futur par mail) plutôt que d'envoyer ces
onglets dans un classeur déjà existant.
Car dans ma configuration de travail, cela sera
impossible.
Pourrais-tu m'aider pour la syntaxe ?
Merci beaucoup de ton aide
Cordialement.
Ga51J'ai créé un nouveau classeur minimal avec une
userform et une listbox. Ca fonctionne sans
problème. Je te l'envoie.
http://cjoint.com/?fqwWPpRgFp
Cordialement.
Daniel
"ga51" a écrit dans le message
de news:Merci d'avoir insister !
En effet cela fonctionne (je n'avais pas le
classeur cible ouvert!)...
Mais si je le transpose dans ma macro, cela ne
fonctionne pas.
Sans doute ce sont les propriétés de ma listbox,
créée dans un userform, qui ne correspondent pas ?
j'ai mis les propriétés à MultiSelect, je
remplis la listbox avec Additem pour l'alimenter
du noms des onglets.
Qq'un pour m'aider svp
Merci beaucoup
Cordialement.
Ga51Bonjour,
pas de pb pour moi non plus avec le fichier de
Daniel alors que j'ai la même config que toi.
Il doit y avoir autre chose.
Fais une éxécution en mode pas à pas du fichier
qui t'a été transmis et regarde ce que ca donne.
A+J'ai Excel 2000 sur win xp pro
Merci en tout cas pour tes réponses.
Cordialement
Ga51Problème de version ?
La listbox est configurée de telle manière
qu'il faut maintenir la touche CTRL enfoncée
pour faire une seconde sélection.
Sinon il va falloir que les VRAIS gourous se
penchent sur ton problème.
Cordialement.
Daniel
"ga51" a écrit dans le
message de news:Merci Daniel pour le classeur de test.
Mais j'ai toujours la même erreur sur ton
classeur.(l'objet n'appartient pas a la
selection)
De plus dans la msgbox, il n'y a qu'1 seule
feuille et non toutes les feuilles
sélectionnées.
Manquerait-il qqchose ?
Cordialement
Ga51Je t'envoie le classeur qui m'a servi à
faire le test.
http://cjoint.com/?fqqZYIv66K
Cordialement.
Daniel
"ga51" a écrit dans le
message de news:
%Bonjour,
Merci pour ta réponse,
Oui tous les onglets sont dans le classeur
ouvert et donc actif.
Cordialement
GaBonjour.
J'ai pas trop étudié ton code; est-ce que
la feuille copiée fait partie du classeur
actif ?
Cordialement.
Daniel
"ga51" a écrit dans le
message de news:
%Merci Daniel pour ta réponse,
mais j'ai une erreur sur la ligne
sheets(.List(i)).copy: n'appartient pas
à la sélection.
Merci encore pour ton aide,
Cordialement.