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 :

Comment simplifier ma macro [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 281
    Par défaut Comment simplifier ma macro
    Bonjour à tous,

    A partir de l'enregistreur de macro, de codes à la réponse à mes post précédents (merci à Chris78, Menhir, Halaster08) et de codes trouvés sur le forum, je vous propose la macro "Génération_Ecriture". Elle fonctionne bien mais elle est vraiment le fruit d'un débutant.

    Si quelqu'un pouvait y jeter un oeil et, pour que je progresse dans le VBA, m'apporte ses commentaires, corrections, simplifications, ...

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
     
    Sub Génération_Ecriture()
    '
    ' génére l'écriture et la colle dans le journal VT
    ' 19/04 Fonctionne
     
        Sheets("Matrice Facture").Select
     
        ' En X2 on a le pays de facturation
        ' Si X2 = FRANCE METROPOLITAINE alors Range("M57:S60").Copy
        ' Sinon Range("M64:S66").Copy
     
        If Range("X2") = "FRANCE METROPOLITAINE" Then
        ' Pour import journal Ventes en France
        Range("M57:S60").Copy 'copie l'écriture avec TVA
        End If
     
        If Range("X2") <> "FRANCE METROPOLITAINE" Then
        ' Pour import journal Ventes hors France sans TVA
        Range("M64:S66").Copy 'copie l'écriture sans TVA
        End If
     
        Sheets("Journal VT").Select
        Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues) 'collage spécial
     
        ' Pour mettre Bordures de l'écriture importée qui sont "perdues" pendant le copier / collage spécial
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            '.ColorIndex = 0
            '.TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlEdgeTop)
            'LineStyle = xlContinuous
            '.ColorIndex = 0
            '.TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            '.ColorIndex = 0
            '.TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            '.ColorIndex = 0
            '.TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            '.ColorIndex = 0
            '.TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            '.ColorIndex = 0
            '.TintAndShade = 0
            .Weight = xlThin
        End With
     
        'trouve la dernière ligne dans G
        Cells(Rows.Count, "G").End(xlUp).Select
     
        'Supprimer la dernière ligne collée si elle contient 0 colonne G (si O = frais de port à 0 donc dernière ligne pas nécessaire
        If Cells(Rows.Count, "G").End(xlUp).Value = 0 Then
        Selection.Delete Shift:=xlUp                'supprime la valeur de la cellule sélectionnée
        Cells(Rows.Count, "F").End(xlUp).Select
        Selection.Rows.Delete Shift:=xlUp
        Cells(Rows.Count, "E").End(xlUp).Select
        Selection.Rows.Delete Shift:=xlUp
        Cells(Rows.Count, "D").End(xlUp).Select
        Selection.Rows.Delete Shift:=xlUp
        Cells(Rows.Count, "C").End(xlUp).Select
        Selection.Rows.Delete Shift:=xlUp
        Cells(Rows.Count, "B").End(xlUp).Select
        Selection.Rows.Delete Shift:=xlUp
        Cells(Rows.Count, "A").End(xlUp).Select
        Selection.Rows.Delete Shift:=xlUp
        End If
     
        ' Pour déselectionner l'écriture
        Sheets("Matrice Facture").Select
        Range("S60").Select
        Application.CutCopyMode = False
     
        Sheets("Accueil").Select ' Retour_Accueil
        Range("L11").Select
    End Sub
    Merci à vous

    Philippe

  2. #2
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonsoir, Je ne suis pas sur que ça va marcher, mais le premier Collage spécial colle la valeur et le deuxième le Format.
    Si ça fonctionne, ça permettrais d'enlever tout le reste du formatage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues) 'collage spécial Valeurs
    Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlFormats 'collage spécial Format
    Cordialement

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Pourquoi ne pas utiliser la méthode Range.copy (qui copie tout, format de cellules compris) et ne corriger au besoin que ce qui ne conviendrait pas (couleur de fond et de police) ?

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Génération_Ecriture()
        Dim sh1 As Worksheet, sh2 As Worksheet, plage As Range
        Set sh1 = Sheets("Matrice Facture")
        Set sh2 = Sheets("Journal VT")
        Set plage = IIf(Range("X2") = "FRANCE METROPOLITAINE", Range("M57:S60"), Range("M64:S66"))
        plage.Copy Destination:=sh2.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
    '....le formatage est envoyé avec 
    '....
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set plage = IIf(Range("X2") = "FRANCE METROPOLITAINE", Range("M57:S60"), Range("M64:S66"))
        plage.Copy Destination:=sh2.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
    Voir même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        IIf(Range("X2") = "FRANCE METROPOLITAINE", Range("M57:S60"), Range("M64:S66")).Copy Destination:=sh2.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
    Ca évite une variable.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 281
    Par défaut
    Bonjour,

    Merci pour vos interventions.

    Transitoire
    Bonsoir, Je ne suis pas sur que ça va marcher, mais le premier Collage spécial colle la valeur et le deuxième le Format.
    Si ça fonctionne, ça permettrais d'enlever tout le reste du formatage.

    1 Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues) 'collage spécial Valeurs
    2 Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlFormats 'collage spécial Format
    Cette solution colle le format en dessous du collage spécial valeurs.
    J'ai réussi en jouant sur le Offset en mettant -3 pour faire remonter la selection, cela fonctionne pour les lgnes au dessus mais pas pour la dernière ligne qui n'a donc pas le format.


    patricktoulon
    Sub Génération_Ecriture()
    Dim sh1 As Worksheet, sh2 As Worksheet, plage As Range
    Set sh1 = Sheets("Matrice Facture")
    Set sh2 = Sheets("Journal VT")
    Set plage = IIf(Range("X2") = "FRANCE METROPOLITAINE", Range("M57:S60"), Range("M64:S66"))
    plage.Copy Destination:=sh2.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
    '....le formatage est envoyé avec
    '....
    End Sub
    Je ne comprends pas comment on sait que Range("X2") .... se trouve dans Sheets("Matrice Facture").
    Dans Set plage cela n'y fait pas référence.

    La solution fonctionne mais comme un copier/coller classique donc les formules sont collées. J'ai besoin de copier les valeurs (et non les formules)


    Menhir, ta solution fonctionne mais même remarques que ci dessus.

    Merci encore pour votre aide

    Philippe

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/08/2014, 11h34
  2. [vbexcel]Comment stopper une macro sans la planter.
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/11/2005, 14h45
  3. Comment utiliser la macro TRACE()?
    Par Crisanar dans le forum MFC
    Réponses: 6
    Dernier message: 16/09/2005, 10h48
  4. Réponses: 7
    Dernier message: 19/07/2005, 08h31

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