rebonjour, eh oui je vous embête avec mes questions depuis samedi, voilà donc les 2 questions du jour (qui sont liées) :
Question 1
Je travaille sur 2 fichiers Excel en même temps (tous les 2 ouverts) pour copier des cellules de l'un dans l'autre et autres manip de ce genre.
Le problème est que je ne sais pas comment dire à la macro de passer de l'un à l'autre puisque l'instruction workbooks(2).select ne semble pas exister !
donc j'ai mis l'instruction open mais du coup ça ouvre et ferme le fichier à chaque boucle et donc c'est beaucoup trop long et compliqué.
Question 2
Ci-dessous ma macro (qui fonctionne) mais à laquelle je voudrais ajouter une instruction complémentaire.
Voilà ce qu'elle fait actuellement : pour chaque cellule de la zone du classeur 1, elle va créer un onglet dans le classeur 2 dont le nom sera égal à la valeur de la cellule.
Voilà ce que je veux ajouter : il se peut qu'à l'utilisation une des cellules de la zone du classeur 1 corresponde déjà à un onglet existant dans le classeur 2.
Je voudrais donc anticiper cet éventuel problème en faisant une boucle du type :
pour chaque cellule de la zone du classeur 1 vérifie si un onglet du classeur 2 porte déjà ce nom.
si oui : demander à l'utilisateur s'il souhaite remplacer l'onglet existant
> si l'utilisateur clique oui : alors supprimer au préalable l'onglet existant pour que le nouveau (au même nom) puisse se créer
> si l'utilisateur clique non : alors ne pas essayer d'ajouter l'onglet
si non : ajouter l'onglet normalement
Voilà mon code :
Question 3
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 Public Sub creation_onglet() Dim zone As Range Dim cell As Variant Dim numLig As Integer Dim contenu As String Dim compteur As Integer Application.ScreenUpdating = False Application.DisplayAlerts = False numLig = Worksheets(2).Range("A1").CurrentRegion.Rows.Count 'nombre de lignes du tableau Set zone = Worksheets(2).Range("I2:I" & numLig) 'la zone va de la 2eme ligne a la derniere ligne de la colonne I Worksheets.Add after:=Worksheets(2) 'ajoute un onglet a la fin Worksheets(Worksheets.Count).Name = "LISTE" Worksheets(2).Rows(1).Copy Worksheets("LISTE").Range("A1") 'copie la ligne d'en-tete dans l'onglet LISTE For Each cell In zone.Cells contenu = Worksheets(2).Range("Z" & cell.Row).Value If contenu = "Oui" Then numLig = Worksheets("LISTE").Range("A1").CurrentRegion.Rows.Count + 1 Worksheets(2).Rows(cell.Row).Copy Worksheets("LISTE").Range("A" & numLig) 'copie la ligne dans la 1ere ligne vide de l'onglet LISTE End If Next Worksheets("LISTE").Activate numLig = Worksheets("LISTE").Range("A1").CurrentRegion.Rows.Count 'nombre de lignes du tableau Set zone = Worksheets("LISTE").Range("I2:I" & numLig) 'la zone va de la 2eme ligne a la derniere ligne de la colonne I compteur = 0 For Each cell In zone.Cells Workbooks.Open Filename:="C:\Users\Emily\... \fichier2.xls" Worksheets.Add after:=Worksheets(Worksheets.Count) 'ajoute un onglet a la fin Worksheets(Worksheets.Count).Name = cell.Value 'l'onglet ajouté prend le nom de la valeur de la cellule Worksheets("MODELE").Range("A:A").Copy Worksheets(cell.Value).Range("A:A") 'copie le modele dans le nouvel onglet compteur = compteur + 1 Workbooks(2).Save Next Workbooks(1).Save MsgBox prompt:=compteur & " onglets ont ete créés" Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
J'aimerai que les onglets se créent non plus si le contenu de la cellule est "Oui" mais si le contenu est la date du jour.
Dans mon fichier les dates sont affichées sous la forme 23/02/2009
merci de votre aide et de votre indulgence (eh oui ce sont mes toutes premières macro)
Partager