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 :

AdvancedFilter - Mise à jour de l'extraction aprés inscription de données dans une bdd


Sujet :

Macros et VBA Excel

  1. #21
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    hello
    Pas de soucis.

    Effectivement cela marche !!

    quel génie.

    Bonjour,

    Je viens de refaire des tests.
    Ta méthode marche parfaitement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Target.Column <> 19 Then Exit Sub
    quand j'inscrit des nouvelles données via l'usf.

    Par contre, quand je modifie un donnée, colonne 15 directement dans la Bdd l'export ne se met pas à jour.

    Le but du jeu avec ce fichier est de gérer mes comptes, tu l'auras compris je pense.

    Là j'en suis à la première phase.

    Dans un deuxième temps, je souhaité gérer les lettrages colonne 15 - BQ :
    Passé en Banque = OUI et non passé en Banque = NON

    L'extraction me sert à gérer les opérations restantes sur le mois (en BUDGET ou en REEL) en validant si passé en Banque (OUI) ou non passé en Banque (NON).
    Du coup, je passerai avec un usf de consultation/modification de la Bdd pour gérer cela (Je suis preneur de tout bon conseils à ce niveau là) ;-)

    J'essaye avec (modif directement dans la Bdd avant la création de l'usf)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Column <> 19 Or Target.Column <> 15 Then Exit Sub
    mais pas de mise à jour...

    As-tu une idée ?
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  2. #22
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'essaye avec (modif directement dans la Bdd avant la création de l'usf)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Column <> 19 Or Target.Column <> 15 Then Exit Sub
    mais pas de mise à jour...
    As-tu une idée ?
    L'opérateur And serait préférable au Or, tu ne crois pas ?

    Le fait que tu effectues les modifications manuellement et à l'aide d'un UserForm rend plus complexe, l'algorithme. Si on enlève le IF, l'exportation des données se fera à chaque fois qu'une des cellules de la feuille de données sera modifiée se qui alourdira l'exécution du programme.
    Pourquoi ne te limites-tu pas à placer un bouton qui activerait l'exportation ou éventuellement à l'activation de la feuille [Interface] ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #23
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    à l'activation de la feuille [Interface] ?
    Cela me semble pas !
    Je teste

    Que me conseilles-tu pour créer "le pointage" OUI/NON dans la colonne 15 - BQ?

    Çà marche nikel avec le OR ;-)


    Purée, VBA me coince a cause d'un double Worksheet_Activate

    J'arrive pas à le compiler dans un seul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Activate(ByVal Target As Range)
    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_Activate()
     
     With Sheets("INTERFACE")
     .Range("A6").Value = "Situation au " & Date
     .Range("A18").Value = "A fin --> " & Format(Date, "MMMM")
     .Range("C2").Value = Format(Date, "MMMM")
     .Range("E7").FormulaR1C1 = "=IF(RC[2]=R[4]C[-2],"""",""Erreur Livret Bleu"")"
     .Range("E36").Value = "Budget fin de mois"
     .Range("I6").Value = "Statistiques à fin M-1 "
     .Range("K2").Value = Date
     .Range("M6").Value = "Opérations restantes fin " & Format(Date, "MMMM"): End With
     
     
    'Figer la taille et Position des Boutons
    With ActiveSheet.Bt_Saisie
        .Top = Range("B1:B3").Top
        .Left = Range("B1:B3").Left
        .Width = Range("B1:B3").Width
        .Height = Range("B1:B3").Height: End With
     
    With ActiveSheet.Bt_Exit
        .Top = Range("O1:O3").Top
        .Left = Range("O1:O3").Left
        .Width = Range("O1:O3").Width
        .Height = Range("O1:O3").Height: End With
     
     
     End Sub
    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
    Private Sub Worksheet_Activate(ByVal Target As Range)
     
    Dim areaCriteria As Range, areaExport As Range
     
    Dim shtDb As Worksheet
    Set shtDb = ThisWorkbook.Worksheets("COMPTES")
     
     If Target.Column <> 19 And Target.Column <> 15 Then Exit Sub
     
     With Application
      Set areaCriteria = .Names("AreaCriteria").RefersToRange.CurrentRegion
      Set areaExport = .Names("AreaExport").RefersToRange
     End With
     shtDb.Range("A1").CurrentRegion.AdvancedFilter xlFilterCopy, areaCriteria, areaExport
     
     
    End Sub
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  4. #24
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour Seb,
    Çà marche nikel avec le OR ;-)
    Ah bon ?
    Pourtant fais un simple test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub t()
     Dim c as Byte
     c = 15
     If c <> 19 And c <> 15 Then Exit Sub
      MsgBox c
    End Sub
    Purée, VBA me coince a cause d'un double Worksheet_Activate
    On ne peut avoir qu'une seule procédure pour un même événement d'un même objet.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #25
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    heuuuu
    je vois pas trop a quoi sert le test

    j'obtiens 15

    je t'assure que l'extraction marche bien ! ;-)
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  6. #26
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    je vois pas trop a quoi sert le test
    j'obtiens 15
    Cela servait à te montrer qu'avec le And, la procédure s'arrête si c vaut autre chose que 15 ou 19 alors qu'avec un Or la procédure est quittée à tous les coups.
    je t'assure que l'extraction marche bien ! ;-)
    Parfait alors.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #27
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    oki oki !!!

    Merci à toi !!

    Qu'est ce que tu me conseille pour faire des modifs dans la Bdd ?
    Usf avec Listview pour voir les puis je relance l'usf de Saisie pour faire une modif ?
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  8. #28
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Qu'est ce que tu me conseille pour faire des modifs dans la Bdd ?
    Usf avec Listview pour voir les puis je relance l'usf de Saisie pour faire une modif ?
    Pour moi, c'est simple, soit j'opte pour un encodage par UserForm soit je le fais manuellement mais pas les deux.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #29
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    La maj se fais manuellement pr l'instant, le fichier est en création !
    J'aime bien la notion d'usf ... je crois que c le plus simple

    Salut Phillipe,

    Je reviens vers toi concernant mon fichier,

    Je fais la partie "Pointage" de mon fichier
    le but du jeu est de double-cliquer sur la zone (opérations non passées en banque) M8: P (Derniére ligne), onglet "INTERFACE"
    de la on récupére la valeur dans la colonne M (correspondant au code de la ligne concernée dans la Bdd.

    L'usf de Saisie (Usf_Saisie) apparait et je peu faire des modif dans la base.

    J'ai fait ce 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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    On Error Resume Next
     
     Dim j&
        j = Range("M8").End(xlDown).Row
    If Target.Row <= j And Target.Row >= 8 Then
        Dim c, x&
        lig = Application.WorksheetFunction.Match(Cells(Target.Row, "M").Value, Worksheets("COMPTES").Range("A1:A5000"), 0)
        With Usf_Saisie
            For Each c In .Controls
                If c.Tag <> "" Then
                    x = c.Tag
                    c.Value = Feuil3.Cells(lig, x).Value
                End If
            Next
        End With
     
     End If
    Usf_Saisie.Show
    End Sub

    La récupération des donnés fonctionne trés bien et je peux faire des modifs.

    Sauf que le ciblage "SelectionChange" ne se fait psa uniquement dans la zone M8: P (Derniére ligne) , l'usf se déclenche peut imposte ou je clique dans la Feuille "INTERFACE"....


    Je pige pas ou j'ai fait une connerie ....

    Vois tu qqc ?
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  10. #30
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'ai pas le temps de faire des tests. Moi j'utilise Intersect
    Exemple à adapter (ici avec l'événement SelectionChange)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     Dim rng As Range
     Set rng = Range("A2:F6")
     If Not Application.Intersect(Target, rng) Is Nothing Then
      MsgBox Target.Address
     End If
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #31
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    Hello
    Pas de soucis.

    Cela marche nikel avec :

    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_SelectionChange(ByVal Target As Range)
     Dim rng As Range
     Set rng = Range("M8:mP50")
     
     
     If Not Application.Intersect(Target, rng) Is Nothing Then
        If Target <> "" Then
        On Error Resume Next
        Dim c, x&
        lig = Application.WorksheetFunction.Match(Cells(Target.Row, "M").Value, Worksheets("COMPTES").Range("A1:A5000"), 0)
        With Usf_Saisie
            For Each c In .Controls
                If c.Tag <> "" Then
                    x = c.Tag
                    c.Value = Feuil3.Cells(lig, x).Value
                End If
            Next
        End With
     Usf_Saisie.Show
        End If
     
     End If
     
     
    End Sub
    Encore un grand merci à toi
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  12. #32
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    Salut Philippe,
    je reviens vers toi pour mon fichier..... je continue à l'élaboré

    Dans le mm état d'esprit que le travail précédent, je souhaiterais faire un filtre élaboré mais cette fois en plus je veux faire des totaux :

    Je m'explique :
    - Je filtre ma base avec les filtres élaborés
    - ce lignes que j'ai filtrés je fais des totaux sur les lignes similaires
    - mais ne ne fais apparaître dans cette extraction avec les lignes différentes de 0

    Je ne trouve pas de code intéressant sur le net, du coup je me dis qu'en incluant le subtotal et <> 0 dans ton code c'est jouable .... qu'en penses-tu ?
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  13. #33
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour Seb,
    Pas certain d'avoir bien saisi ton problème.
    Ce que j'ai compris, c'est que tu souhaites faire un filtre avancé sur une plage de cellules et d'afficher un sous-total sur une ou plusieurs colonnes filtrées.
    Si ce que j'ai compris est exact, tu pourrais transformer la plage de cellules en tableau, effectuer le filtre suivant la zone des critères et ensuite afficher la ligne des totaux.

    Procédure
    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
    Sub TableForFiltering()
     ' Déclaration des variables
     Dim sht As Worksheet, areaData As Range, areaCriteria As Range, tbl As ListObject
     Set sht = ThisWorkbook.Worksheets("db")
     ' Attribution des références aux variables objets
     With sht
      Set areaData = .Range("A1").CurrentRegion
      Set areaCriteria = .Range("K1:L2")
      ' Création d'un tableau
      Set tbl = .ListObjects.Add(xlSrcRange, Range("$A$1:$H$21"), , xlYes) ' .Name = "tableForFiltering"
     End With
     With tbl
     .ShowTotals = False
      areaData.AdvancedFilter xlFilterInPlace, areaCriteria
     .ShowTotals = True
     End With 
    MsgBox "Terminé ?"
     ' Affiche touts les données, enlèle la ligne des totaux, conversion en plages
     With tbl
     .ShowTotals = False ' retire la ligne des totaux
     .Unlist ' Convertit le tableau en plage
     End With
     sht.ShowAllData ' Affiche toutes les données
     Set areaData = Nothing: Set areaCriteria = Nothing: Set tbl = Nothing
    End Sub
    Le sous-total se fait sur la dernière colonne. Il y a moyen d'effectuer des synthèses sur d'autres colonnes
    Exemple (Remplacer les lignes 12 à 16) Sous-total des colonnes Age et Sexe (la dernière colonne étant la colonne des salaires)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     With tbl
     .ShowTotals = False
      areaData.AdvancedFilter xlFilterInPlace, areaCriteria
     .ListColumns("Age").TotalsCalculation = xlTotalsCalculationAverage ' Moyenne
     .ListColumns("Sexe").TotalsCalculation = xlTotalsCalculationCount   ' Nombre
     .ShowTotals = True
     End With
    La ligne de code sht.ShowAllData doit pouvoir être remplacée par l'affichage des données de l'objet ListObject mais je ne retrouve plus la méthode ou la propriété qui le permet.

    Illustration + Classeur à télécharger

    Nom : TableForFiltering.png
Affichages : 179
Taille : 37,4 Ko
    Fichiers attachés Fichiers attachés
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  14. #34
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    hello
    Super ton fichier et cela es bien dans l'esprit de ce que je cherche.

    seul changement les totaux ne doivent pas être visible mais en background.


    si on fait le lien avec mon fichier (en pj), j'ai créer la formule excel qui va bien :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =SOMMEPROD((Tb_B_DATE<FIN.MOIS(AUJOURDHUI();-1))*(Tb_B_BUDGETREEL="BUDGET")*(Tb_B_COMPTE="COURANT")*(Tb_B_LIGNE="APPARTEMENT")*(Tb_B_FUTUR="NON")*(Tb_B_DEBITCREDIT))
    -SOMMEPROD((Tb_B_DATE<FIN.MOIS(AUJOURDHUI();-1))*(Tb_B_BUDGETREEL="REEL")*(Tb_B_COMPTE="COURANT")*(Tb_B_LIGNE="APPARTEMENT")*(Tb_B_FUTUR="NON")*(Tb_B_DEBITCREDIT))
    ici "Appartement" n'étant qu'un exemple
    qui peut se traduire par :

    Plage de Critéres "AreaCriteria2"dans l'onglet PARAMETRES AB11:AF12

    Nom : Capture.PNG
Affichages : 160
Taille : 3,3 Ko



    Le tout devant être extrait dans l'onglet "INTERFACE"
    Cellule I8 et K8

    Chaud cacaouhouete à décrire mais je pense que j'en ai fait tour...
    Fichiers attachés Fichiers attachés
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  15. #35
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    Salut Philippe,


    As-tu une idée ?


    Je patoge un peu dans la semoule.


    Je pense bien qu'il faut inclure un .TotalsCalculation aprés se code là

    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
    Sub TableForFiltering()
     ' Déclaration des variables
     Dim sht As Worksheet, areaData As Range, areaCriteria As Range, tbl As ListObject
     Set sht = ThisWorkbook.Worksheets("db")
     ' Attribution des références aux variables objets
     With sht
      Set areaData = .Range("A1").CurrentRegion
      Set areaCriteria = .Range("K1:L2")
      ' Création d'un tableau
      Set tbl = .ListObjects.Add(xlSrcRange, Range("$A$1:$H$21"), , xlYes) ' .Name = "tableForFiltering"
     End With
     With tbl
     .ShowTotals = False
      areaData.AdvancedFilter xlFilterInPlace, areaCriteria
     .ShowTotals = True
     End With 
    MsgBox "Terminé ?"
     ' Affiche touts les données, enlèle la ligne des totaux, conversion en plages
     With tbl
     .ShowTotals = False ' retire la ligne des totaux
     .Unlist ' Convertit le tableau en plage
     End With
     sht.ShowAllData ' Affiche toutes les données
     Set areaData = Nothing: Set areaCriteria = Nothing: Set tbl = Nothing
    End Sub

    et de filtrer le.TotalsCalculation <>0 puis faire l'esport !!

    Je suis dans le bon ?
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  16. #36
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour Seb,
    Utilise plutôt les fonctions de la catégorie Base de données.
    On les utilise de la même manière que les filtres avancés d'excel. Une zone des données et une zone des critères.
    Cela a le double avantage que tu peux utiliser les mêmes zones (Données et critères) pour filtrer et effectuer une synthèse avec ces fonctions.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  17. #37
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    Hello,

    J'ai progressé dans ma probelmatique

    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
    Sub Macro1()
     
    For each Tb_P_Poste dans la colonne I de l'onglet COMPTES ("Tb_B_PLigne")
    Base = .Range("a1:s" & .Cells(Rows.Count, 1).End(xlUp).Row)
     
    TotalReel = "=ABS(DSUM(Base,""DEBITCREDIT"",AreacriteraReel))"
     
    TotalBudget = "=ABS(DSUM(Base,""DEBITCREDIT"",Areacriterabudget))"
     
     
    TotalMois = TotalReel - TotalBudget
     
    If TotalMois <> 0 Then
     
    'extraction vers "INTERFACE" I8:K8 avec entete en I7:K7
     
    Next
     
    End Sub
    Qu'en penses-tu ?
    est-ce le bon schéma ?

    Hello
    J'avoue que je suis tjrs perdu sur ce code.

    Suis-je dans la bonne direction ?
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  18. #38
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour Seb,
    For each Tb_P_Poste dans la colonne I de l'onglet COMPTES ("Tb_B_PLigne")
    La procédure que tu as affichée n'est pas une procédure mais un mélange de code et de français. Comment veux-tu recevoir de l'aide ?
    De plus un peu d'explication tel que la manière dont sont organisées tes données et ce que tu souhaites obtenir ne serait pas superflu.

    Dans cette ligne
    Base = .Range("a1:s" & .Cells(Rows.Count, 1).End(xlUp).Row)
    L'objet Range est rattaché à quelle feuille ?

    [EDIT]
    Si je reprends le même exemple du classeur déposé dans cette réponse (fil #36)

    Nombre de personnes de sexe Masculin ou Féminin suivant le critère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =BDNBVAL(A1:H21;D1;K1:L2)
    Moyenne des âges
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =BDMOYENNE(A1:H21;G1;K1:L2)
    Somme des salaires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =BDSOMME(A1:H21;H1;K1:L2)
    Ces formules peuvent bien entendu être écrites dans une procédure VBA mais je n'en vois pas l'intérêt et placées sur une autre feuille également.

    J'ajouterais que tu aurais dû ouvrir une autre discussion car celle-ci, même si elle traite de la même méthode n'a plus rien à voir avec ta question initiale du 19/11/2015.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  19. #39
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    bonjour,
    Je reviens aprés un temps d'absence ...
    Tu as raison, j'ouvre une nouvelle discussion et je repose les choses plus clairement.

    Merci à toi en tout cas pour les aides précédentes.

    re !

    J'ai mon nouveau post
    ici

    Suis je assez clair du coup ?
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  20. #40
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    Hello

    Je reviens sur ton premier 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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    'Extraction des données pour connaitre les lignes non passées en Banque sur le mois concerné
    Dim areaCriteria As Range, areaExport As Range
     
    Dim shtDb As Worksheet
    Set shtDb = ThisWorkbook.Worksheets("COMPTES")
     
    'Vérifie si la Colonne 19 - RESTANTBUDGET est écrite ou la colonne 15 - Bq est modifiée
     If Target.Column <> 19 And Target.Column <> 15 Then Exit Sub
     
    With Application
     Set areaCriteria = .Names("AreaCriteria").RefersToRange.CurrentRegion
     Set areaExport = .Names("AreaExport").RefersToRange
     End With
    shtDb.Range("A1").CurrentRegion.AdvancedFilter xlFilterCopy, areaCriteria, areaExport
     
     Format_Sht_INTERFACE
     
     
    End Sub
    Est-ce qu'il serait possible de classer areaExport sur la première colonne sur les données exportées, de manière ascendante ?
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/12/2014, 08h58
  2. Réponses: 5
    Dernier message: 24/11/2011, 11h22
  3. extraction d'un fichier excel dans une BDD SQL server
    Par saraenim dans le forum Développement
    Réponses: 4
    Dernier message: 03/10/2008, 13h58
  4. Réponses: 3
    Dernier message: 19/06/2006, 10h54
  5. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 13h24

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