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 :

Assembler deux code pour mieux travailler [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 330
    Points : 127
    Points
    127
    Par défaut Assembler deux code pour mieux travailler
    Bonsoir,

    Depuis quelque temps je fais des essais pour assembler les deux codes ci-dessous mais sans succès, pourriez-vous m'aider ?

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Count = 1 And Target.Column <= 4 Then
        Application.EnableEvents = False
        If UCase(Range("D" & Target.Row).Value) = "N" Then
            Range("E" & Target.Row).Value = Range("F1").Value & Range("B" & Target.Row).Value
            Range("F" & Target.Row).Value = Range("C" & Target.Row).Value
        Else
            Range("E" & Target.Row).ClearContents
            Range("F" & Target.Row).ClearContents
        End If
         Application.EnableEvents = True
    End If
     
    End Sub

    +

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Column = 2 And Target.Row > 22 And Target.Count = 1 Then
        Application.EnableEvents = False
        If Target.Value <> "" Then
            Range("C" & Target.Row - 1 & ":AB" & Target.Row - 1).Copy Target.Offset(0, 1)
        Else
            Range("C" & Target.Row & ":AB" & Target.Row).ClearContents
        End If
        Application.EnableEvents = True
    End If
    End Sub
    Je ne suis pas spécialiste de VBA mais ça me ferra un exemple pour l'étudier.

    Merci d'avance.

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonsoir,
    peut être comme ceci
    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Count <> 1  Then Exit Sub
     If Target.Column > 4 Then Exit Sub
     
     Application.EnableEvents = False
     If UCase(Range("D" & Target.Row)) = "N" Then
            Range("E" & Target.Row) = Range("F1") & Range("B" & Target.Row)
            Range("F" & Target.Row) = Range("C" & Target.Row)
      Else
            Range("E" & Target.Row).ClearContents
            Range("F" & Target.Row).ClearContents
      End If
     
     If Target.Column = 2 And Target.Row > 22 Then
          Range("C" & Target.Row - 1 & ":AB" & Target.Row - 1).Copy Target.Offset(0, 1)
     End If
     
     Application.EnableEvents = True
     
    End Sub
    Les 2 premieres lignes controlent la suite
    sur l'evenement Change, il est peu probable que Target.Value = "" donc pas utile ainsi que le code associé

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 330
    Points : 127
    Points
    127
    Par défaut
    Merci beaucoup,

    ça fonctionne bien, toutefois EXCEL est légèrement ralenti, je pense que c'est normal ?

    Bonne soirée.

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    En plus de EnabledEvents, ajoute également ScreenUpdating

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Application.ScreenUpdating = False
     
    '[...]
     
    Application.ScreenUpdating = True
    Empêcher le rafraîchissement d'excel permet un gain de temps non négligeable ainsi qu'un effet esthétique.

    Une question, pourquoi passer par VBA pour faire cela, il me semble que des formules s’acquitteraient très bien de cette tache? non?
    [Edit]
    Citation Envoyé par helas Voir le message
    Les 2 premieres lignes controlent la suite
    sur l'evenement Change, il est peu probable que Target.Value = "" donc pas utile ainsi que le code associé
    Heu pas d'accord, si il supprime le contenu d'une cellule, Change est appelé et Target.value = ""
    [/Edit]
    ++
    Qwaz

  5. #5
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour Qwazerty,
    Ta remarque est juste, autant pour moi
    Je pensais Target et non son contenu.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 330
    Points : 127
    Points
    127
    Par défaut
    Bonjour et merci à vous deux, mais ou dois-je placer Target.Value = ""
    en dessous de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Count <> 1  Then Exit Sub
     If Target.Column > 4 Then Exit Sub
    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Target.Value = "" then Exit sub ?
    Merci encore et @ +

    Une question, pourquoi passer par VBA pour faire cela, il me semble que des formules s’acquitteraient très bien de cette tache? non?
    Oui mais comment ?

    @+

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Avant de combiner les 2 codes, il faut expliquer ce que tu souhaite obtenir à l'aide d'un petit algorithme (c'est facile à réaliser).

    Ceci est un exemple

    Si la ligne > 22 alors:
    Si la colonne =2 alors modifier toute la ligne
    Sinon (càd ligne<=22)
    Si la colonne <=4 alors modifier les cellules E et F
    Le code sera alors
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Count = 1 Then
        Application.EnableEvents = False
        If Target.Row > 22 Then
            If Target.Column = 2 Then
                If Target.Value <> "" Then
                    Range("C" & Target.Row - 1 & ":AB" & Target.Row - 1).Copy Range("C" & Target.Row)
                Else
                    Range("C" & Target.Row & ":AB" & Target.Row).ClearContents
                End If
            End If
        Else
            If Target.Column <= 4 Then
                If UCase(Range("D" & Target.Row).Value) = "N" Then
                    Range("E" & Target.Row).Value = Range("F1").Value & Range("B" & Target.Row).Value
                    Range("F" & Target.Row).Value = Range("C" & Target.Row).Value
                Else
                    Range("E" & Target.Row).Resize(1, 2).ClearContents
                End If
            End If
        End If
        Application.EnableEvents = True
    End If
    End Sub
    A toi d'analyser ta situation et d'en dégager le code.
    Si tu n'arrive pas seul, alors explique le résultat voulu.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 330
    Points : 127
    Points
    127
    Par défaut
    Merci pour le code il fonctionne très bien.

    Bonne soirée.

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

Discussions similaires

  1. [XL-2010] assemble deux code VBA
    Par a.ouguerzam dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/04/2015, 12h48
  2. Séparer son code pour mieux s'y retrouver
    Par paladice dans le forum C#
    Réponses: 13
    Dernier message: 03/07/2013, 16h32
  3. Deux codes pour un même but mais erreur
    Par Proggies dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 30/05/2010, 11h04
  4. travailler sur deux système pour la même session
    Par slim_java dans le forum Windows Vista
    Réponses: 2
    Dernier message: 19/12/2009, 23h17

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