XL 2013 vba

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

  • Générateur de calque.xls
    144.5 KB · Affichages: 10

Ayari69700

XLDnaute Nouveau
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
 

Dranreb

XLDnaute Barbatruc
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
 

Ayari69700

XLDnaute Nouveau
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

  • Générateur de calque.xls
    171.5 KB · Affichages: 2

job75

XLDnaute Barbatruc
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

  • Générateur de calque(1).xls
    179 KB · Affichages: 5

job75

XLDnaute Barbatruc
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

  • Générateur de calque(2).xls
    179 KB · Affichages: 1

Ayari69700

XLDnaute Nouveau
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
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 100
Membres
103 116
dernier inscrit
kutobi87