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 :

Macro qui concatene des colonnes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Freelancer
    Inscrit en
    Février 2017
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Freelancer

    Informations forums :
    Inscription : Février 2017
    Messages : 40
    Par défaut Macro qui concatene des colonnes
    Bonjour a tous,

    Je n arrive pas a faire cette macro et j ai des difficultés a exprimer ce dont j ai besoin, alors ca ne va pas etre simple
    Je pense qu un excemple va etre plus parlant:
    A	1	+		A1+
    B	2	-		A1-
    C	3			A2+
    D				A2+
    				A2-
    				A3+
    				A3-
    				B1+
    				B2-
    				etc…
    J ai 3 colonnes qui se concatenent avec TOUTES les possibilities. Le resultat est la 4 eme colonne.
    Donc dans mon exemple j ai 4 x 3 x 2 = 24 possibilitités.

    L'ideal c est que la macro fonctionne avec n importe quelle nombre de choix en colone A et B. Et qu elle ignore si il y a une colone si elle est vide.
    Mais il y a toujours 3 colonnes de départ.

    N hesitez pas a me poser des questions.

    Merci encore

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    et j ai des difficultés a exprimer ce dont j ai besoin
    est assez inquiétant car comment pourrait-on raisonnablement coder (dans un langage rigoureux) ce que l'on ne saurait penser et exprimer clairement dans un langage naturel ?
    Je n'ai personnellement à ce point rien compris à ce que tu as "exposé", que je ne sais même pas quelle question je pourrais te poser pour y voir clair

  3. #3
    Membre averti
    Homme Profil pro
    Freelancer
    Inscrit en
    Février 2017
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Freelancer

    Informations forums :
    Inscription : Février 2017
    Messages : 40
    Par défaut
    Voici en langage excel ce que je souhaite avoir dans une colonne :
    =IF(ROW()-ROW($F$1)+1>COUNTA(A:A)*COUNTA(B:B),"",INDEX(A:A,INT((ROW()-ROW($F$1))/COUNTA(B:B)+1))&INDEX(B:B,MOD(ROW()-ROW($F$1),COUNTA(B:B))+1))

    En gros, ca concatene tous les choix possible de la colonne A et B comme ceci :
    Nom : Screen Shot 2017-02-08 at 11.00.48 AM.png
Affichages : 108
Taille : 9,0 Ko

    mais la difference, c est que cette formule ne fait que 2 colonnes. (et moi j ai besoin de 2, 3 ou 4 colonnes...)
    Je pense que le VBA ca serait plus efficace pour faire ca, car la feuille sera moins lourde.

    J espere etre plus clair

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour,
    Avec autant de boucle for que de colonne tu devrais t'en sortir facilement, l'opérateur de concaténation est : &
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cells(1,3)= cells(1,1) & cells(1,2)

  5. #5
    Membre expérimenté
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Par défaut
    Bonjour,

    Voici une aide à la création de votre 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
     
    Public Sub AjoutInfo()
    'Variables
    Dim compteur As Integer
    compteur = 1
     
    'On trouve la dernière ligne de la colonne A, il faut encore le faire pour la colonne B je vous laisse faire
    derniereLigneColA = Range("A" & Rows.Count).End(xlUp).Row
     
    'Pour chaque ligne de 1 à la derniere ligne de la colonne A
    For selectionligneColA = 1 To derniereLigneColA
     'Pour chaque ligne de 1 à la dernière ligne de la colonne B, je vous laisse là encore faire le code
     
    'Ici je me place dans la ligne 1, colonne 5 lors du premier passage de boucle
     Cells(compteur, 5) = Cells(selectionligneColA, 1) & Cells(selectionlignecolB, 2) 'voici la concaténation
     
     compteur = compteur + 1 'j'incrémente le compteur pour avancer d'une ligne
     
    'on passe à la ligne suivante de la colonne B
     
    Next selectionligneColA 'on passe a  la ligne suivante de la colonne A pour refaire chaque ligne de la colonne B
     
     
     
    End Sub
    Voilà ça + le message de halaster tu devrais t'en sortir, comme il le dit : si tu as 5 colonnes tu as 5 boucles FOR.
    Il reste du code la solution n'est pas clef en main

  6. #6
    Membre averti
    Homme Profil pro
    Freelancer
    Inscrit en
    Février 2017
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Freelancer

    Informations forums :
    Inscription : Février 2017
    Messages : 40
    Par défaut solution
    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
    Sub Combos()
    Dim Element(), Index()
    Dim MyCols As Variant, MySheet As Worksheet, OneCol As Boolean
    Dim r As Long, c As Long, ctr As Long, mysize As Long
    Dim delim As String, OutputCol As String, str1 As String
     
    ' Set up conditions
        Set MySheet = Sheets("Sheet1")
        MyCols = Array("A", "B", "C")
        OutputCol = "F"
        OneCol = True
        delim = ""
     
    ' resize the arrays
        ReDim Element(255, UBound(MyCols))
        ReDim Index(UBound(MyCols))
     
    ' Read the elements
        For c = 0 To UBound(MyCols)
            Element(0, c) = 0
            Index(c) = 1
            For r = 1 To 255
                If MySheet.Cells(r, MyCols(c)) <> "" Then
                    Element(0, c) = Element(0, c) + 1
                    Element(Element(0, c), c) = MySheet.Cells(r, MyCols(c))
                End If
            Next r
        Next c
     
    ' Clear the output columns(s), and check for the number of results
        ctr = MySheet.Cells(1, OutputCol).Column
        mysize = 1
        For c = 0 To UBound(MyCols)
            mysize = mysize * Element(0, c)
            MySheet.Columns(ctr).ClearContents
            ctr = ctr + 1
        Next c
        If mysize > 1000000 Then
            MsgBox "The number of results is too big to handle!"
            Exit Sub
        End If
     
        ctr = 0
     
    ' Start creating combinations
    Loop1:
        ctr = ctr + 1
        str1 = ""
        Set resultcell = MySheet.Cells(ctr, OutputCol)
        For c = 0 To UBound(MyCols)
            If OneCol Then
                str1 = str1 & Element(Index(c), c) & delim
            Else
                resultcell.Value = Element(Index(c), c)
                Set resultcell = resultcell.Offset(0, 1)
            End If
        Next c
        If OneCol Then MySheet.Cells(ctr, OutputCol) = Left(str1, Len(str1) - Len(delim))
     
    ' Increment the indices
        For c = 0 To UBound(MyCols)
            Index(c) = Index(c) + 1
            If Index(c) <= Element(0, c) Then Exit For
            Index(c) = 1
        Next c
        If c <= UBound(MyCols) Then GoTo Loop1:
     
    End Sub

  7. #7
    Membre expérimenté
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Par défaut
    Solution.... pourquoi chercher par soit même et apprendre, quand un C/C fonctionne. Le Goto c'est l'avenir.

    A+

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

Discussions similaires

  1. Macro qui sélectionne des colonnes spécifiques
    Par nyto35 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/04/2013, 15h41
  2. [WD-2007] Créer une macro qui rempli des etiquettes automatiquement
    Par damienedme dans le forum VBA Word
    Réponses: 1
    Dernier message: 03/09/2009, 12h03
  3. [access] concatener des colonnes d'une même table
    Par lili1985 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 12/07/2008, 22h23
  4. Macro qui teste la colonne ou se trouve le bouton ?
    Par Drvibe dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/02/2008, 21h01

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