Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

création automatique d'un nouveau classeur à partir d"un fichier e

8 réponses
Avatar
Nicoh
Bonsoir à tous,

J'utilise un classeur Excel qui me sert de base de données. Cette base
contient des infos telles que date, client, département, adresse 1, adresse
2, CA,... sur un nombre de lignes croissant.
Est-il possible dès qu'une case est cochée ou qu'elle contient par exemple
OK de générer un nouveau classeur qui sera une facture par exemple. Celle-ci
reprendra une partie des infos utiles dans la ligne concernée.
Cerise sur le gateau, si cela est réalisable, le classeur créé peut-il être
nommé du nom du client de la ligne concerné.

Merci pour votre aide.

Nicoh

8 réponses

Avatar
FxM
Bonsoir,

C'est une question pour toi, Jean-Paul (private joke)

M'est avis qu'un coup d'enregistreur de macros donnerait une bonne base
à généraliser ensuite.
- Sélectionner une cellule de la ligne considérée,
- appuyer sur le bouton qui va bien, et qui ...
- ouvre le modèle de facture (workbooks.open ...)
- remplit les cases adéquates
- saveas ...

Tu nous reviens avec un début comme çà ?
Indique un lien du fichier avec cjoint.com

@+
FxM




Bonsoir à tous,

J'utilise un classeur Excel qui me sert de base de données. Cette base
contient des infos telles que date, client, département, adresse 1, adresse
2, CA,... sur un nombre de lignes croissant.
Est-il possible dès qu'une case est cochée ou qu'elle contient par exemple
OK de générer un nouveau classeur qui sera une facture par exemple. Celle-ci
reprendra une partie des infos utiles dans la ligne concernée.
Cerise sur le gateau, si cela est réalisable, le classeur créé peut-il être
nommé du nom du client de la ligne concerné.

Merci pour votre aide.

Nicoh


Avatar
Nicoh
Désolé mais je ne comprend pas vraiment la réponse. Il faut dire que je ne
sais pas comment utiliser une macro aussi simple soit-elle!
Mon fichier ne contient aucun bouton qui ouvre une facture c'est justement
ce que je souhaite mettre en place.

Nicoh


Bonsoir,

C'est une question pour toi, Jean-Paul (private joke)

M'est avis qu'un coup d'enregistreur de macros donnerait une bonne base
à généraliser ensuite.
- Sélectionner une cellule de la ligne considérée,
- appuyer sur le bouton qui va bien, et qui ...
- ouvre le modèle de facture (workbooks.open ...)
- remplit les cases adéquates
- saveas ...

Tu nous reviens avec un début comme çà ?
Indique un lien du fichier avec cjoint.com

@+
FxM




Bonsoir à tous,

J'utilise un classeur Excel qui me sert de base de données. Cette base
contient des infos telles que date, client, département, adresse 1, adresse
2, CA,... sur un nombre de lignes croissant.
Est-il possible dès qu'une case est cochée ou qu'elle contient par exemple
OK de générer un nouveau classeur qui sera une facture par exemple. Celle-ci
reprendra une partie des infos utiles dans la ligne concernée.
Cerise sur le gateau, si cela est réalisable, le classeur créé peut-il être
nommé du nom du client de la ligne concerné.

Merci pour votre aide.

Nicoh





Avatar
FxM
Et bien , c'est le moment d'apprendre :o)

Tu as besoin de ton fichier avec les données et d'un autre classeur dont
une feuille est la facture.
On démarre avec le classeur données ouvert et le classeur facture fermé.

Menu outils - macro - nouvelle macro (nomme la macro puis valide).
Normalement une nouvelle barre d'outils vient d'apparaître
("Enregistrement"). Car tout ce que tu vas faire va être enregistré.

* classeur données
Menu fichier -> ouvrir -> va chercher ton fichier facture et ouvre-le

* classeur facture
Copie une ou deux valeurs dans le classeur facture
Menu fichier -> enregistrer sous ... (nomme la facture puis 'enregistrer')
Menu fichier -> fermer

* classeur données
Clique sur le bouton d'arrêt de la barre d'outils "Enregistrement".

Alt-F11 pour ouvrir l'éditeur VBE qui va te révéler le code de ce qui a
été enregistré.

Une fois que tu en seras là, il faudra épurer le code, le généraliser
puis placer le bouton sur la feuille et y associer la macro. Mais c'est
pour un peu plus tard.

Au besoin, tu peux mettre tes questions / fichiers en bal perso :
7m8a9aafg9zpqq1 @ jetable.net (enlever les espaces)

@+
FxM







Désolé mais je ne comprend pas vraiment la réponse. Il faut dire que je ne
sais pas comment utiliser une macro aussi simple soit-elle!
Mon fichier ne contient aucun bouton qui ouvre une facture c'est justement
ce que je souhaite mettre en place.

Nicoh


Bonsoir,

C'est une question pour toi, Jean-Paul (private joke)

M'est avis qu'un coup d'enregistreur de macros donnerait une bonne base
à généraliser ensuite.
- Sélectionner une cellule de la ligne considérée,
- appuyer sur le bouton qui va bien, et qui ...
- ouvre le modèle de facture (workbooks.open ...)
- remplit les cases adéquates
- saveas ...

Tu nous reviens avec un début comme çà ?
Indique un lien du fichier avec cjoint.com

@+
FxM




Bonsoir à tous,

J'utilise un classeur Excel qui me sert de base de données. Cette base
contient des infos telles que date, client, département, adresse 1, adresse
2, CA,... sur un nombre de lignes croissant.
Est-il possible dès qu'une case est cochée ou qu'elle contient par exemple
OK de générer un nouveau classeur qui sera une facture par exemple. Celle-ci
reprendra une partie des infos utiles dans la ligne concernée.
Cerise sur le gateau, si cela est réalisable, le classeur créé peut-il être
nommé du nom du client de la ligne concerné.

Merci pour votre aide.

Nicoh






Avatar
Nicoh
Bonjour FxM,

Je te remercie beaucoup pour ton aide. J'ai suivi les différentes étapes que
tu m'as demandé de faire et j'arrive à la fin à obtenir un code VBE.

Peux-tu continuer à m'aider ?

Tu me dis qu'il faut maintenant épurer le code, le généraliser, ...
Evidemment je ne sais pas du tout comment il faut faire sans ton aide.

@+
Nicoh


Et bien , c'est le moment d'apprendre :o)

Tu as besoin de ton fichier avec les données et d'un autre classeur dont
une feuille est la facture.
On démarre avec le classeur données ouvert et le classeur facture fermé.

Menu outils - macro - nouvelle macro (nomme la macro puis valide).
Normalement une nouvelle barre d'outils vient d'apparaître
("Enregistrement"). Car tout ce que tu vas faire va être enregistré.

* classeur données
Menu fichier -> ouvrir -> va chercher ton fichier facture et ouvre-le

* classeur facture
Copie une ou deux valeurs dans le classeur facture
Menu fichier -> enregistrer sous ... (nomme la facture puis 'enregistrer')
Menu fichier -> fermer

* classeur données
Clique sur le bouton d'arrêt de la barre d'outils "Enregistrement".

Alt-F11 pour ouvrir l'éditeur VBE qui va te révéler le code de ce qui a
été enregistré.

Une fois que tu en seras là, il faudra épurer le code, le généraliser
puis placer le bouton sur la feuille et y associer la macro. Mais c'est
pour un peu plus tard.

Au besoin, tu peux mettre tes questions / fichiers en bal perso :
7m8a9aafg9zpqq1 @ jetable.net (enlever les espaces)

@+
FxM







Désolé mais je ne comprend pas vraiment la réponse. Il faut dire que je ne
sais pas comment utiliser une macro aussi simple soit-elle!
Mon fichier ne contient aucun bouton qui ouvre une facture c'est justement
ce que je souhaite mettre en place.

Nicoh


Bonsoir,

C'est une question pour toi, Jean-Paul (private joke)

M'est avis qu'un coup d'enregistreur de macros donnerait une bonne base
à généraliser ensuite.
- Sélectionner une cellule de la ligne considérée,
- appuyer sur le bouton qui va bien, et qui ...
- ouvre le modèle de facture (workbooks.open ...)
- remplit les cases adéquates
- saveas ...

Tu nous reviens avec un début comme çà ?
Indique un lien du fichier avec cjoint.com

@+
FxM




Bonsoir à tous,

J'utilise un classeur Excel qui me sert de base de données. Cette base
contient des infos telles que date, client, département, adresse 1, adresse
2, CA,... sur un nombre de lignes croissant.
Est-il possible dès qu'une case est cochée ou qu'elle contient par exemple
OK de générer un nouveau classeur qui sera une facture par exemple. Celle-ci
reprendra une partie des infos utiles dans la ligne concernée.
Cerise sur le gateau, si cela est réalisable, le classeur créé peut-il être
nommé du nom du client de la ligne concerné.

Merci pour votre aide.

Nicoh









Avatar
FxM
Bien sûr que je peux continuer à t'aider.
Comme je n'ai aucune idée du résultat obtenu pour l'instant, il va
falloir jeter un oeil à la bête. Une adresse email est en bas du message
précédent.

@+
FxM


Bonjour FxM,

Je te remercie beaucoup pour ton aide. J'ai suivi les différentes étapes que
tu m'as demandé de faire et j'arrive à la fin à obtenir un code VBE.

Peux-tu continuer à m'aider ?

Tu me dis qu'il faut maintenant épurer le code, le généraliser, ...
Evidemment je ne sais pas du tout comment il faut faire sans ton aide.

@+
Nicoh


Et bien , c'est le moment d'apprendre :o)

Tu as besoin de ton fichier avec les données et d'un autre classeur dont
une feuille est la facture.
On démarre avec le classeur données ouvert et le classeur facture fermé.

Menu outils - macro - nouvelle macro (nomme la macro puis valide).
Normalement une nouvelle barre d'outils vient d'apparaître
("Enregistrement"). Car tout ce que tu vas faire va être enregistré.

* classeur données
Menu fichier -> ouvrir -> va chercher ton fichier facture et ouvre-le

* classeur facture
Copie une ou deux valeurs dans le classeur facture
Menu fichier -> enregistrer sous ... (nomme la facture puis 'enregistrer')
Menu fichier -> fermer

* classeur données
Clique sur le bouton d'arrêt de la barre d'outils "Enregistrement".

Alt-F11 pour ouvrir l'éditeur VBE qui va te révéler le code de ce qui a
été enregistré.

Une fois que tu en seras là, il faudra épurer le code, le généraliser
puis placer le bouton sur la feuille et y associer la macro. Mais c'est
pour un peu plus tard.

Au besoin, tu peux mettre tes questions / fichiers en bal perso :
7m8a9aafg9zpqq1 @ jetable.net (enlever les espaces)

@+
FxM







Désolé mais je ne comprend pas vraiment la réponse. Il faut dire que je ne
sais pas comment utiliser une macro aussi simple soit-elle!
Mon fichier ne contient aucun bouton qui ouvre une facture c'est justement
ce que je souhaite mettre en place.

Nicoh


Bonsoir,

C'est une question pour toi, Jean-Paul (private joke)

M'est avis qu'un coup d'enregistreur de macros donnerait une bonne base
à généraliser ensuite.
- Sélectionner une cellule de la ligne considérée,
- appuyer sur le bouton qui va bien, et qui ...
- ouvre le modèle de facture (workbooks.open ...)
- remplit les cases adéquates
- saveas ...

Tu nous reviens avec un début comme çà ?
Indique un lien du fichier avec cjoint.com

@+
FxM




Bonsoir à tous,

J'utilise un classeur Excel qui me sert de base de données. Cette base
contient des infos telles que date, client, département, adresse 1, adresse
2, CA,... sur un nombre de lignes croissant.
Est-il possible dès qu'une case est cochée ou qu'elle contient par exemple
OK de générer un nouveau classeur qui sera une facture par exemple. Celle-ci
reprendra une partie des infos utiles dans la ligne concernée.
Cerise sur le gateau, si cela est réalisable, le classeur créé peut-il être
nommé du nom du client de la ligne concerné.

Merci pour votre aide.

Nicoh










Avatar
Nicoh
as-tu bien reçu mon mail ?


Bien sûr que je peux continuer à t'aider.
Comme je n'ai aucune idée du résultat obtenu pour l'instant, il va
falloir jeter un oeil à la bête. Une adresse email est en bas du message
précédent.

@+
FxM


Bonjour FxM,

Je te remercie beaucoup pour ton aide. J'ai suivi les différentes étapes que
tu m'as demandé de faire et j'arrive à la fin à obtenir un code VBE.

Peux-tu continuer à m'aider ?

Tu me dis qu'il faut maintenant épurer le code, le généraliser, ...
Evidemment je ne sais pas du tout comment il faut faire sans ton aide.

@+
Nicoh


Et bien , c'est le moment d'apprendre :o)

Tu as besoin de ton fichier avec les données et d'un autre classeur dont
une feuille est la facture.
On démarre avec le classeur données ouvert et le classeur facture fermé.

Menu outils - macro - nouvelle macro (nomme la macro puis valide).
Normalement une nouvelle barre d'outils vient d'apparaître
("Enregistrement"). Car tout ce que tu vas faire va être enregistré.

* classeur données
Menu fichier -> ouvrir -> va chercher ton fichier facture et ouvre-le

* classeur facture
Copie une ou deux valeurs dans le classeur facture
Menu fichier -> enregistrer sous ... (nomme la facture puis 'enregistrer')
Menu fichier -> fermer

* classeur données
Clique sur le bouton d'arrêt de la barre d'outils "Enregistrement".

Alt-F11 pour ouvrir l'éditeur VBE qui va te révéler le code de ce qui a
été enregistré.

Une fois que tu en seras là, il faudra épurer le code, le généraliser
puis placer le bouton sur la feuille et y associer la macro. Mais c'est
pour un peu plus tard.

Au besoin, tu peux mettre tes questions / fichiers en bal perso :
7m8a9aafg9zpqq1 @ jetable.net (enlever les espaces)

@+
FxM







Désolé mais je ne comprend pas vraiment la réponse. Il faut dire que je ne
sais pas comment utiliser une macro aussi simple soit-elle!
Mon fichier ne contient aucun bouton qui ouvre une facture c'est justement
ce que je souhaite mettre en place.

Nicoh


Bonsoir,

C'est une question pour toi, Jean-Paul (private joke)

M'est avis qu'un coup d'enregistreur de macros donnerait une bonne base
à généraliser ensuite.
- Sélectionner une cellule de la ligne considérée,
- appuyer sur le bouton qui va bien, et qui ...
- ouvre le modèle de facture (workbooks.open ...)
- remplit les cases adéquates
- saveas ...

Tu nous reviens avec un début comme çà ?
Indique un lien du fichier avec cjoint.com

@+
FxM




Bonsoir à tous,

J'utilise un classeur Excel qui me sert de base de données. Cette base
contient des infos telles que date, client, département, adresse 1, adresse
2, CA,... sur un nombre de lignes croissant.
Est-il possible dès qu'une case est cochée ou qu'elle contient par exemple
OK de générer un nouveau classeur qui sera une facture par exemple. Celle-ci
reprendra une partie des infos utiles dans la ligne concernée.
Cerise sur le gateau, si cela est réalisable, le classeur créé peut-il être
nommé du nom du client de la ligne concerné.

Merci pour votre aide.

Nicoh













Avatar
FxM
Oui, oui, j'ai tardé un peu mais tu as une réponse en BAL.

@+
FxM


as-tu bien reçu mon mail ?


Bien sûr que je peux continuer à t'aider.
Comme je n'ai aucune idée du résultat obtenu pour l'instant, il va
falloir jeter un oeil à la bête. Une adresse email est en bas du message
précédent.

@+
FxM


Bonjour FxM,

Je te remercie beaucoup pour ton aide. J'ai suivi les différentes étapes que
tu m'as demandé de faire et j'arrive à la fin à obtenir un code VBE.

Peux-tu continuer à m'aider ?

Tu me dis qu'il faut maintenant épurer le code, le généraliser, ...
Evidemment je ne sais pas du tout comment il faut faire sans ton aide.

@+
Nicoh


Et bien , c'est le moment d'apprendre :o)

Tu as besoin de ton fichier avec les données et d'un autre classeur dont
une feuille est la facture.
On démarre avec le classeur données ouvert et le classeur facture fermé.

Menu outils - macro - nouvelle macro (nomme la macro puis valide).
Normalement une nouvelle barre d'outils vient d'apparaître
("Enregistrement"). Car tout ce que tu vas faire va être enregistré.

* classeur données
Menu fichier -> ouvrir -> va chercher ton fichier facture et ouvre-le

* classeur facture
Copie une ou deux valeurs dans le classeur facture
Menu fichier -> enregistrer sous ... (nomme la facture puis 'enregistrer')
Menu fichier -> fermer

* classeur données
Clique sur le bouton d'arrêt de la barre d'outils "Enregistrement".

Alt-F11 pour ouvrir l'éditeur VBE qui va te révéler le code de ce qui a
été enregistré.

Une fois que tu en seras là, il faudra épurer le code, le généraliser
puis placer le bouton sur la feuille et y associer la macro. Mais c'est
pour un peu plus tard.

Au besoin, tu peux mettre tes questions / fichiers en bal perso :
7m8a9aafg9zpqq1 @ jetable.net (enlever les espaces)

@+
FxM







Désolé mais je ne comprend pas vraiment la réponse. Il faut dire que je ne
sais pas comment utiliser une macro aussi simple soit-elle!
Mon fichier ne contient aucun bouton qui ouvre une facture c'est justement
ce que je souhaite mettre en place.

Nicoh


Bonsoir,

C'est une question pour toi, Jean-Paul (private joke)

M'est avis qu'un coup d'enregistreur de macros donnerait une bonne base
à généraliser ensuite.
- Sélectionner une cellule de la ligne considérée,
- appuyer sur le bouton qui va bien, et qui ...
- ouvre le modèle de facture (workbooks.open ...)
- remplit les cases adéquates
- saveas ...

Tu nous reviens avec un début comme çà ?
Indique un lien du fichier avec cjoint.com

@+
FxM




Bonsoir à tous,

J'utilise un classeur Excel qui me sert de base de données. Cette base
contient des infos telles que date, client, département, adresse 1, adresse
2, CA,... sur un nombre de lignes croissant.
Est-il possible dès qu'une case est cochée ou qu'elle contient par exemple
OK de générer un nouveau classeur qui sera une facture par exemple. Celle-ci
reprendra une partie des infos utiles dans la ligne concernée.
Cerise sur le gateau, si cela est réalisable, le classeur créé peut-il être
nommé du nom du client de la ligne concerné.

Merci pour votre aide.

Nicoh














Avatar
FxM
Bonsoir,

Pour suivi, le code s'est terminé comme suit.

@+
FxM



Private Sub CommandButton1_Click()
'bouton de création de facture
'origine = barre d'outils Contrôle
'penser à mettre la propriété TakeFocusOnClick à False
'sinon le bouton empêche de déterminer une cellule active

'true est un argument fictif passé à la macro

Application.Run "test_facture", True

End Sub



Sub test_facture(a)
'a est normalement une variable. Je l'installe ici pour cacher la macro
de la liste
'des macros et ne pas la lancer involontairement. Clic sur le bouton
déclenche la
'macro avec un argument que l'on utilise pas.
'==> le code du bouton est dans le code de la "feuil1"

Dim facture As String 'chemin de la facture
Dim ash As Worksheet 'nom de feuille actuelle
Dim ligne As Long 'numéro de ligne de la cellule sélectionnée
Dim nouveau_nom As String 'nouveau nom du fichier
Dim rep As String 'interrogation remplacer le fichier ?

'chemin de la facture
facture = "C:testFACTURE.xls"
'pourrait être variable sous la forme :
'facture = ThisWorkbook.Path & "FACTURE.xls"
'si la facture est dans le même répertoire que ce fichier

'feuille active das le classeur en cours
Set ash = ThisWorkbook.ActiveSheet

'ligne où se siture le classeur
ligne = Selection.Row

'futur nom du classeur
'B2 = nom, J2 = n° facture, sinon comment sauvegarder les
'deux factures des Jardins ? Le fichier le + récent remplacerait le + vieux
nouveau_nom = ActiveWorkbook.Path & "" & Range("B" & ligne) &
"_Fact-" & Range("J" & ligne) & ".xls"

'ouvrir la facture
Workbooks.Open Filename:úcture

'tout ce qui était de l'enregistreur
' Windows("BDD CLIENTS.xls").Activate
' Range("J2").Select
' Selection.Copy
' Windows("FACTURE.xls").Activate
' Range("A24").Select
' ActiveSheet.Paste

'et ca devient ...
'copier J2 en A24
ash.Range("J" & ligne).Copy Range("A24")

'même chose pour les autres éléments :
ash.Range("B" & ligne).Copy Range("F4")
ash.Range("E" & ligne).Copy Range("F5")
ash.Range("G" & ligne & ":H" & ligne).Copy Range("F6")
ash.Range("I" & ligne).Copy Range("E30")

'note : range("B" & ligne) équivaut à :
'cells(ligne, "B")
'cells(ligne, 2) 2 étant la 2e colonne donc B


'dir(chemin & fichier) renvoit 'fichier' si le fichier est présent
'si le fichier est absent dir(...) renvoit ''
'si le fichier existe ...
If Dir(nouveau_nom) <> "" Then
'demander s'il faut effacer le fichier précédent pour le recréer
rep = InputBox(nouveau_nom & " existe dejà." & vbCrLf & "Effacer ->
Tapez 'OK', puis cliquez sur le bouton OK" & vbCrLf & "SInon, pressez le
bouton 'Annuler'", "Remplacer le fichier ??", "??")

'oui, le remplacer
If UCase(rep) = "OK" Then

'pour le remlacer, il faut déjà détruire l'ancien
Application.DisplayAlerts = False
'Attention ! kill tue le fichier sans passer par la poubelle
Kill nouveau_nom
Application.DisplayAlerts = True

'avant de sauvegarder le nouveau
ActiveWorkbook.SaveAs Filename:=nouveau_nom, FileFormat:=xlNormal,
Password:="", WriteResPassword:="", ReadOnlyRecommended:úlse,
CreateBackup:úlse

End If

Else
'le fichier n'existe pas -> le sauvegarder
'avant de sauvegarder le nouveau
ActiveWorkbook.SaveAs Filename:=nouveau_nom, FileFormat:=xlNormal,
Password:="", WriteResPassword:="", ReadOnlyRecommended:úlse,
CreateBackup:úlse

End If

'que l'on remplace ou pas, fermeture du fichier sans sauvegarder
ActiveWorkbook.Close False

'libérer la mémoire de la variable
Set ash = Nothing

End Sub