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

Ci-joint mon fichier.

Merci d'avance.

5suivi-dossier.xlsm (67.83 Ko)

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 ! j'ai eu largement le temps d'oublier ce dont il était question dans ton sujet...

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 ! Les erreurs étaient donc toujours à rectifier, même les plus criantes !

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
Rechercher des sujets similaires à "enregistrer feuilles classeur"