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 :

[E-07] Combiner des 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
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Par défaut [E-07] Combiner des données
    Salut le forum,

    je cherche une façon de combiner une liste de données.

    Supposons dans la plage A2:A7 6 données différentes.

    En établissant une valeur, je souhaite combiner les données de la façon suivante :

    Si par exemple valeur = 2 (les combinaisons se répètent deux fois)

    Données 1 - Données 2
    Données 1 - Données 2
    Données 1 - Données 3
    Données 1 - Données 3
    ...
    Données 5 - Données 6
    Données 5 - Données 6

    Je suppose qu'en combinant des boucles, j'y parviendrais mais je n'ai pas les connaissances pour aller jusque-là.

    Merci pour votre aide.

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Voici une idée de code, à adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim ias integer, j as integer, k as integer, h as integer
    const NbRepete as integer = 2
    Const NbVal as integer = 6
     
    For i = 1 to NbVal-1
        For j = i+1 to NbVal
            for k = 1 to NbRepete
                Resultat(h+k) = Donnees(i) & Donnees(j)
            Next k
            h= h+NbRepete
        Next j
    Next i
    En espérant que cela t'aide et cordialement,

    PGZ

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Par défaut
    Salut pgz et merci à toi pour cette réponse.

    Cependant, j'ai deux questions :

    1- à quoi correspond la valeur h?
    2- dois-je définir Resultat et Donnees dans mes variables?

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Salut, cousin.


    1- à quoi correspond la valeur h?
    2- dois-je définir Resultat et Donnees dans mes variables?
    h est le numéro de ligne dans le tableau des résultats
    Donnees est le tableau des données à combiner, Resultat est le tableau des résultats

    En fait le bout de code voulait te montrer l'écriture des boucles. Dans la pratique, tes données initiales sont dans une feuille (en colonne), et tu vas certainement vouloir ranger les résultats dans une autre zone de la feuille, ou du classeur. Le nombre de répétitions devra être saisi d'une façon ou d'une autre.

    Voici maintenant une procédure complète
    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
    Sub subCombine(ByRef RngDonnees As Excel.Range, ByRef rngResult As Excel.Range, ByVal NbRepete As Integer)
    Dim i As Long, j As Long, k As Integer, h As Long 'variables des boucles
    Dim varD As Variant, NbVal As Long, Result()  As String, NbResult As Long
     
    'chargement des données
    varD = RngDonnees.Value
     
    'nombre de valeurs, nombre de combinaisons, redimensionnement du tableau de résultats
    NbVal = UBound(varD) - LBound(varD) + 1
    NbResult = NbVal * (NbVal - 1) * NbRepete
    ReDim Result(1 To NbVal * (NbVal - 1) * NbRepete, 1 To 1)
     
    'initialisation (inutile, juste pour la clarté) de h
    h = 0
     
    'élaboration des combinaisons
    For i = 1 To NbVal - 1
        For j = i + 1 To NbVal
            For k = 1 To NbRepete
                Result(h + k, 1) = varD(i, 1) & " - " & varD(j, 1)
            Next k
            h = h + NbRepete
        Next j
    Next i
     
    'rangement du résultat
    rngResult.Worksheet.Range(rngResult.Cells(1, 1), rngResult.Cells(1, 1).Offset(NbResult - 1, 0)) = Result
     
    End Sub
    Pour utiliser cette procédure il faut choisir la zone des données, la zone de rangement du résultat (il suffit de désigner 1 cellule et les résultats se rangent à partir de cette cellule et vers le bas) et le nombre de répétitions. Par exemple A2:A7, résultats à partir de B3, répétitions = 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub subEssaisubCombine()
    Call subCombine(Application.ThisWorkbook.Sheets(1).Range("A2:A7"), Application.ThisWorkbook.Sheets(1).Range("B3"), 2)
    End Sub
    Cordialement,

    PGZ

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Par défaut
    Merci pour ton aide.

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

Discussions similaires

  1. [CR7]Actualisation des données depuis VB
    Par elifqaoui dans le forum SDK
    Réponses: 4
    Dernier message: 24/11/2003, 13h44
  2. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 17h44
  3. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  4. Structure des données en retour d'un DBExtract ?
    Par mikouts dans le forum XMLRAD
    Réponses: 4
    Dernier message: 24/01/2003, 15h15
  5. Réponses: 2
    Dernier message: 18/12/2002, 10h30

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