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 :

Problème code VBA affichage de données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    alger
    Inscrit en
    Novembre 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : alger
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2015
    Messages : 34
    Par défaut Problème code VBA affichage de données
    bonsoir tt le monde j'ai vraiment besoin de votre aide SVP. vue mon niveau de débutant en VBA ça fait des jour que je galère pour résoudre mon problème

    j'ai un classeur qui fonction très bien avec le code VBA actuelle,le classeur est composer de deux feuils une "detail" qui m'affiche le détail des sorties effectués par date et nom client sur trois tableau depuis la feuil "Mouvement" comme sur l'image ":

    tableau1 "Agro" "A17:C44"
    tableau 2 "légumes" "G17:I28"
    tableau3"Fruit" L17:N28"
    Nom : Exmple.JPG
Affichages : 175
Taille : 59,6 Ko

    mon problème si quand je change de nom du client qui y a fait les sortie uniquement pour "Agro" et "Fruit" il m'affiche juste les produit "Agro" si comme si il m'impose de faire les sorties pour la catégorie Légumes pour afficher les autre sorties svp je n’arrive pas a trouver la cause du problème dans le code que je vous joins et je vous joins le classeur.

    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
    Option Explicit
     
    Dim fm As Worksheet, tablo, tabloR1(), tabloR2(), tabloR3()
    Dim dico1 As Object, dico2 As Object, dico3 As Object, dico4 As Object, dico5 As Object, dico6 As Object
    Dim i&, j&, k1&, k2&, k3&, dte As Date, client$
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Application.EnableEvents = False
        If Target.Address = "$A$6" Or Target.Address = "$D$6" _
                And (Range("A6") <> "" And Range("D6") <> "") Then
     
            Set dico1 = CreateObject("Scripting.Dictionary")
            Set dico2 = CreateObject("Scripting.Dictionary")
     
            Set dico3 = CreateObject("Scripting.Dictionary")
            Set dico4 = CreateObject("Scripting.Dictionary")
     
            Set dico5 = CreateObject("Scripting.Dictionary")
            Set dico6 = CreateObject("Scripting.Dictionary")
     
            Set fm = Sheets("Mouvement")
            tablo = fm.Range(fm.Cells(3, 2), fm.Cells(fm.Range("B" & Rows.Count).End(xlUp).Row, 15))
            k1 = 0: k2 = 0: k3 = 0: dte = Range("A6"): client = Range("D6")
            For i = 1 To UBound(tablo, 1)
                If tablo(i, 1) = "Sortie" And tablo(i, 2) = dte And tablo(i, 3) = Range("D6") Then
     
                    If tablo(i, 14) = "Agro" Then
                        If Not dico1.exists(tablo(i, 5)) Then
                            dico1(tablo(i, 5)) = tablo(i, 6)  'quantité
                            dico2(tablo(i, 5)) = tablo(i, 7)
                        Else
                            dico1(tablo(i, 5)) = dico1(tablo(i, 5)) + tablo(i, 6) 'quantité
                        End If
     
                    ElseIf tablo(i, 14) = "Legumes" Then
                        If Not dico3.exists(tablo(i, 5)) Then
                            dico3(tablo(i, 5)) = tablo(i, 6)  'quantité
                            dico4(tablo(i, 5)) = tablo(i, 7)
                        Else
                            dico3(tablo(i, 5)) = dico3(tablo(i, 5)) + tablo(i, 6) 'quantité
                        End If
     
                    ElseIf tablo(i, 14) = "Fruit" Then
                        If Not dico5.exists(tablo(i, 5)) Then
                            dico5(tablo(i, 5)) = tablo(i, 6)  'quantité
                            dico6(tablo(i, 5)) = tablo(i, 7)
                        Else
                            dico5(tablo(i, 5)) = dico5(tablo(i, 5)) + tablo(i, 6) 'quantité
                        End If
     
                    End If
                End If
            Next i
        End If
     
        Range("A17:C44,G17:I28,L17:N28").ClearContents
        If Range("A6") = "" Or Range("D6") = "" Then GoTo fin
        On Error GoTo fin
     
        Range("A17").Resize(dico1.Count, 1) = Application.Transpose(dico1.keys)
        Range("B17").Resize(dico1.Count, 1) = Application.Transpose(dico1.items)
        Range("C17").Resize(dico1.Count, 1) = Application.Transpose(dico2.items)
     
        Range("G17").Resize(dico3.Count, 1) = Application.Transpose(dico3.keys)
        Range("H17").Resize(dico3.Count, 1) = Application.Transpose(dico3.items)
        Range("I17").Resize(dico3.Count, 1) = Application.Transpose(dico4.items)
     
        Range("L17").Resize(dico5.Count, 1) = Application.Transpose(dico5.keys)
        Range("M17").Resize(dico5.Count, 1) = Application.Transpose(dico5.items)
        Range("N17").Resize(dico5.Count, 1) = Application.Transpose(dico6.items)
    fin:
        Application.EnableEvents = True
    End Sub
     
    Sub Evenement()
        Application.EnableEvents = True
    End Sub
    Merci a vous tous excellente soirée
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 246
    Par défaut
    hello,
    c'est la ligne
    qui te masque l'origine du problème. En effet si l'on mets cette ligne en commentaire, quand on sélectionne le client GROUP1
    on a une erreur d'exécution '13' : incompatibilité de type sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("G17").Resize(dico3.Count, 1) = Application.Transpose(dico3.keys)
    En effet dico3 n'a pas d'éléments quand on sélectionne GROUP1.
    Une solution consiste à tester si les dicos contiennent des éléments avant de les utiliser, comme ceci par exemple :
    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
        'On Error GoTo fin
        If dico1.Count > 0 Then
          Range("A17").Resize(dico1.Count, 1) = Application.Transpose(dico1.keys)
          Range("B17").Resize(dico1.Count, 1) = Application.Transpose(dico1.items)
          Range("C17").Resize(dico1.Count, 1) = Application.Transpose(dico2.items)
        End If
        If dico3.Count > 0 Then
          Range("G17").Resize(dico3.Count, 1) = Application.Transpose(dico3.keys)
          Range("H17").Resize(dico3.Count, 1) = Application.Transpose(dico3.items)
          Range("I17").Resize(dico3.Count, 1) = Application.Transpose(dico4.items)
        End If
        If dico5.Count > 0 Then
          Range("L17").Resize(dico5.Count, 1) = Application.Transpose(dico5.keys)
          Range("M17").Resize(dico5.Count, 1) = Application.Transpose(dico5.items)
          Range("N17").Resize(dico5.Count, 1) = Application.Transpose(dico6.items)
        End If
    J'ai mis la ligne On Error Goto Fin en commentaire pour que si il y a un problème il ne soit pas masqué.

    Ami calmant, J.P

  3. #3
    Membre averti
    Femme Profil pro
    alger
    Inscrit en
    Novembre 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : alger
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2015
    Messages : 34
    Par défaut
    bonjour jurassic un grand merci pour toi j'ai tester le le code et ça fonction et merci d’avoir partager ton savoir avec nous
    excellente matinale

  4. #4
    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
    Tu structures mal tes données.
    Il ne faut pas faire trois tableaux mais un seul, en y ajoutant une colonne dans laquelle tu spécifies si c'est "Agro", "légumes" ou "Fruit".

    Si tu veux n'afficher qu'un seul de ces trois types, il suffit de placer un filtre sur tes données (Ruban Données > Icone Filtrer).
    Si tu veux faire des sommes par type de produit, tu pourras utiliser la fonction SOMME.SI(). Lire ça : https://support.microsoft.com/fr-fr/...2-1697a653039b

    Structurées ainsi, tes données seront beaucoup plus simple à gérer, y compris pour écrire cette macro.

Discussions similaires

  1. Problème Code VBA, ajout non désiré sur bouton
    Par vivicente dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/06/2008, 17h33
  2. Problème code VBA
    Par nanot dans le forum VBA Access
    Réponses: 21
    Dernier message: 04/06/2008, 15h24
  3. Problème code vba
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2008, 12h03
  4. Code VBA-Base de données en lecture seule
    Par @lex7020 dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/11/2007, 16h12
  5. Problème code VBA :)
    Par Freygolow dans le forum Access
    Réponses: 4
    Dernier message: 17/05/2007, 15h43

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