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 :

probleme avec Private Sub Worksheet_Change


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 48
    Par défaut probleme avec Private Sub Worksheet_Change
    Bonjour à tous

    Je vous explique mon souci.
    J'ai dans une première feuille une liste de produits avec la possibilité de rentrer une quantité à commander pour chacun.
    Je souhaite qu'à chaque fois qu'une quantité est rentrée pour un produit, la ligne soit copiée dans une 2ème feuille automatiquement afin d'offrir un récapitulatif de sa commande au client.

    J'ai donc écrit cette macro :
    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count > 1 Then Exit Sub
      Dim Lig     As Long
      Dim Col     As String
      Dim NbrLig  As Long
      Dim NumLig  As Long
     
      Sheets("Récapitulatif").Activate ' feuille de destination
     
      Col = "F"                 ' colonne de la donnée non vide à tester
      NumLig = 0
      With Sheets("Tarifs")     ' feuille source
      NbrLig = .Cells(65536, Col).End(xlUp).Row
      For Lig = 1 To NbrLig
        If .Cells(Lig, Col).Value <> "" Then
          .Cells(Lig, Col).EntireRow.Copy
          NumLig = NumLig + 1
          Cells(NumLig, 1).Select
          ActiveSheet.Paste
        End If
      Next
      ActiveSheet.Rows.Ungroup
      End With
     
    End Sub
    Mais lorsque je rentre une quantitée, j'obtiens une erreur à la ligne "Cells(NumLig, 1).Select" et je ne comprends pas pourquoi.

    Si l'un d'entre vous à une solution...
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Si j'ai bien compris, avec cette ligne Cells(NumLig, 1).Select, tu veux copier dans la feuille récapitulatif, mais tu ne la désigne pas, tu es actuellement dans la feuille Tarifs.

    Philippe

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 48
    Par défaut
    Bonjour et merci de ta réponse

    Cependant je ne pense pas que le problème vienne de là puisque lorsque je lance la macro manuellement (sans la condition évènementielle) elle fonctionne parfaitement. Mais j'ai besoin qu'elle se lance à chaque fois qu'une quantité est rentrée

  4. #4
    Expert éminent 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
    Par défaut
    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)
    Dim NewLig As Long
     
    If Target.Count = 1 And Target.Column = 6 Then
        If Target.Value <> "" Then
            With Sheets("Récapitulatif")             ' feuille de destination
                NewLig = .Cells(.Rows.Count, "F").End(xlUp).Row + 1
                Target.EntireRow.Copy .Range("A" & NewLig)
            End With
        End If
    End If
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 48
    Par défaut
    Désolé mais ce code n'a aucun effet.
    En tout cas, encore merci de vous intéresser à mon problème.

    Cordialement

  6. #6
    Expert éminent 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
    Par défaut
    Re désolé
    Le code fera ceci (à mettre dans le module de la feuille où tu entre tes quantités):

    Si tu saisi la quantité dans une cellule de la colonne F, le code copie toute la ligne de cette cellule vers la première ligne vide de la feuille Récapitulatif.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 48
    Par défaut
    Autant pour moi, j'avais fait une mauvaise manip, ça fonctionne parfaitement. Merci beaucoup.
    Dernière chose, à chaque entrée de quantité, on est automatiquement envoyé sur la feuille 'récapitulatif', comment éviter ça?

  8. #8
    Expert éminent 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
    Par défaut
    on est automatiquement envoyé sur la feuille 'récapitulatif',

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 48
    Par défaut
    En fait, quand on rentre une quantité sur la feuille tarif, la feuille récapitulatif se met à jour et excel nous envoie dessus. Donc si je dois retourner sur la feuille tarifs à chaque fois pour rentrer une nouvelle quantité.
    Et je viens également de m'appercevoir que si j'efface une quantité dans tarif elle ne s'efface pas dans récapitulatif.

  10. #10
    Expert éminent 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
    Par défaut
    En fait, quand on rentre une quantité sur la feuille tarif, la feuille récapitulatif se met à jour et excel nous envoie dessus
    avec quel code? Je ne vois pas où j'active la feuille récapitulatif dans le code que je t'avais proposé.

    Pour ta 2ème question, comment tu connais la ligne à supprimer? la dernière?

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 48
    Par défaut
    1ère question résolué, c'est moi qui l'avait ajouté pour tester quelche chose et j'avais oublié de l'enlever.
    Pour la 2ème question, c'est au cas où un client rentre une quantité pour un produit et finalement décide de ne plus l'acheter et l'efface

  12. #12
    Expert éminent 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
    Par défaut
    Oh là là, tu veux l'aide et tu ne fais aucun effort pour lire convenablement une question et répondre?
    comment tu connais la ligne à supprimer? la dernière?

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 48
    Par défaut
    Désolé je suis pas sur d'avoir bien compris ta question.
    A mon avis il faudrait que la macro permette de détecter si la ligne à copier ne se trouve pas déjà dans récapitulatif et si oui qu'elle la remplace

  14. #14
    Expert éminent 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
    Par défaut
    Et comment le code saura quelle ligne remplacer et quelle ligne supprimer?
    Tu as un clé unique pour tes commandes?
    En colonne A, tu as un numéro unique de commande?

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 48
    Par défaut
    Je débute en vba désolé.
    Je joins une partie de mon fichier, peut être que ça sera plus clair comme ça.
    Fichiers attachés Fichiers attachés

  16. #16
    Expert éminent 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
    Par défaut
    En effet ta clé unique est la référence de ta commande (c'est cette clé qu'on cherche)

    Ci-joint 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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim NewLig As Long
    Dim c As Range
    Dim Ref As String
     
    If Target.Count = 1 And Target.Column = 5 Then
        Ref = Range("A" & Target.Row).Value
        If Ref <> "" Then
            With Sheets("Récapitulatif")             ' feuille de destination
                Set c = .Range("A:A").Find(Ref, lookat:=xlWhole)
                If Not c Is Nothing Then
                    NewLig = c.Row
                    Set c = Nothing
                Else
                    NewLig = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
                End If
                If Target.Value <> "" Then
                    Target.EntireRow.Copy .Range("A" & NewLig)
                Else
                    .Rows(NewLig).Delete
                End If
            End With
        End If
    End If
    End Sub

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 48
    Par défaut
    Parfait, merci beaucoup pour ton aide.

    Bonne fin de journée

  18. #18
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 48
    Par défaut
    Bonjour,

    J'ai encore un souci.
    La valeur des cellules qui sont copiées sur la feuille récapitulatif peuvent changer car elles dépendent d'une formule. Du coup les montants de la feuille récapitulatif ne correspondent plus. j'ai pensé à faire un collage avec liaison seulement je ne vois pas comment l'incorporer dans la macro

  19. #19
    Expert éminent 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
    Par défaut
    Tu as changé ton classeur?
    Si comprend bien tu veux que l'évènement sera appelé si tu modifie n'importe quelle colonne de ta feuille tarif et non seulement la colonne E? si c'est ça (en plus reporter seulement les valeurs sans les formules), essaie 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
    22
    23
    24
    25
    26
    27
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim NewLig As Long
    Dim c As Range
    Dim Ref As String
     
    Application.ScreenUpdating = False
    If Target.Count = 1 And Target.Row >= 8 Then
        Ref = Range("A" & Target.Row).Value
        If Ref <> "" Then
            With Sheets("Récapitulatif")             ' feuille de destination
                Set c = .Range("A:A").Find(Ref, lookat:=xlWhole)
                If Not c Is Nothing Then
                    NewLig = c.Row
                    Set c = Nothing
                Else
                    NewLig = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
                End If
                If Target.Value <> "" Then
                    Target.EntireRow.Copy .Range("A" & NewLig)
                    .Rows(NewLig).Value = .Rows(NewLig).Value
                Else
                    .Rows(NewLig).Delete
                End If
            End With
        End If
    End If
    End Sub

  20. #20
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 48
    Par défaut
    En fait j'ai rajouté 2 boutons option, et selon celui que l'utilisateur choisit le montant change.
    Je rejoins mon fichier pour que ce soit plus clair.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [XL-2010] Private Sub Worksheet_Change qui boucle
    Par jauffray.delteil dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/04/2013, 15h47
  2. [Toutes versions] Private Sub Worksheet_Change(ByVal Target As Range) et protection
    Par Giantrick dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/01/2013, 10h21
  3. Probleme avec Private Sub worbook
    Par colapsus dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/01/2012, 09h23
  4. [XL-2007] petit soucis avec un Private Sub Worksheet_Change(ByVal Target As Range)
    Par dris974 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/03/2011, 12h57

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