Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Ayari69700

XLDnaute Nouveau
Bonjour à tous,

Récent utilisateur du vba, je patine un peu sur un sujet:

Je souhaiterais concaténer les valeur dans la colonne "I" et "M" pour afficher le résultat de la concaténation dans la colonne "N".

J'aurais souhaité avoir toutes les combinaisons possibles soit :

I8 & M1 = résultat sans N1
I8 & M2 = résultat sans N2
I8 & M3 = résultat sans N3

I9 & M1 = résultat sans N4
I9 & M2 = résultat sans N5
I9 & M3 = résultat sans N6

I10 & M1 = résultat sans N7
I10 & M2 = résultat sans N8
I10 & M3 = résultat sans N9

J'aurais voulu pouvoir incrémenter des lignes supplémentaires pour avoir encore plus de combinaisons

Merci beaucoup par avance
 

Pièces jointes

Bonjour,

dsl mais la réponse ne marche pas.

Quelqu’un pourrait m'aider pour concaténer le texte de la colonne "I" et "M" pour afficher le résultat de la concaténation dans la colonne "N".

J'aurais souhaité avoir toutes les combinaisons possibles soit :

I8 & M1 = résultat dans N1
I8 & M2 = résultat dans N2
I8 & M3 = résultat dans N3

I9 & M1 = résultat dans N4
I9 & M2 = résultat dans N5
I9 & M3 = résultat dans N6

I10 & M1 = résultat dans N7
I10 & M2 = résultat dans N8
I10 & M3 = résultat dans N9

svpp merci beaucoup
 
Bonjour.
Toute les plage citées étant supposées dans la feuille active au moment de l'exécution :
VB:
Sub Concat2Cols()
   Dim Rng1 As Range, Rng2 As Range, RngR As Range
   Set Rng1 = ActiveSheet.[I8:I10]
   Set Rng2 = ActiveSheet.[M1:M3]
   Set RngR = ActiveSheet.[N1].Resize(Rng1.Rows.Count * Rng2.Rows.Count)
   RngR.Formula = "=INDEX(" & Rng1.Address(True, True, xlA1, False) & ",INT((ROW()-" & RngR.Row & ")/" & Rng2.Rows.Count _
            & ")+1)&INDEX(" & Rng2.Address(True, True, xlA1, False) & ",MOD(ROW()-" & RngR.Row & "," & Rng2.Rows.Count & ")+1)"
   End Sub
 
Merci pour votre aide.

J'ai du mal a réadapter le code car il donne trop de combinaison.

Normalement il devrait donner 14 combinaisons dans la colonne résultat N car il 7 cellules en M et 2 en M...

J'ai une autre question, savez vous comment faire pour avoir des range qui s'adapte au nombre de donner ?

Merci beaucouppp
 

Pièces jointes

Bonjour à tous,

Pourquoi vouloir mettre des formules en colonne N ? A priori il suffit de concaténer :
VB:
Private Sub CommandButton2_Click()
Dim tablo, nlig&, resu$(), i&, x$, j&, n&
tablo = Intersect(UsedRange.EntireRow, [A:M])
nlig = UBound(tablo)
ReDim resu(1 To Rows.Count, 1 To 1)
For i = 3 To nlig
    x = tablo(i, 9)
    If x <> "" Then
        For j = 3 To nlig
            If tablo(j, 13) <> "" Then
                n = n + 1
                resu(n, 1) = x & "-" & tablo(j, 13) 'concaténation
            End If
        Next j
    End If
Next i
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [N3] '1ère cellule de restitition, à adapter éventuellement
    If n Then
        .Resize(n) = resu
        .Resize(n).Borders.Weight = xlThin 'bordures
    End If
    .Offset(n).Resize(Rows.Count - n - .Row + 1).Delete xlUp 'RAZ en dessous
End With
With UsedRange: End With 'ajuste la barre de défilement verticale
End Sub
A+
 

Pièces jointes

Cette macro est plus rapide grâce à derlig :
VB:
Private Sub CommandButton2_Click()
Dim tablo, derlig&, resu$(), i&, x$, j&, n&
On Error Resume Next 'si aucun tiret n'est trouvé
derlig = [I:M].Find("-", , xlValues, xlPart, xlByRows, xlPrevious).Row
tablo = Range("I1:M" & derlig) 'matrice, plus rapide
On Error GoTo 0
ReDim resu(1 To Rows.Count, 1 To 1)
For i = 3 To derlig
    x = tablo(i, 1)
    If x <> "" Then
        For j = 3 To derlig
            If tablo(j, 5) <> "" Then
                n = n + 1
                resu(n, 1) = x & "-" & tablo(j, 5) 'concaténation
            End If
        Next j
    End If
Next i
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [N3] '1ère cellule de restitition, à adapter éventuellement
    If n Then
        .Resize(n) = resu
        .Resize(n).Borders.Weight = xlThin 'bordures
    End If
    .Offset(n).Resize(Rows.Count - n - .Row + 1).Delete xlUp 'RAZ en dessous
End With
With UsedRange: End With 'ajuste la barre de défilement verticale
End Sub
Fichier (2).
 

Pièces jointes

Bonsoir,

Franchement merci mille fois, le programme est super rapide j'ai pas tout compris, je vais étudier tout ca surtout cette partie ou je nage :

Private Sub CommandButton2_Click()
Dim tablo, nlig&, resu$(), i&, x$, j&, n&
tablo = Intersect(UsedRange.EntireRow, [A:M])
nlig = UBound(tablo)
ReDim resu(1 To Rows.Count, 1 To 1)
For i = 3 To nlig
x = tablo(i, 9)
If x <> "" Then
For j = 3 To nlig
If tablo(j, 13) <> "" Then
n = n + 1


Mercii encore
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
649
Réponses
4
Affichages
1 K
Réponses
1
Affichages
6 K
P
  • Question Question
Réponses
2
Affichages
770
J
  • Question Question
Réponses
2
Affichages
1 K
J
K
  • Question Question
Réponses
3
Affichages
2 K
Retour