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

Problème code VBA

Boostez vos compétences Excel avec notre communauté !

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

kiff77

XLDnaute Junior
Bonjour,

J'ai un problème avec le code suivant (créer avec l'enregistreur de macro). Le problème se traouve au niveau de "Windows("Classeur97").Activate", je ne sais pas comment indiquer à excel qu'il doit travailler sur le nouveau classeur qu'il vient de créer.

Merci pour votre aide
Bonnes fêtes
Kiff

Private Sub CommandButton2_Click()

Sheets("liste nominative sorties").Range("a5:i107").Copy

Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Windows("bdd4V2.xls").Activate
Sheets("Tableau croisé Sorties").Select
ActiveSheet.PivotTables("sortie").PivotSelect "", xlDataAndLabel, True
Selection.Copy
Windows("Classeur97").Activate
Sheets("Feuil2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Columns("A:A").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Columns("E:E").ColumnWidth = 16.57
Columns("C:C").ColumnWidth = 12
Columns("B:B").ColumnWidth = 15.43
Range("A1").Select
Sheets("Feuil1").Select
Sheets("Feuil1").Name = "Liste nominative effectifs"
Sheets("Feuil2").Select
Sheets("Feuil2").Name = "Tableau croisé sorties"


End Sub
 
Re : Problème code VBA

Bonjour Kiff

essaye en utilisant le code ci dessous pour créer un nouveau classeur. Utilisation d'une variable (wb) qui te permet de te référer au nouveau classeur sans passer par son nom.

Code:
Dim wb As Workbook
Set wb = Workbooks.Add
'pour activer le nouveau classeur
wb.Activate
' pour affecter une valeur à une cellule de la 1ere feuille du nouveau classeur
wb.Sheets(1).Range("A1").Value = 1

bon après midi
@+
 
Re : Problème code VBA

Salut kiff77, Salut Pierrot,

Comme je regardais egalement ce fil, je me permet de poster egalement une reponse, certe moins pratique que celle de Pierrot, mais juste pour montrer le Application.Goto qui evite souvent 2 ou 2 lignes de code...

Code:
Private Sub CommandButton2_Click()
Dim new_fichier As String
Sheets("liste nominative sorties").Range("a5:i107").Copy
Workbooks.Add
new_fichier = ThisWorkbook.Name
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.Goto Workbooks("bdd4V2.xls").Sheets("Tableau croisé Sorties").Range("A1")
ActiveSheet.PivotTables("sortie").PivotSelect "", xlDataAndLabel, True
Selection.Copy
Application.Goto Workbooks(new_fichier).Sheets("Feuil2").Range("A1")
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Columns("A:A").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Columns("E:E").ColumnWidth = 16.57
Columns("C:C").ColumnWidth = 12
Columns("B:B").ColumnWidth = 15.43
Sheets("Feuil1").Name = "Liste nominative effectifs"
Sheets("Feuil2").Name = "Tableau croisé sorties"
End Sub


@+
 
Re : Problème code VBA

Bonjour Kiff, Pierrot, le forum,

J'étais parti sur une solution récupérant le nom du nouveau classeur.

Code:
Workbooks.Add
 NouveauClasseur = ActiveWorkbook.Name
...
NouveauClasseur.select

a+
VIC
 
Dernière modification par un modérateur:
Re : Problème code VBA

J'en profite pour une petite question complémentaire.
quelles différences entre "workbooks(...).select" et workbooks(...).activate ?
Merci
Vic

Edit : Pour Kiff, l'enregistreur utilise "Windows(...).Activate"
Il est selon moi plus efficace d'utiliser "workbooks(...)"
 
Dernière modification par un modérateur:
Re : Problème code VBA

re,

Un élément de réponse :
Le Select permet de sélectionner une ou un plusieurs cellules dans la feuille active... ( Il faut d'abords activer la feuille sur laquelle on veut sélectionner une cellule, d'ou mon utilisation du Application.Goto)
Le Activate permet d'activer une cellule ou une feuille, mais pas une plage de cellule. A noter que Activate peu s'appliquer à d'autre feuille que la feuille en cours ... :

On a par exemple
Code:
Sheets("Feuil1").Range("A1").Activate 
[COLOR=seagreen]'qui est équivalent à[/COLOR] 
Sheets("Feuil1").Activate
Range("A1").Activate

@+
 
Re : Problème code VBA

re,

Merci pour vos réponses

Pierrot & VIC ==> je ne comprends pas vos code, je ne sais pas où l'insérer (je suis débutant 😕)

Porcinet ==> ton code marche bien pour copier la première feuille, mais dès qu'il passe sur "Application.Goto Workbooks(new_fichier).Sheets("Feuil2").Range("A1")" il me met une erreur (l'indice n'appartient pas à la sélection)


encore merci
kiff


Pour VIC, quel est la différence entre "windows" et "Workbooks"? (question nul lol)
 
Dernière édition:
Re : Problème code VBA

S'agissant du code de Porcinet, je le laisserai répondre, mais il semble que la feuil2 du nouveau classeur n'existe pas.
Tu as peut etre par defaut des classeurs avec une seule feuille. (C'est mon cas)
Change l'option (outils>option>general> nombre d'onglet...) ou crée une deuxieme feuille par macro. ( Sheets.Add )

De plus sauf erreur de ma part, en début de code tu as : new_fichier = ThisWorkbook.Name
ThisWorkbook est le classeur qui contient la macro qui s'execute. Ce n'est pas le nouveau classeur.
Je mettrais pour ma part ActiveWorkbook.name qui correspond au classeur que tu viens de créer.

Si Porcinet ou un autre "pro" pouvais confirmer !
(Ben voila, ça va venir !)

Vic
 
Re : Problème code VBA

re,

Bin j'ai recopié ton code tel quel. Quand j'execute la macro pas à pas il me surligne la ligne "Application.Goto Workbooks(new_fichier).Sheets("Feuil2").Range("A1")" en jaune et me sort le message d'erreur "Erreur d'exectuion 9 - l'indice n'appartient pas à la sélection".


A+
 
Re : Problème code VBA

re,

ça marche en mettant mettant les modif de VIC.
Merci à tous 😉

Si je peux abuser de votre temps j'ai une dernière question:

En faite je n'ai pas uniquement deux feuilles à copier comment je pourrai faire pour que le nouveau classeur se cré avec 10 feuilles?

Merci
A+
Kiff
 
Re : Problème code VBA

re,

Merci a vous deux d'avoir corrigé ma boulette du ThisWorkbook, je fais plus de vba word que de vba excel en ce moment et je crois que ca commence a se faire ressentir dans mes codes...
Sinon pour ta question kiff, VIC t'as filé la réponse dans son post de 15h40

@+
 
Re : Problème code VBA

Pour tes 10 pages
tu peut faire une petite boucle après la création du nouveau classeur
Code:
 Workbooks.Add
For i = 1 To 10
Sheets.Add
Next i

Pour la différence entre windows et workbooks, j'ai regarder l'aide (et oui j'en suis là aussi !)
et j'ai pas trouver de réponses claires à part que "ce n'est pas pareil" !!)
Par exemple si tu ouvres plusieurs fois le même classeur (en lecture seule par exemple) t'as plusieurs "windows" du même classeur.
Si tu as l'editeur vba d'ouvert c'est une fenetre, pas un classeur, et je suppose que les Graphiques non inclus dans un onglet doivent être des fenetres gerer par "windows" et pas par workbooks.
La seule définition que j'utilise c'est : Quand ça marche je garde. quand ça plante je change !!!

a+

Vic
 
Re : Problème code VBA

Re

Pour info, l'objet "window" représente une fenêtre de l'application, "Workbook" est un objet représentant un classeur Excel, ces 2 objets possèdent des propriétés distinctes. Il vaut mieux utiliser l'objet "Workbook". Les feuilles graphiques sont des "sheets" avec un type particulier (chart). Les feuilles de calcul des "Worksheet".

j'espère être claire... pas sur... sinon F1 sur le mot en question lorsque vous êtes dans l'éditeur vba, pour une aide plus complète.

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

Discussions similaires

Réponses
10
Affichages
789
Réponses
18
Affichages
595
Réponses
2
Affichages
397
Réponses
17
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…