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 :

Plantage du code si plus de une cellules modifiées [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 156
    Points : 64
    Points
    64
    Par défaut Plantage du code si plus de une cellules modifiées
    Bonjour,

    Mon code permet de rapatrier des valeurs d'une feuille voisine dans la feuille active.
    Lorsque j'entre la référence article dans ma feuille, la macro complète les colonnes "Désignation" , "matière"...
    Le code marche bien quand j'entre une seule référence à la fois (soit en tapant soit en (Ctrl+V).
    Problème, si je fais un (Ctrl+V) avec plusieurs réf ça plante.
    J'ai ajouté la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Count > 1 Then Exit Sub
    mais ce n'est que contourner le problème car plus de plantage mais plus non plus de remplissage.

    Y a-t-il une solution?

    Merci

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    '+++++++++++++++++++++++++++++++++++++++++++++++Récupération désignation matière...+++++++++++++++++++++++++++++++++
     
        Dim Tabl As Variant
     
     
     
        If Not Intersect(Target, [B20:B200]) Is Nothing Then
     
     
     
            Tabl = [ListeDesArticlesAImporter].Value2 '"Value2" recopie toutes les décimales
            For J = 1 To UBound(Tabl)
            If Target.Count > 1 Then Exit Sub 'J'aimerai me dispenser de cette ligne
     
                If Tabl(J, 2) = Target.Value2 Then ' And Tabl(i, 7) = [K11] Then 'Choix du fournisseur
                    Application.EnableEvents = False
                    Target.Offset(, 1) = Tabl(J, 3) 'colonne 1 (Désignation) par rapport à B = colonne 3 du tableau
                    Target.Offset(, 2) = Tabl(J, 5) 'colonne 2 (Matière)
                   Target.Offset(, 3) = Tabl(J, 6) 'colonne 3 (Traitement finition)
                    Target.Offset(, 6) = Tabl(J, 8) 'colonne 6 (PU € HT)
                    Application.EnableEvents = True
                End If
     
            Next J
     
        End If

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Peut-être quelque chose comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Cellule As Range
     
        Application.EnableEvents = False
        If Target.Count > 1 Then
            For Each Cellule In Target.Cells
                Cellule.Offset(0, 1) = "ce que tu veux faire"
            Next
        Else
            Target.Offset(0, 1) = "ce que tu veux faire"
        End If
        Application.EnableEvents = True
    End Sub
    Par contre, il faut tout de même valider si on est dans la bonne colonne et si la copie ne concerne pas plusieurs colonnes,... Target.Columns.Count
    MPi²

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 156
    Points : 64
    Points
    64
    Par défaut
    Merci pour la réponse mais je n'y arrive pas.

    Pour information [ListeDesArticlesAImporter] est l'ensemble des cellules de ma "base articles" (dans la feuille base articles)
    Le but est que lorsqu'on entre une valeur dans la colonne "réf" (cellules B20 B100) de la feuille "Création de commande", la macro complète les colonnes "désignation", "matière" (colonne C, D, E... ) de la feuille "Création de commande". ( Se sont les données de la feuille "Base articles" qui sont recopiées dans la "Création de commande".

    Du coup j'imagine comme solution:
    -Si une cellule modifié => code existant
    -Si plusieurs cellules modifiées => compléter ligne par ligne en commençant par la première ligne modifiée jusqu’à la dernière ligne modifiée.

    Quelqu'un a-t-il une idée pour l'écrire en VBA?

    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    C'est la piste que je te donnais.
    Sans tester, c'est ce que je pense que ça donnerait avec ton 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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    '+++++++++++++++++++++++++++++++++++++++++++++++Récupération désignation matière...+++++++++++++++++++++++++++++++++
        Dim J As Long
        Dim Cellule As Range
        Dim Tabl As Variant
     
        If Not Intersect(Target, [B20:B200]) Is Nothing Then
     
            Tabl = [ListeDesArticlesAImporter].Value2 '"Value2" recopie toutes les décimales
            If Target.Count > 1 Then  'cas de plusieurs cellules modifiées
                For Each Cellule In Target.Cells  'on lit chaque cellule modifiée
                   For J = 1 To UBound(Tabl)
                       If Tabl(J, 2) = Cellule.Value2 Then ' And Tabl(i, 7) = [K11] Then 'Choix du fournisseur
                           Application.EnableEvents = False
                           Cellule.Offset(, 1) = Tabl(J, 3) 'colonne 1 (Désignation) par rapport à B = colonne 3 du tableau
                           Cellule.Offset(, 2) = Tabl(J, 5) 'colonne 2 (Matière)
                           Cellule.Offset(, 3) = Tabl(J, 6) 'colonne 3 (Traitement finition)
                           Cellule.Offset(, 6) = Tabl(J, 8) 'colonne 6 (PU € HT)
                           Application.EnableEvents = True
                           Exit For
                       End If
     
                   Next J
                Next
            Else  'seulement une cellule modifiée
               For J = 1 To UBound(Tabl)
                   If Tabl(J, 2) = Target.Value2 Then ' And Tabl(i, 7) = [K11] Then 'Choix du fournisseur
                       Application.EnableEvents = False
                       Target.Offset(, 1) = Tabl(J, 3) 'colonne 1 (Désignation) par rapport à B = colonne 3 du tableau
                       Target.Offset(, 2) = Tabl(J, 5) 'colonne 2 (Matière)
                      Target.Offset(, 3) = Tabl(J, 6) 'colonne 3 (Traitement finition)
                       Target.Offset(, 6) = Tabl(J, 8) 'colonne 6 (PU € HT)
                       Application.EnableEvents = True
                   End If
     
               Next J
            End If
     
        End If
    End Sub
    MPi²

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 156
    Points : 64
    Points
    64
    Par défaut
    Merci beaucoup,

    Ca marche très bien.

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    en fait If Target.Count > 1 n'est pas vraiment nécessaire.
    For Each Cellule In Target.Cells fonctionne tout aussi bien avec 1 cellule.
    Ca fait moitié moins de code :-)
    eric

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 156
    Points : 64
    Points
    64
    Par défaut
    Merci pour l'info.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Citation Envoyé par eriiic Voir le message
    Bonjour,

    en fait If Target.Count > 1 n'est pas vraiment nécessaire.
    For Each Cellule In Target.Cells fonctionne tout aussi bien avec 1 cellule.
    Ca fait moitié moins de code :-)
    eric
    Effectivement
    MPi²

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

Discussions similaires

  1. [XL-2010] Clic droit ne fonctionne plus dans une cellule
    Par rayan27 dans le forum Excel
    Réponses: 4
    Dernier message: 29/04/2015, 14h06
  2. [XL-2007] Modification de la valeur d'une cellule modifiable
    Par atk_49 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 21/02/2013, 17h09
  3. Réponses: 1
    Dernier message: 05/05/2011, 21h35
  4. Code VBA pour Copier une cellule dans un filtre?
    Par Redisdead dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/02/2009, 05h48
  5. Acquisition de valeur d'une cellule modifie
    Par X-plode dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 03/07/2007, 14h39

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