OVH Cloud OVH Cloud

re:copie onglets

36 réponses
Avatar
ga51
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.

6 réponses

1 2 3 4
Avatar
ga51
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" 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

Ga51



Bonsoir.
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

Ga51



Pour 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

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" 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

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" 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).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" 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.

Ga51








Si 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

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" 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.

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" 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.

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" 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

Ga51











Je 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

Ga












Bonjour.
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.





























































Avatar
Daniel
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

Ga51


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

Ga51



Bonsoir.
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

Ga51



Pour 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

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" 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

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" 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).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" 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.

Ga51








Si 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

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" 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.

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" 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.

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" 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

Ga51











Je 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

Ga












Bonjour.
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.






























































Avatar
ga51
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" 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

Ga51



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

Ga51




Bonsoir.
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

Ga51




Pour 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

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" 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

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" 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).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" 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.

Ga51









Si 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

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" 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.

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" 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.

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" 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

Ga51












Je 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

Ga













Bonjour.
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.
































































Avatar
Daniel
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

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" 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

Ga51



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

Ga51




Bonsoir.
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

Ga51




Pour 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

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" 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

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" 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).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" 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.

Ga51









Si 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

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" 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.

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" 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.

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" 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

Ga51












Je 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

Ga













Bonjour.
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.


































































Avatar
ga51
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

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" 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

Ga51




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

Ga51





Bonsoir.
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

Ga51





Pour 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

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" 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

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" 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).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" 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.

Ga51










Si 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

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" 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.

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" 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.

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" 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

Ga51













Je 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

Ga














Bonjour.
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.





































































Avatar
FxM
Voir plus bas ...



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

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" 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

Ga51




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

Ga51





Bonsoir.
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

Ga51





Pour 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

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" 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

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" 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).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" 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.

Ga51










Si 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

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" 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.

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" 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.

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" 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

Ga51













Je 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

Ga














Bonjour.
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.











































Un peu d'épurage des messages, peut-être ????

@+
FxM
































1 2 3 4