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 :

tableau qui donne les dates communes (ligne) de 3 noms choisis(colonne) [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut tableau qui donne les dates communes (ligne) de 3 noms choisis(colonne)
    Bonjour,

    je synthétise une base de données, et je tente desperement de faire un tableau double entrée avec en colonne principale 3 noms, et en ligne les dates disponibles qui sont communes aux 3 noms, avec 4 dates maximum; le but étant de comparer les prix liés à ces noms à des dates différentes.

    Je m explique pour chaque nom dans ma base de données, il peut y avoir plusieurs dates correspondantes et je cherche à faire des comparaisons selon les noms et dates, donc je recherche les dates communes aux 3 noms choisis.

    Pour l'instant, je n'ai réussi qu'à avoir les dates dispo sur une même ligne, pour un seul nom grace à une boucle dans vba,voici le 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
    Private Sub CommandButton3_Click()
    Worksheets("Synthese").Select
     
    'nettoyage des données du tableau
    Worksheets("Synthese").Select
    Range("D26:O26").ClearContents
     
    Dim Name As String
    Dim cells As Range
     
    'Name = cells(28, 3)
    Dim i
    Name = ActiveCell.Value
    i = 1
    For Each cells In Worksheets("sheet").Range("a3:a" & Worksheets("sheet").Range("A65536").End(xlUp).Row)
    If cells.Value = Name Then
    ActiveCell.Offset(-2, i) = cells.Offset(0, 1).Value
    'cells(28, 3).Offset(-2, i) = cells.Offset(0, 1).Value
     
    i = i + 1
    End If
    Next
    End Sub
    Mon pb, c'est d arriver à faire la même chose mais pour les 3 noms disposés dans la même colonne de mon tableau
    Toute aide est sera précieuse donc + que bienvenue ! Merci bcp

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Décris très précisément tes données, sur quelle feuille on trouve quoi et donne un exemple de ce que tu cherches à faire.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut pbm de boucle
    Salut Daniel,

    Alors mon fichier se compose de 2 feuilles excel.
    la premiere s appelle "Synthese" et contient mon tableau.
    La 2eme s appelle "sheet" et contient mes données:
    colonne A: tous les noms
    colonne B: toutes les dates (maturités correspondantes)
    Donc pour un même nom qui peut apparaitre plusieurs fois dans la colonne A il y aura plusieurs dates dispo dans la colonne B.

    Ce que j essaye de faire: avoir dans mon tableau de synthese, pour les 3 noms choisis (dans la colonne principale du tableau) les dates communes et disponibles dans la ligne principale du tableau pour au moins 2 des noms.

    Le code précédent me permet d afficher en ligne les dates disponibles pour un nom choisi dans la colonne.

    Voici mon code pour le tableau avec les 3 noms:
    Mon problème étant maintenant que les boucles ne retiennent que la premiere date trouvée correspondante au nom choisi. Donc le premier x1 pour name1, le 1er x2 pour name2 et idem pour x3. Donc je ne peux tester toutes les combinaison. Il faudrait que la macro retienne tous les x1, x2 et x3 possibles et que toutes les combinaisons soient testées.

    '***************************************Création du tableau de synthese**************************************

    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
    79
    80
    81
    82
    83
    Private Sub commandbutton_4()
     
    Worksheets("Synthese").Select
     
    'Identification des variables: Issuers
     
    Dim name1 As String: name1 = Worksheets("Synthese").Range("C43").Value
    Dim name2 As String: name2 = Worksheets("Synthese").Range("C44").Value
    Dim name3 As String: name3 = Worksheets("Synthese").Range("C45").Value
     
    'Identification des variables: Maturities
     
    Dim x1 As String
    Dim x2 As String
    Dim x3 As String
     
    'Identification des variables: chaque cellule dans la colonne A (Name) de la feuille "sheet"
     
    Dim cells1 As Range
    Dim cells2 As Range
    Dim cells3 As Range
     
    'Pour chaque cellule de la colonne A feuille "sheet" si la cellule est = name1 soit l'emetteur 1 choisi alors
    'la cellule de la colonne B (même ligne) correspond à la maturité 1 (x1)
    ' ainsi on defini toutes les maturités disponibles (x1) pour l issuer 1 (name1)
     
    For Each cells1 In Worksheets("sheet").Range("a3:a" & Worksheets("sheet").Range("a300").End(xlUp).Row)
    If cells1.Value = name1 Then
    x1 = cells1.Offset(0, 1).Value
     
    For Each cells2 In Worksheets("sheet").Range("a3:a" & Worksheets("sheet").Range("a300").End(xlUp).Row)
    If cells2.Value = name2 Then
    x2 = cells2.Offset(0, 1).Value
     
    For Each cells3 In Worksheets("sheet").Range("a3:a" & Worksheets("sheet").Range("a300").End(xlUp).Row)
    If cells3.Value = name3 Then
    x3 = cells3.Offset(0, 1).Value
     
    Dim i As Long
    i = 1
     
    'si les maturités disponibles pour l issuer 1, l issuer 2 et l issuer 3 sont les mêmes alors on affiche les maturités
    'communes en ligne dans le tableau
     
     
    If x1 = x2 And x2 = x3 And x1 = x3 Then
    Worksheets("Synthese").Range("C43").Offset(-2, i).Value = x1
    i = i + 1
    End If
     
    'si les maturités disponibles pour l issuer 1 et l issuer 2 sont les mêmes alors on affiche les maturités
    'communes en ligne dans le tableau
     
    If x1 = x2 Then
    Worksheets("Synthese").Range("C43").Offset(-2, i).Value = x1
    i = i + 1
    End If
     
    'si les maturités disponibles pour l issuer 2 et l issuer 3 sont les mêmes alors on affiche les maturités
    'communes en ligne dans le tableau
    If x2 = x3 Then
    Worksheets("Synthese").Range("C43").Offset(-2, i).Value = x2
    i = i + 1
    End If
     
    'si les maturités disponibles pour l issuer 1 et l issuer 3 sont les mêmes alors on affiche les maturités
    'communes en ligne dans le tableau
    If x1 = x3 Then
    Worksheets("Synthese").Range("C43").Offset(-2, i).Value = x1
    i = i + 1
    End If
     
    End If
    Next cells3
     
    End If
    Next cells2
     
    End If
    Next cells1
     
     
    End Sub
    J espère que j ai été claire... Merci encore pour ton aide.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Ce que j essaye de faire: avoir dans mon tableau de synthese, pour les 3 noms choisis (dans la colonne principale du tableau) les dates communes et disponibles dans la ligne principale du tableau pour au moins 2 des noms.
    Bonjour,

    Il est disposé comment, ton tableau ? c'est quoi, la colonne principale et la ligne principale ? Comment on repère les noms choisis ? Donne un exemple de ce que tu veux.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    l exemple en PJ
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    On n'avance pas... Donne un exemple de résultats pour les lignes 43-45.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    dans le tableau, les résultats sont des fonctions excel. je n ai pas de problème avec les résultats. Ce qui me pose problème c'est l'affichage des maturités disponibles sur la ligne 41 (ce qui ne dépend pas des résultats dans le tableau).
    C'est le même principe que ce que j ai fait dans le premier tableau, où il faut cliquer sur la cellule C28, choisir le nom de l'émetteur et cliquer sur le bouton "generate spread" pour avoir les maturités sur la ligne 26

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Essaie 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
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub CommandButton4_Click()
        'Réf Camad.xls
        Dim c As Range, Ctr As Integer, Col As Integer, Plage As Range
     
        Worksheets("Synthese").Select
        Col = 4
        With Sheets("sheet")
            .[E:F].ClearContents
     
            Ctr = 0
            For Each c In .Range(.[A3], .cells(.Rows.Count, 1).End(xlUp))
                If c.Value = cells(43, 3) Or c.Value = cells(44, 3) Or c.Value = cells(45, 3) Then
                    Ctr = Ctr + 1
                    .cells(Ctr, 5) = c.Value
                    .cells(Ctr, 6) = c.Offset(, 1).Value
                End If
            Next c
            .[E:F].Sort .[F1], xlAscending, Header:=xlNo
            Set Plage = .Range(.[F1], .cells(.Rows.Count, 6).End(xlUp))
            Col = 4
            For Each c In Plage
                If Application.CountIf(Plage, c.Value) > 2 And _
                Application.CountIf([D41:N41], c.Value) = 0 Then
                    cells(41, Col) = c.Value
                    Col = Col + 1
                End If
            Next c
        End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci bcp Daniel, ce code me permet effectivement d obtenir toutes les maturités disponibles pour les 3 noms.
    Mon problème était d'afficher sur la ligne 41 du tableau les maturités qui sont communes a au moins 2 des 3 noms.

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    il suffit de replacer la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Application.CountIf(Plage, c.Value) > 2 And _
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Application.CountIf(Plage, c.Value) > 1 And _
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    super! ca marche!!!
    Je suis désolée, je ne comprend pas très bien le code que tu m'as donné par contre.
    Dans mon fichier original, j ai 4 noms et pas 3 à choisir et dans la feuille "sheet" où sont mes données, les colonnes D à H sont occupées par d'autres données qui me servent pour les résultats du tableau.

    Peux tu stp me dire ce que je dois modifier dans le code pour que les noms et maturités ne s'affichent pas à cet endroit?

    Merci bcp pour ton aide, c'est vraiment génial!

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    J'ai commenté la macro; j'utilise les colonnes J et K temporairement. je n'écris la date que si je l'ai trouvée 3 fois pour les 4 noms (c'est modifiable) :

    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
    Private Sub CommandButton4_Click()
        'Réf Camad.xls
        Dim c As Range, Ctr As Integer, Col As Integer, Plage As Range
     
        Worksheets("Synthese").Select
        'la variable Col renseigne la colonne en écriture
        Col = 4
        With Sheets("sheet")
            'colonnes utilisées pour trier les données sélectionnées
            .[J:K].ClearContents
            Ctr = 0
            'boucle sur la colonne A de la feuille sheet
            For Each c In .Range(.[A3], .cells(.Rows.Count, 1).End(xlUp))
                'si la valeur est égale à l'une des 4 noms de la feuille Synthese
                If c.Value = cells(43, 3) Or c.Value = cells(44, 3) Or c.Value = cells(45, 3) _
                 Or c.Value = cells(46, 3) Then
                    Ctr = Ctr + 1
                    'on écrit les valeurs en colonne J et K
                    .cells(Ctr, 10) = c.Value
                    .cells(Ctr, 11) = c.Offset(, 1).Value
                End If
            Next c
            'on trie la colonne K (date)
            .[J:K].Sort .[K1], xlAscending, Header:=xlNo
            Set Plage = .Range(.[K1], .cells(.Rows.Count, 11).End(xlUp))
            Col = 4
            'on parcourt la colonne K
            For Each c In Plage
                's'il y a plus de deux fois la même date
                'et que la date n'a pas été déjà recopiée
                If Application.CountIf(Plage, c.Value) > 2 And _
                Application.CountIf([D41:N41], c.Value) = 0 Then
                    'on écrit la date en ligne 1
                    cells(41, Col) = c.Value
                    Col = Col + 1
                End If
            Next c
            .[J:K].ClearContents
        End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  13. #13
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    merciiii !!!!
    You are THE best!

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/11/2014, 17h16
  2. Remplacer les X des lignes par le nom de Colonne
    Par progscoubi dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 06/03/2014, 11h40
  3. Réponses: 2
    Dernier message: 12/01/2009, 11h27
  4. Réponses: 1
    Dernier message: 06/03/2007, 10h55
  5. Qui donne les droits d'accès ?
    Par cqfd55com dans le forum Access
    Réponses: 8
    Dernier message: 31/05/2006, 13h52

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