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 :

Concaténer via macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut Concaténer via macro
    Hello le Forum,

    Je souhaite concatener la colonne A et B sans la colonne C.

    J'ai fait (une de mes premières svp indulgence) une macro, mais je ne sais pas pourquoi ça ne joue pas ou alors je suis à côté de la plaque

    Voyez le fichier joint, les explications dedans sont plus claires je crois.

    Si toutefois vous ne parvenez pas à prendre le fichier joint (ça m'arrive parfois dans ce forum) le code de ma macro est
    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
    Sub ConcatenerColonneAetB()
    Dim Noms As Range
    Dim Prenoms As Range
    Dim Conc As Range
     
    Sheets(1).Activate
     
    For Each Prenoms In Range("B2:B" & Range("B65536").End(xlUp).Row)
    Next Prenoms
     
    For Each Conc In Range("C2:C" & Range("C65536").End(xlUp).Row)
    Next Conc
     
    For Each Noms In Range("A2:A" & Range("A65536").End(xlUp).Row)
        If Noms.Value <> "" And Prenoms.Value <> "" Then
            Conc.Value = Noms.Value & " - " & Prenoms.Value
        End If
    Next Noms
    Range("A2").Select
    End Sub
    et le code dont j'aimerais que ma macro fasse le même résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Macro1()
        Range("C2").Select
        ActiveCell.FormulaR1C1 = "=RC[-2]& "" - "" &RC[-1]"
        Selection.AutoFill Destination:=Range("C2:C11"), Type:=xlFillDefault
        Calculate
        Range("A2").Select
    End Sub
    Si un génie pouvait m'aider, par avance un grand merci.

    Cdt, Anto.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Est-ce que cela vous conviendrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub ConcatenerColonneAetB()
    Sheets(1).Activate
    dl = Range("A65536").End(xlUp).Row
    For i = 2 To dl
    Cells(i, 3) = Cells(i, 1) & Cells(i, 2)
    Next i
    Range("A2").Select
    End Sub
    Bien sûr vous pouvez affecter les valeurs à des variables, mais dans ce cas ce n'est pas nécessaire et en tout cas pas obligatoire.

    Si vous avez des cellules non remplies dans la plage vous pouvez utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub ConcatenerColonneAetB()
    Sheets(1).Activate
    dl = Range("A65536").End(xlUp).Row
    For i = 2 To dl
       If Cells(i, 1) <> "" and Cells(i, 2) <> "" then
       Cells(i, 3) = Cells(i, 1) & Cells(i, 2)
       end If
    Next i
    Range("A2").Select
    End Sub

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Antoniom et le forum
    Je souhaite concatener la colonne A et B sans la colonne C.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each Prenoms In Range("B2:B" & Range("B65536").End(xlUp).Row)
    Next Prenoms
    Pour chaque cellule(qui prendra le nom de variable "Prenoms") de la colonne B de ligne 2 à dernière
    cellule suivante
    Belle boucle, mais elle ne fait rien
    Une proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub ConcatenerColonneAetB()
    Dim Cel As Range
    For Each Cel In Range("A2:A" & Range("A65536").End(xlUp).Row)
        If Cel <> "" And Cel.Offset(0, 1) <> "" Then _
           Cel.Offset(0, 2) = Cel & " - " & Cel.Offset(0, 1)
    Next Cel
    End Sub
    A+

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Hello,

    Hm j'étais aux fraises quoi

    Impeccable Jean-Jaques et Gorfael, les deux méthodes (même trois) sont excellentes !

    Un grand merci.

    Cdt, Hulk.

  5. #5
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour Antoniom jacques_jean Gorfael le forum

    en modifiant ta macro1 une autre possibilite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Macro1()
    [c2].Select: ActiveCell.FormulaR1C1 = "=RC[-2]& "" - "" &RC[-1]"
    Range("c2:c" & Cells.Find("*", , , , , xlPrevious).Row).FillDown: [a2].Select
    End Sub

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Re,

    Ok Laetitia merci, pas mal aussi, j'y classe dans mon tiroir

    Merci et au plaisir.

    Bon WE à tous, Anto.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Hello le Forum,

    Je reviens là dessus, car suite aux solutions trouvées hier, j'ai encore une petite question.

    J'ai finalement opté pour la solution à Gorfael et j'espère que vous ne m'en voudrez pas Laetitia et Jean-Jaques.

    Donc à partir du code à Gorfael, comment puis-je faire pour que tout (lettres, chiffres, caractères) ce qui se trouve à gauche du tiret soit en rouge, et tout ce qui se trouve à droite du tiret en vert.

    Exemples :

    tutu - ssdd

    ou

    Reft%&343 - fgt

    ou

    lsd233l - 345

    Bref, tout ce qui est à gauche du tiret en rouge et tout ce qui est à droite du tiret en vert... Possible ça ?

    J'ai bien essayé avec les Right et Len, mais je ne connais pas vraiment ces fonctions en vba.. Quelqu'un peut-il m'aider svp.

    Par avance merci.

    Bon dimanche, Antoniom.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Antoniom et fle forum
    Texte en A1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Macro1()
    'Déclaration ===============
    Dim X As Long
    'Recherche séparateur ======
    X = InStr([A1], "-")
    'colorage ==================
    [A1].Characters(Start:=1, Length:=X).Font.ColorIndex = 3
    [A1].Characters(Start:=X, Length:=Len([A1]) + 1 - X).Font.ColorIndex = 43
    End Sub
    C'est du brut : faudrait vérifier la présence du tiret avant de colorier, mais ça donne le principe
    A+

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Re,

    Trop fort Gorfael et merci !

    Donc avec ce que tu m'as fourni j'ai finalement modifié, ou plutôt adapter la macro comme ci-dessous.
    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
    Sub ConcatenerColonneAetB()
     
    Dim X As Long
     
    For Each c In Range("A1:A" & Range("A65536").End(xlUp).Row)
      c.Offset(0, 2) = c & " - " & c.Offset(0, 1)
      X = InStr(c.Offset(0, 2), " -") ' Ici juste rajouter un espace avec le tiret
      c.Offset(0, 2).Characters(Start:=1, Length:=X.Font.ColorIndex = 3
      c.Offset(0, 2).Characters(Start:=X, _
      Length:=Len(c.Offset(0, 2)) + 1 - X).Font.ColorIndex = 10
    Next
     
    Range("A1").Select
     
    End Sub
    Juste, si j'ose encore "pinailler", le tiret peut-il rester en noir ?
    J'ai essayé deux-trois trucs mais en vain.

    Encore un grand merci Gorfael !

    Au plaisir, Anto.

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Re,

    Non je pinaille, c'est impec comme ça Gorfael !

    En revanche, j'ose juste te demander des explications sur cette partie du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    X = InStr(c.Offset(0, 2), " -")
    c.Offset(0, 2).Characters(Start:=1, Length:=X.Font.ColorIndex = 3
    c.Offset(0, 2).Characters(Start:=X, _
    Length:=Len(c.Offset(0, 2)) + 1 - X).Font.ColorIndex = 10
    notamment les instructions InStr, Start, Length et Len.

    je te remercie infiniment et un bon dimanche à toi et à tous !

    Cdt, Anto.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ai finalement opté pour la solution à Gorfael et j'espère que vous ne m'en voudrez pas Laetitia et Jean-Jaques.
    Aucun problème. 3 solutions valables. Tout à fait normal que vous choisissiez celle qui vous convient le mieux.

    En ce qui concerne l'explication pour InStr, Start, Length et Len, dans la fenêtre vba vous placez le curseur sur le mot puis "F1" et vous aurez l'explication.

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Hello,

    Okey merci Jean-Jaques ! Effectivement, c'est celle qui me parle le plus.

    Mais je n'ai pas mis à la poubelle vos propositions pour autant, elle sont bien au chaud

    Thanks, et encore

    Bon fin de WE.

    Anto.

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Antoniom et le forum
    InStr(C, " -")
    correspond à la formule trouve () sur une feuille Excel

    Start:= Place du premier caractère concerné
    Length:= nombre de caractères concernés

    Len(C)
    correspond à la formule NBCar().
    A+

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

Discussions similaires

  1. Concaténation de tableau via macro
    Par chtrousselle dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/10/2012, 12h46
  2. Valeur absolue de montant dans excel via macro
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/05/2007, 18h09
  3. [Excel] ComboBox - extension liste via macro
    Par Chewi dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/01/2007, 21h43
  4. Réponses: 1
    Dernier message: 26/01/2006, 17h04
  5. [VBA/Excel] Formule via macro
    Par UNi[FR] dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/10/2005, 15h11

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