Enregistrer 2 feuilles dans un classeur
Bonjour à tous,
J'ai besoin de votre aide car j'ai beau regardé sur le net, je ne trouve rien pour résoudre mon problème
J'ai un tableau avec les données je veux remplir 2 feuilles qui sont dans le même classeur.
A chaque ligne de mon tableau, je souhaiterais qu'il remplisse les 2 feuilles puis enregistrer ce 2 feuilles remplies dans un même dossier. Et ainsi de suite pour chaque ligne.
Ci-dessous mon code.
Pouvez-vous me dire ce qui cloche ???
Merci d'avance
Sub efface()
Feuil13.Range("F1") = ""
Feuil13.Range("E2:E3") = ""
End Sub
Sub efface1()
Feuil2.Range("e2") = ""
Feuil2.Range("e3") = ""
Feuil2.Range("e4") = ""
Feuil2.Range("d6") = ""
Feuil2.Range("h6") = ""
Feuil2.Range("d8") = ""
Feuil2.Range("h8") = ""
Feuil2.Range("d9") = ""
Feuil2.Range("f11") = ""
Feuil2.Range("f12") = ""
Feuil2.Range("f13") = ""
Feuil2.Range("f14") = ""
Feuil2.Range("f15") = ""
End Sub
Sub publi()
Dim i%, j%, nblig%, debut%
Dim num$, chemin$, Fichier$, Client$
With Feuil19
Application.ScreenUpdating = False
.Range("b:b").Copy .Range("bb1")
'suppression des doublons
debut = 2
nblig = Range("bb" & Rows.Count).End(xlUp).Row
For i = debut To nblig
If Cells(i, 15) = "" Then
num = .Range("b" & i)
Feuil13.Range("f1") = .Range("b" & i)
Feuil13.Range("e2") = .Range("c" & i)
Feuil13.Range("e3") = .Range("d" & i)
'enregistrement
With Feuil19
Application.ScreenUpdating = False
.Range("b:b").Copy .Range("bb1")
'suppression des doublons
debut = 2
nblig = Range("bb" & Rows.Count).End(xlUp).Row
For j = debut To nblig
If Cells(j, 15) = "" Then
num = .Range("b" & j)
Feuil2.Range("e2") = .Range("b" & j)
Feuil2.Range("e3") = .Range("c" & j)
Feuil2.Range("e4") = .Range("d" & j)
Feuil2.Range("d6") = .Range("m" & j)
Feuil2.Range("h6") = .Range("n" & j)
Feuil2.Range("d8") = .Range("f" & j)
Feuil2.Range("h8") = .Range("g" & j)
Feuil2.Range("d9") = .Range("e" & j)
Feuil2.Range("f11") = .Range("p" & j)
Feuil2.Range("f12") = .Range("q" & j)
Feuil2.Range("f13") = .Range("r" & j)
Feuil2.Range("f14") = .Range("s" & j)
Feuil2.Range("f15") = .Range("t" & j)
'enregistrement
Feuil13.Copy
Feuil2.Copy
chemin = ThisWorkbook.Path & "\"
Client = num
Fichier = Client & ".xlsx"
If Dir(chemin & Client, 16) = "" Then MkDir chemin & Client
ActiveWorkbook.SaveAs chemin & Client & "\" & Fichier
Application.DisplayAlerts = False
ActiveWorkbook.Close False
Application.DisplayAlerts = True
debut = nblig + 1
efface
'suppression de la colonne temporaire
.Range("bb:bb").Delete
End If
Next
Call TACHE
Cells(i, 15) = "OK"
MsgBox "Tous les dossiers et les tâches sont faits !."
End With
End If
Next
End With
End Sub
' ------------ Déclaration des variables --------------
Sub TACHE()
Dim myOlApp As Object 'Outlook.Application
Dim MyItem As Object 'Outlook.TaskItem
Dim olTaskItem As Object
Dim olTaskInProgress, olImportanceHigh As Object
Dim i As Integer
Set myOlApp = CreateObject("Outlook.Application")
' Choix de la zone de sélection
' i=1 --> numéro de la ligne et ",1" --> numéro de la colonne
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row ' la ligne 1 étant l'entête
If Cells(i, 15) = "" Then
Set MyItem = myOlApp.CreateItem(3)
' Fomalisation de la tâche avec tous les paramétres
With MyItem
.Status = olTaskInProgress
.Importance = 2
.DueDate = Cells(i, 16).Value - 5 'Date relance
.StartDate = Cells(i, 16).Value - 10 'Date de début
.Body = TRAVAUX : " & Cells(i, 4).Value
.Subject = "Travaux " & Cells(i, 2).Value 'Sujet de la tâche
.ReminderSet = True
.Save
'.Send
End With
End If
Next i
End Sub
Bonsoir,
A toutes fins utiles :
les balises Code sont destinées à rendre le code plus facilement lisible sur le forum.
Pour qu'un code puisse être lu rapidement et sans erreur de lecture, il est bon qu'il soit indenté !
Et si les erreurs criantes (genre : .Range("bb")) étaient éliminées par une relecture un minimum attentive, ce serait déjà un tout petit mieux !
Cordialement.
Bonjour à tous,
J'ai modifié un peu le code mais rien à faire, il me met un message d'erreur du fait qu'il indique qu'un fichier est déjà créé !
La création de dossier et de la feuill13 fonctionne bien mais la feuil2 ne veut pas s'enregistrer dans ce même fichier dans un autre onglet.
Il bloque à : ActiveWorkbook.SaveAs chemin & Client & "\" & Fichier
Comment faire ?
Merci par avance de votre aide
Sub publi()
Dim i%, j%, nblig%, debut%
Dim num$, chemin$, Fichier$, Client$
With Feuil19
Application.ScreenUpdating = False
.Range("b:b").Copy .Range("bb1")
'suppression des doublons
debut = 2
nblig = Range("bb" & Rows.Count).End(xlUp).Row
For i = debut To nblig
If Cells(i, 15) = "" Then
num = .Range("b" & i)
Feuil13.Range("f1") = .Range("b" & i)
Feuil13.Range("e2") = .Range("c" & i)
Feuil13.Range("e3") = .Range("d" & i)
'enregistrement
chemin = ThisWorkbook.Path & "\"
Feuil13.Copy
Client = num
Fichier = Client & ".xlsx"
If Dir(chemin & Client, 16) = "" Then MkDir chemin & Client
ActiveWorkbook.SaveAs chemin & Client & "\" & Fichier
Application.DisplayAlerts = False
ActiveWorkbook.Close False
Application.DisplayAlerts = True
'suppression de la colonne temporaire
With Feuil19
Application.ScreenUpdating = False
.Range("b:b").Copy .Range("bb1")
'suppression des doublons
debut = 2
nblig = Range("bb" & Rows.Count).End(xlUp).Row
For j = debut To nblig
If Cells(j, 15) = "" Then
num = .Range("b" & j)
Feuil2.Range("e2") = .Range("b" & j)
Feuil2.Range("e3") = .Range("c" & j)
Feuil2.Range("e4") = .Range("d" & j)
Feuil2.Range("d6") = .Range("m" & j)
Feuil2.Range("h6") = .Range("n" & j)
Feuil2.Range("d8") = .Range("f" & j)
Feuil2.Range("h8") = .Range("g" & j)
Feuil2.Range("d9") = .Range("e" & j)
Feuil2.Range("f11") = .Range("p" & j)
Feuil2.Range("f12") = .Range("q" & j)
Feuil2.Range("f13") = .Range("r" & j)
Feuil2.Range("f14") = .Range("s" & j)
Feuil2.Range("f15") = .Range("t" & j)
'enregistrement
chemin = ThisWorkbook.Path & "\" & Client & "\" & Fichier
Feuil2.Copy After:=Feuil1
ThisWorkbook.SaveAs
debut = nblig + 1
efface
'suppression de la colonne temporaire
.Range("bb:bb").Delete
End If
Next
Call TACHE
End With
End If
Next
End With
Cells(i, 15) = "OK"
MsgBox "Tous les dossiers et les tâches sont faits !"
End Sub
Bonjour,
Juste pour voir (je n'ai pas lu ta macro !) : la voici reproduite, réindentée dans les règles :
Sub publi()
Dim i%, j%, nblig%, debut%
Dim num$, chemin$, Fichier$, Client$
With Feuil19
Application.ScreenUpdating = False
.Range("b:b").Copy .Range("bb1")
'suppression des doublons
debut = 2
nblig = Range("bb" & Rows.Count).End(xlUp).Row
For i = debut To nblig
If Cells(i, 15) = "" Then
num = .Range("b" & i)
Feuil13.Range("f1") = .Range("b" & i)
Feuil13.Range("e2") = .Range("c" & i)
Feuil13.Range("e3") = .Range("d" & i)
'enregistrement
chemin = ThisWorkbook.Path & "\"
Feuil13.Copy
Client = num
Fichier = Client & ".xlsx"
If Dir(chemin & Client, 16) = "" Then MkDir chemin & Client
ActiveWorkbook.SaveAs chemin & Client & "\" & Fichier
Application.DisplayAlerts = False
ActiveWorkbook.Close False
Application.DisplayAlerts = True
'suppression de la colonne temporaire
With Feuil19
Application.ScreenUpdating = False
.Range("b:b").Copy .Range("bb1")
'suppression des doublons
debut = 2
nblig = Range("bb" & Rows.Count).End(xlUp).Row
For j = debut To nblig
If Cells(j, 15) = "" Then
num = .Range("b" & j)
Feuil2.Range("e2") = .Range("b" & j)
Feuil2.Range("e3") = .Range("c" & j)
Feuil2.Range("e4") = .Range("d" & j)
Feuil2.Range("d6") = .Range("m" & j)
Feuil2.Range("h6") = .Range("n" & j)
Feuil2.Range("d8") = .Range("f" & j)
Feuil2.Range("h8") = .Range("g" & j)
Feuil2.Range("d9") = .Range("e" & j)
Feuil2.Range("f11") = .Range("p" & j)
Feuil2.Range("f12") = .Range("q" & j)
Feuil2.Range("f13") = .Range("r" & j)
Feuil2.Range("f14") = .Range("s" & j)
Feuil2.Range("f15") = .Range("t" & j)
'enregistrement
chemin = ThisWorkbook.Path & "\" & Client & "\" & Fichier
Feuil2.Copy After:=Feuil1
ThisWorkbook.SaveAs
debut = nblig + 1
efface
'suppression de la colonne temporaire
.Range("bb:bb").Delete
End If
Next
Call TACHE
End With
End If
Next
End With
Cells(i, 15) = "OK"
MsgBox "Tous les dossiers et les tâches sont faits !"
End Sub
Le réalignement des blocs d'instructions fait apparaître d'emblée un End If manquant, sur lequel VBA devrait bloquer dès le départ...
On voit aussi un bloc With Feuil19 imbiqué dans un bloc With Feuil19 : pas très cohérent !
Je passe sur les fastidieuses énumérations qu'il serait bon d'éliminer (blocs With [correctement utilisés]+Variables+Tableaux/Boucles)
On aperçoit un ThisWorkbook.SaveAs (rien qui suit ?)
Pour le reste quand j'aurai lu !
Cordialement.
Bonjour,
Merci pour votre réponse !
Cela ne marche pas non plus
Je ne sais pas comment faire pour remplir des cellules des 2 feuilles via un tableau pour enregistrer ces 2 feuilles dans un même classeur et ça pour toutes les lignes si la cellule 15 est vide .
Chaque ligne de mon tableau doit avoir un dossier et chaque dossier doit avoir un fichier avec les 2 feuilles remplies. Je précise que mon tableau comporte au moins 500 lignes (soit 500 dossiers dans mon répertoire).
Le code me crée bien le dossier et le fichier mais ne m'enregistre que la première feuille remplie. Il coince pour la deuxième.
Auriez-vous une idée ou des exemples ?
Merci d'avance
Bonsoir,
J'avais pris un petit peu de temps pour regarder le déroulement... mais l'absence de fichier rendait trop incertaine la signification de certains éléments, et j'ai abandonné...
Avec un fichier on voit un peu mieux ce que tu veux faire... Ta copie de Feuil2 ne fait pas référence au classeur créé par la copie de l'autre feuille, elle n'a aucune chance d'arriver dans le classeur.
Mais il y a plusieurs problèmes et il faut reprendre la structure à la source : les opérations uniques genre création du répertoire sont à faire en dehors de la boucle (une seule fois).
Tes qualifications d'objets sont intermittentes (des Range ou Cells sans point devant), ce qui dans le contexte où les éléments actifs vont varier du fait des copies de feuilles fait courir des risques
Si je trouve le temps de m'y repencher (pas assez pour ce soir) je reviens vers toi : c'est pas une catastrophe, il y surtout à restructurer en suivant la logique du projet, rectifier de petites anomalies, ajouter sans doute quelques variables pour gérer de façon plus sûre les éléments fluctuants, et revoir ces énumérations un peu fastidieuses... (c'est pas ça qui bloque, mais en gonflant le volume de code ça ne permet pas de voir la structure du premier coup).
Cordialement.
Bonsoir,
J'intègre bien que chaque ligne de la feuille Suivi doit donner lieu à constitution de 2 feuilles à exporter dans un même classeur nommé sous numéro client.
Je souhaiterais d'abord des noms moins rébarbatif de ces deux feuilles... L'une est également désigné sous le terme de Fiche (que je reprendrai à défaut), et l'autre ce serait quoi ?
Deux petites choses m'intriguent : la mention à deux reprises de suppression des doublons dont je ne vois pas trace (de la suppression), et cette copie sur une colonne temporaire que je ne vois pas utiliser (à moins que je n'ai pas suffisamment regardé).
Si des doublons et si doublons à supprimer, il faut m'indiquer ce qui identifie un doublon, car je ne vois pas ce qui pourrait amener cette qualification vu les données figurant dans le fichier
Un autre point est le lancement de la proc. Tache, à l'intérieur de la boucle, qui ne me semble pas du tout cohérente...
Cordialement.
Bonjour,
Pour répondre à Mferrand, il n'y a à priori jamais de doublons mais...
POur ce qui est de la tâche, c'est qu'à chaque fois que mes 2 feuilles sont enregistrées dans un fichier et dans son répertoire, cela me créé une tâche afin de suivre mes dossiers.
A force de chercher et changer de code, j'avais réussi mais lorsque j'ai copié mes autres codes, tout à planté ! je suis complètement perdue !!!
Je suis désespérée !!
Pouvez-vous m'aider ???
Merci d'avance
Tu te réveilles un peu tard !
En regardant les posts précédent, je constates que j'avais d'abord reproduit (sans rien y ajouter ni retrancher) ta procédure citée, simplement en l'indentant.
Le but de la démonstration etait de montrer que, avant même de lire le code, faisait apparaître des anomalies, que l'on pouvait alors corriger, et ensuite rendait plus rapide une lecture éclairée du code (j'entends par là une lecture dans laquelle on interprète la signification de chaque ligne de code...) Mais je n'y avais apporté évidemment aucune correction !
A la vue du fichier j'avais soulevé quelques autres incohérences et formulé quelques demandes d'éclaircissement...
Sans m'être remis en mémoire les éléments du sujet (ce qui ne sera pas ce soir !!!), je vois que tu n'éclaires pas plus qu'avant cette histoire de doublons fantômes, et tu n'indiques toujours pas ce qu'est censée faire TACHE, ni la raison de son appel dans une boucle, impliquant qu'elle sera répétée à chaque tour de boucle...
Cordialement.
Bonjour,
J'ai modifié mon code ! Il me créé ma feuille 13 remplie dans un autre classeur mais ma feuille 2 dans mon fichier de base ! Je ne comprends pas pourquoi ?
De plus j'ai un message d'erreur sur cette ligne (erreur 1004 : impossible d'utiliser cette extension)
ActiveWorkbook.SaveAs chemin & Client & ".xlsx"
J'aimerai de l'aide SVP !!!
Merci d'avance
Sub publi2()
Dim j%, nblig%, debut%
Dim num$, chemin$, Fichier$, Client$
With Feuil19
Application.ScreenUpdating = False
.Range("b:b").Copy .Range("bb1")
'suppression des doublons
debut = 2
nblig = Range("bb" & Rows.Count).End(xlUp).Row
For j = debut To nblig
If Cells(j, 15) = "" Then
num = .Range("b" & j)
Feuil13.Range("f1") = .Range("b" & j)
Feuil13.Range("e2") = .Range("c" & j)
Feuil13.Range("e3") = .Range("d" & j)
Feuil2.Range("e2") = .Range("b" & j)
Feuil2.Range("e3") = .Range("c" & j)
Feuil2.Range("e4") = .Range("d" & j)
Feuil2.Range("d6") = .Range("m" & j)
Feuil2.Range("h6") = .Range("n" & j)
Feuil2.Range("d8") = .Range("f" & j)
Feuil2.Range("h8") = .Range("g" & j)
Feuil2.Range("d9") = .Range("e" & j)
Feuil2.Range("f11") = .Range("p" & j)
Feuil2.Range("f12") = .Range("q" & j)
Feuil2.Range("f13") = .Range("r" & j)
Feuil2.Range("f14") = .Range("s" & j)
Feuil2.Range("f15") = .Range("t" & j)
'enregistrement
Feuil13.Copy
Feuil2.Copy After:=Feuil1
chemin = ActiveWorkbook.Path & "\"
Client = num
'Fichier = Client & ".xlsx"
If Dir(chemin & Client, 16) = "" Then MkDir chemin & Client
'ActiveWorkbook.SaveAs chemin & Client & "\" & Fichier
ActiveWorkbook.SaveAs chemin & Client & ".xlsx"
Application.DisplayAlerts = False
ActiveWorkbook.Close False
Application.DisplayAlerts = True
debut = nblig + 1
efface
efface1
'suppression de la colonne temporaire
.Range("bb:bb").Delete
Call TACHE
Cells(j, 15) = "OK"
MsgBox "Tous les dossiers et les tâches sont faits !"
End If
Next
End With
End Sub