IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

modification d'une partie de code [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Par défaut modification d'une partie de code
    bonjour a tous le forum
    je suis bloqué avec un code pour la sauvegarde de ma feuille voici le code
    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
    Private Sub nouvellefeuille_Click()
    Dim chemin As String, vname As String
    Dim plage As Range
    Dim dlig As Byte
    Dim code As Integer
    ' nouvellefacturedevis Macro
    code = WorksheetFunction.Match(ActiveSheet.Range("c6"), _
        Sheets("facturation").Range("c2:c" & Sheets("facturation").Range("c65536").End(xlUp).Row), 0) + 3
    Sheets("facturation").Copy
    ActiveSheet.Shapes("commandbutton1").Select
        Selection.Delete
    With Cells
        .Copy
        .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
    End With
    Range("A1").Select
    Application.CutCopyMode = False
    Select Case UCase(Range("D2"))
    Case Is = "FACTURE", "FACTURE SAV", "FACTURE D'ACOMPTE": chemin = "C:\facture\facture\"
    Case Else: chemin = "C:\facture\devis\"
    End Select
    vname = Range("c17") & "" & Range("I5") & ".xls"
    With ActiveWorkbook
        .SaveAs Filename:=chemin & vname
        .Close
    End With
    With Sheets("facturation")
        dlig = .Range("C19").End(xlDown)(1).Row
        If dlig > 20 Then
            Set plage = .Range("C20:B" & .Range("C20").End(xlDown)(1).Row - 1)
            plage.EntireRow.Delete
        End If
     
        .Range("C19:P20").ClearContents
        .Range("H5:H8").ClearContents
        'incrémentation
        Select Case UCase(Range("D2"))
            Case Is = "FACTURE"
            Range("B9") = Range("B9") + 1
            Case Is = "DEVIS"
            Range("B8") = Range("B8") + 1
            Case Is = "FACTURE D'ACOMPTE"
            Range("B10") = Range("B10") + 1
            Case Is = "FACTURE SAV"
            Range("B11") = Range("B11") + 1
        End Select
    End With
     
    End Sub
    ce code est parfait pour une page de facture mais des qu'il y en a 2 c'est fini il ne prends en charge que la 1ère page

    et voici ce qui me gene afin que le code prenne en charge les pages qui sont crées a la suite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Sheets("facturation")
        dlig = .Range("C19").End(xlDown)(1).Row
        If dlig > 20 Then
            Set plage = .Range("C20:B" & .Range("C20").End(xlDown)(1).Row - 1)
            plage.EntireRow.Delete
        End If
    dont je peux avoir de 4 à8 pages a la suite, mais le format des autres pages reste identiques a la première a l'exeption de l'entête

    merci pour vos idées

    cordialement

    Pascal

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    La réponse dépend de la structure de ton fichier.
    Faut-il traiter toutes les feuilles ? De la feuille 3 à la feuille 8 ? de la feuille x à la dernière feuille ? Certaines feuilles ayant un nom ou une partie de nom bien précis ?

  3. #3
    Membre éclairé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Par défaut
    Bonjour fring

    Faut-il traiter toutes les feuilles ? De la feuille 3 à la feuille 8
    il ne s'agit pas de feuille mais de pages dans la feuille qui se créées par saut de page en recopiant le pied de page en fin de 1ère page
    dans mon essai donc cela commence a la ligne19 et fini a 53 fin de 1ère page puis reprends la 13ème ligne après,(en ayant remis le pied de page en 3ème et 4 ème lignes puis un morceaux de l'entête en ligne l10à12) puis refait un sut identique sur les autres pages

    voila ce que je peux dire a cette heure tardive ou mes idées ne sont plus claires

    cordialement

    Pascal

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    En lisant ta réponse je me retrouve comme une poule venant de découvrir un tire bouchon ...
    Je pense que le plus simple est de joindre un bout de fichier avec ce que tu as et ce que tu souhaites obtenir sinon je sens qu'on va tourner en rond.

  5. #5
    Membre éclairé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Par défaut
    bonjour fring

    merci de ta réponse, je me doutais bien qu'un fichier serai plus parlant alors j'en ai simplifié un et voici le lien

    c'est un exemple qui comporte 2 pages1/2 de remplies mais je peux en avoir jusque 8

    merci pour tout
    Pascal

  6. #6
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Il me manque encore un petit détail...tu cherches à obtenir quoi ? Supprimer les données ?

  7. #7
    Membre éclairé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Par défaut
    bonjour fring

    oui c'est tout a fait la suppression des données queje cherche a faire comme le fait le code actuel mais sur une seule page
    en fait c'est une remise a zero que je cherche a faire en gardant les formules qui sont dans le bas de page

    le fichier que j'ai envoyer a perdu son code mais il est entier dans le post, errreur de sauvegarde?

    xordialement

    Pascal

  8. #8
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    J'ai regarder ton fichier et je m'interroge sur ta manière de procéder.
    Pourquoi ne pas insérer tes entêtes et pieds de pages dans les endroits prévus pour, c'est à dire...dans l'entête et le pied de page ? De cette manière tu auras ces infos sur toutes tes pages, qu'il y en ait 1, 5 ou 36, sans devoir les répéter toutes les x lignes.
    Au lieu de vouloir effacer les données d'une facture existante et essayer de la remettre en page, pourquoi ne pas créer un modèle (une facture vierge) et repartir de cette base pour chaque nouvelle facture ?

  9. #9
    Membre éclairé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Par défaut
    bonsoir fring

    je m'interroge sur ta manière de procéder
    c'est la solution que j'ai trouvé de mieux pour l'instant, j'ai déjà une feuille modèle pour le saut de page dont je te joint une image et voici le code qui le permet
    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
    Sub ChangementPage(NoLigne As Long)
    With Sheets("facturation")
        'copie des données de fin et de début de page
        [Modèle!A1:P12].Copy
        'insertion de la zone copiée (il va falloir ajouter la ligne d'entêtes
        .Cells(NoLigne, 1).Insert Shift:=xlDown
        'insertion du saut de page
        .HPageBreaks.Add before:=.Cells(NoLigne, 1)
        'positionnement des formules de tête de page
        .Cells(NoLigne + 9, "L").FormulaR1C1 = "=R[-10]C"
        .Cells(NoLigne + 9, "O").FormulaR1C1 = "=R[-10]C"
        .Cells(NoLigne + 9, "P").FormulaR1C1 = "=R[-10]C"
        .Cells(NoLigne + 8, "C") = .[C17]
        .Cells(NoLigne + 8, "I") = .[I17]
        .Cells(NoLigne + 12, "I").FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
        .Cells(NoLigne + 12, "O").FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
        .Cells(NoLigne + 12, "P").FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
        'formatage cellule
        .Range(.Cells(NoLigne + 8, "C"), .Cells(NoLigne + 8, "I")).Font.Size = 16
        .Range(.Cells(NoLigne + 8, "C"), .Cells(NoLigne + 8, "I")).Font.Bold = True
        .Cells(NoLigne + 8, "C").HorizontalAlignment = xlRight
        .Cells(NoLigne + 8, "I").HorizontalAlignment = xlLeft
    End With
    End Sub
    donc si tu pense qu'il y a mieux tout en restant sur une feuille car plusieurs feuilles serait plus embêtant a parametrer l'impression
    de toute façon il faudrais que je puisse faire un devis ou une facture qui comporte plusieurs pages, comme le dernier (hier) 6 pages

    N'hésite pas si tu veux d'autres renseignements
    cordialement
    Pascal

  10. #10
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    En principe il n'y a pas besoin d'un bout de code pour créer un modèle
    Je verrais ça de cette manière :
    • une page de garde avec toutes les infos de ta société, logos, pub ou tout ce que tu veux
    • une seconde page avec ton tableau de facturation contenant 100, 500 ou 5000 lignes avec toutes les formules et mises en forme nécessaires

    Sur cette page "facture" tu insères FACTURE SAV N°2011 - 51 en date du 25 novembre 2010 non pas sur la feuille mais dans l'entête de page et SIRET : ... - NAF : ... - RCS : ... - N° TVA : ... dans le pied de page (pas sur la feuille non plus)
    Tu peux éventuellement insérer les infos dans l'entête et pied de page via une macro en récupérant ces infos dans des cellules, via une InputBox, etc... (voir ICI)
    Lorsque ta facture est terminée, un petit bout de code pour masquer les lignes vides et hop le tour est joué, que ta facture fasse 1 page, 10 pages ou 50 pages...tu retrouveras les entêtes et pieds de page sur chacune de celle-ci.

  11. #11
    Membre éclairé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Par défaut
    bonjour fring

    merci de ta réponse, pour toi cela parait simple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FACTURE SAV N°2011 - 51 en date du 25 novembre 2010
    cette ligne est variable en date et n°de facture, est ce grave doc ?
    je vais voir ce que je peux faire avec ce que tu viens de dire sur les entètes et je tients au courant plus tard car je vais avoir une semaine agitée
    j'essaierai d'alléger mon fichier pour te l'envoyer au cas
    merci pour tout

    cordialement

    Pascal

  12. #12
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Pour rendre ton numéro de facture dynamique, il y a 36 possibilités.
    Voici un exemple, insère le n° 51 dans la cellule A1 de la feuille 1 et ensuite exécute la procédure ci-dessous. Tu remplis autant de ligne que tu veux dans la feuille 2 et tu verras que lorsque tu fais un "Aperçu avant impression" toutes les pages de la feuille 2 comporteront l'entête et le pied de page.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim No As String, Dt As String
     
    No = Year(Now) & " - " & Sheets(1).Range("A1")
    Dt = Format(Date, "dd mmmm yyyy")
     
    With Sheets(2).PageSetup
        'entête au centre
        .CenterHeader = "&12&""Arial,Gras""FACTURE SAV N° " & No & " en date du " & Dt '<-- style Arial + gras + taille 12
        'pied de page au centre
        .CenterFooter = "&8""SIRET : 123456789   -   NAF : 123   -   RCS : 12345 -   N° TVA   :  FR012345678" & Chr(10) & "assurance décennale n°123456789 de chez untel" '<-- style par défaut + taille 8
    End With
    End Sub

  13. #13
    Membre éclairé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Par défaut
    bonjour fring
    merci pour ta réponse, j'ai crée une macro avec ton code et mis 51 dans ma feuille modèle et rien ne se passe, je te joint mon fichier pour une meilleure compréhension, il est complet et non simplifié comme je te l'avais dit(pas eu le temps) fait en ce que tu veux je te laisse libre
    ci joint le lien
    http://cjoint.com/?0lDuxgBEsqP

    cordialement

    Pascal

  14. #14
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Le code est ultra simple mais demande quand même un minimum d'effort de compréhension et d'adaptation de ta part.

    Dans l'exemple que je te donnais, je vais chercher le n° de la facture dans la 1ère feuille de ton classeur.
    Ta feuille modèle n'est pas la 1ère feuille donc tu dois adapter vers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'No = Year(Now) & " - " & Sheets(1).Range("A1")
    No = Year(Now) & " - " & Sheets("Modèle").Range("A1")
    Dans mon exemple j'insère les données dans l'entête et le pied de page de la 2ème feuille du classeur.
    Dans ton classeur la 2ème feuille est masquée... donc à adapter aussi vers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'With Sheets(2).PageSetup
    With Sheets("Modèle").PageSetup

  15. #15
    Membre éclairé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Par défaut
    bonjour fring

    je dois etre un idiot car rien ne bouge quand je fais ce que tu me dit
    j'ai remis mes feuilles visibles et pas mieux, j'ai mis le n°51 en feuil1(plomberie)pas mieux bref je n'arrive a rien et je vais devoir laisser tomber

    merci de tes efforts a essayer de m'aider

    cordialement

    Pascal

  16. #16
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par grisan29 Voir le message
    bref je n'arrive a rien et je vais devoir laisser tomber


    Reprend le code initial, oublie les numéros de position des feuilles et travaille avec le nom de la feuille "Modèle" (en t'assurant que le nom correspond)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim No As String, Dt As String
     
    No = Year(Now) & " - " & Sheets("Modèle").Range("A1")
    Dt = Format(Date, "dd mmmm yyyy")
     
    With Sheets("Modèle").PageSetup
        'entête au centre
        .CenterHeader = "&12&""Arial,Gras""FACTURE SAV N° " & No & " en date du " & Dt '<-- style Arial + gras + taille 12
        'pied de page au centre
        .CenterFooter = "&8""SIRET : 123456789   -   NAF : 123   -   RCS : 12345 -   N° TVA   :  FR012345678" & Chr(10) & "assurance décennale n°123456789 de chez untel" '<-- style par défaut + taille 8
    End With
    End Sub
    Insère 51 dans la cellule A1 de la feuille Modèle (sers moi en un par la même occasion), lance le code et fais un aperçu avant impression sur ta feuille "Modèle"

  17. #17
    Membre éclairé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Par défaut
    bonjour fring
    avec mes excuses cela fonctionne a peu pres
    mais il n' y a rien de visuel qui se passe sur la feuille modèle c'est pour cela que je ne regardais pas l'aperçu
    je te joint un apercu du résultat et une image de ce que l'ancien code faisait et correspondait a mon désir
    chgtpage.jpg est le résultat du code que tu propose
    chgtpage-1.jpg celui du code qui est dans le module 2 en 2ème partie

    autrement je ne vois pas l'utilité d'occuper le n°51 a cette effet car j'ai 3 n°
    1 pour facture 1 autre pour facture sav et 1 autre pour facture d'acompte(qui me pose un souci)
    quand je clic en D2 en page facturation et que je choisi "facture d'acompte" je retrouve le n°de facture
    j'ai des (eau)ctets mais cela ne suffira pas pour un bon 51
    cordialement
    Pascal

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Système] Modification d'une partie d'une variable
    Par gotcha5832 dans le forum Langage
    Réponses: 14
    Dernier message: 12/04/2007, 14h28
  2. comprendre une partie du code
    Par mademoizel dans le forum ASP.NET
    Réponses: 4
    Dernier message: 09/02/2007, 11h40
  3. comprendre une partie de code
    Par menuge dans le forum Langage
    Réponses: 24
    Dernier message: 03/09/2006, 20h44
  4. une partie du code a disparu
    Par recup dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 08/03/2005, 10h08
  5. Indenter une partie du code
    Par KooX dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 23/05/2004, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo