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 :

Question autour de la propriete Dictionnary et code de bbil [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    controleur de gestion
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : controleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Points : 60
    Points
    60
    Par défaut Question autour de la propriete Dictionnary et code de bbil
    bonjour a tous,

    Je suis pas sur d'avoir compris l'usage de dictionary .

    je cherche a utiliser la reponse de bblil a cette discussion,
    http://www.developpez.net/forums/d13...l/#post8171880

    Rappel du code de bbil:
    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
    Option Explicit
     
    'A jouter la référence à microsoft Scripting Runtiome
     
    Sub FusionFeuilles()
        Dim sh1 As Worksheet
        Dim sh2 As Worksheet
        Dim sh3 As Worksheet
    Dim mDico As New Dictionary
     
    Set sh1 = ThisWorkbook.Sheets("Feuil1")
    Set sh2 = ThisWorkbook.Sheets("Feuil2")
    Set sh3 = ThisWorkbook.Sheets("Feuil3")
    Dim i As Integer
     
    'Lecture feuille
    i = 2 'Ligne 1 = Titre
    While sh1.Cells(i, 1) <> ""
      If Not mDico.Exists(sh1.Cells(i, 1).Text) Then
        'Cas ou n'existe pas créé l'enregistrement
        mDico.Add sh1.Cells(i, 1).Text, sh1.Cells(i, 2).text
       Else
        'Cas ou existe déjà Incrémente
        mDico(sh1.Cells(i, 1).Text) = mDico(sh1.Cells(i, 1).Text) + sh1.Cells(i, 2).Text
      End If
     i = i + 1 'Ligne suivante
    Wend
    i = 2 'Ligne 1 = Titre
    While sh2.Cells(i, 1) <> ""
      If Not mDico.Exists(sh2.Cells(i, 1).Text) Then
        'Cas ou n'existe pas créé l'enregistrement
        mDico.Add sh2.Cells(i, 1).Text, sh2.Cells(i, 2)
       Else
        'Cas ou existe déjà Incrémente
        mDico(sh2.Cells(i, 1).Text) = mDico(sh2.Cells(i, 1).Text) + sh2.Cells(i, 2).Text
      End If
     i = i + 1 'Ligne suivante
    Wend
     
     
     sh3.Cells(1, 1) = sh1.Cells(1, 1) 'Copy entête
     sh3.Cells(1, 2) = sh1.Cells(1, 2)
     For i = 0 To mDico.Count - 1
        sh3.Cells(i + 2, 1) = mDico.Keys(i) 'Récupére Nom
        sh3.Cells(i + 2, 2) = mDico.Items(i) 'Récupére nombre
     
     
     Next
     
     End Sub

    Seulement je voudrais renvoyer toutes les colonnes qui suivent la cle,


    Est-il possible de definir une plage puis de l'attribuer a dictionary comme item?
    Autre question: dans le cas ou la cle existe dans la feuille 3 (resultat de la fusion), je ne comprend pas si on remplace par le nouvelle donnee (ce que je souhaite) ou maintien la ligne original


    merci de vos reponses

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Est-il possible de definir une plage puis de l'attribuer a dictionary comme item?
    Oui, tu peux mais de prime abords, je n'en vois pas l'intérêt ?
    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
     
    Sub MonDico()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim Dico As Object
        Dim Cle As Variant
        Dim CleRange As Range
     
        'crée l'objet Dictionnaire
        Set Dico = CreateObject("Scripting.Dictionary")
     
        'défini la plage sur la colonne A de la feuille "Feuil1"
        With Worksheets("Feuil1")
     
            Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
        End With
     
        For Each Cel In Plage
     
            'crée une plage de la cellule colonne A à la cellule colonne D
            Set CleRange = Union(Cel, Cel.Offset(, 3))
     
            If Dico.exists(CleRange) = False Then
     
                Dico.Add CleRange, CleRange
     
     
            End If
     
        Next Cel
     
        'résultat dans la fenêtre d'exécution
        For Each Cle In Dico.Keys
     
            Debug.Print Dico(Cle).Address
     
        Next Cle
     
    End Sub
    Autre question: dans le cas ou la cle existe dans la feuille 3 (resultat de la fusion), je ne comprend pas si on remplace par le nouvelle donnee (ce que je souhaite) ou maintien la ligne original
    Rien compris à ta demande !

    Hervé.

  3. #3
    Membre du Club
    Femme Profil pro
    controleur de gestion
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : controleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Points : 60
    Points
    60
    Par défaut
    merci de ta reponde Theze
    pour le reste, je le reconnais c'est mal enonce mais j'ai trouve ma reponse donc resolu

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

Discussions similaires

  1. Questions autours du pathfinding
    Par valefor dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 25/07/2007, 19h41
  2. [CPUID] Questions autour du CPU
    Par secretman dans le forum Delphi
    Réponses: 1
    Dernier message: 09/06/2007, 13h00
  3. Trois questions autour de Windows Server
    Par Kain94 dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 07/08/2006, 10h32
  4. [JSF] Questions autour des servlets
    Par maximus001ma dans le forum JSF
    Réponses: 4
    Dernier message: 25/07/2006, 13h27
  5. [Conception] Question: Gestion Incrementation via SQL ou VIA Code PHP ???
    Par ronio dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/02/2006, 13h59

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