Fusion intelligentes de tableaux VBA
Ilm17
Messages postés
29
Date d'inscription
Statut
Membre
Dernière intervention
-
Ilm17 Messages postés 29 Date d'inscription Statut Membre Dernière intervention -
Ilm17 Messages postés 29 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un petit souci avec mon programme VBA ci-dessous. J'ai trois feuilles ; voir classeur Excel ci-joint. J'ai dans la feuille 1 en colonne 1 des éléments A par exemple, qui prennent des valeurs sur les colonnes suivantes et une feuille2 où j'ai en colonne 1 ces mêmes éléments A avec dans la colonne 2 un élément correspondant à chaque A.
L'objectif est dans une feuille3 de copier pour un élément A de la feuille 1 la ligne correspondante en lui ajoutant les éléments de la colonne 2 de la feuille 2 correspondant, cela autant de fois qu'il y'a d'élément pour A sur cette colonne (voir feuille Excel).
J'obtient avec le code ci-dessous une boucl infinie. Avant de le modifier j'obtenais que la première ligne. Je suis un peu perdu étant débutant VBA.
Le fichier excel avec les trois feuilles en exemple: https://www.cjoint.com/?DFfl5P37EXq
Code VBA:
Sub Macro1()
Set t1 = ActiveWorkbook.Worksheets("feuilleT1")
Set T2 = Worksheets("feuilleT2")
Set T3 = Worksheets("feuilleT3")
T3.Cells.Delete Shift:=xlUp
Dim tab100(1, 1 To 50)
Dim if1_l As Integer, if1_c As Integer
Dim if2_l As Integer, if2_c As Integer, if3_c As Integer, if3_l As Integer
Dim it1_l As Integer, it1_c As Integer, if1_c_buf As Integer
Dim t100(1 To 100, 1)
Dim rup_blc_tb
'Initialisation
if2_l = 1
if1_l = 1
it1_l = 1
rup_blc_t1 = 0
if3_l = 1
if1_c_buf = 1
nbcle2 = 0
nbcle1 = 0
'Stockage dans le tableau t100 des valeurs de la feuillle 2 à ajouter aux lignes des la feuille 1 dans la feuille 3
Do While t1.Cells(if1_l, if1_c_buf).Value <> ""
Do While T2.Cells(if2_l, 1).Value <> "" And rup_blc_t1 = 0
If t1.Cells(if1_l, 1).Value = T2.Cells(if2_l, 1).Value Then
t100(it1_l, 1) = T2.Cells(if2_l, 2).Value
it1_l = it1_l + 1
End If
if2_l = if2_l + 1
Loop
it1_l = 1
'Remplissage de la feuille 3
' Remplissage en ligne de la feuille 3 avec les éléments de la feuille 1
Do While t100(it1_l, 1) <> ""
Do While t1.Cells(if1_l, if1_c_buf) <> ""
T3.Cells(it1_l + nbcle2, if1_c_buf).Value = t1.Cells(if1_l, if1_c_buf).Value
if1_c_buf = if1_c_buf + 1
nbcle1 = if1_c_buf
nbcle2 = it1_l + nbcle2
Loop
it1_l = itl_1 + 1
Loop
it1_l = 1
if1_c_buf = 1
' Remplissage de la colonne à fusionné stockée dans le tableau t100
Do While t100(it1_l, 1) <> ""
T3.Cells(it1_l, nbcle1).Value = t100(it1_l, 1)
it1_l = it1_l + 1
Loop
rup_blc_t1 = 1
' Reset Tableau
it1_l = 1
Do While t100(it1_l, 1) <> ""
t100(it1_l, 1) = ""
itl_l = itl + 1
Loop
' Fin reset tableau
if1_l = if1_l + 1
Loop
End Sub
J'ai un petit souci avec mon programme VBA ci-dessous. J'ai trois feuilles ; voir classeur Excel ci-joint. J'ai dans la feuille 1 en colonne 1 des éléments A par exemple, qui prennent des valeurs sur les colonnes suivantes et une feuille2 où j'ai en colonne 1 ces mêmes éléments A avec dans la colonne 2 un élément correspondant à chaque A.
L'objectif est dans une feuille3 de copier pour un élément A de la feuille 1 la ligne correspondante en lui ajoutant les éléments de la colonne 2 de la feuille 2 correspondant, cela autant de fois qu'il y'a d'élément pour A sur cette colonne (voir feuille Excel).
J'obtient avec le code ci-dessous une boucl infinie. Avant de le modifier j'obtenais que la première ligne. Je suis un peu perdu étant débutant VBA.
Le fichier excel avec les trois feuilles en exemple: https://www.cjoint.com/?DFfl5P37EXq
Code VBA:
Sub Macro1()
Set t1 = ActiveWorkbook.Worksheets("feuilleT1")
Set T2 = Worksheets("feuilleT2")
Set T3 = Worksheets("feuilleT3")
T3.Cells.Delete Shift:=xlUp
Dim tab100(1, 1 To 50)
Dim if1_l As Integer, if1_c As Integer
Dim if2_l As Integer, if2_c As Integer, if3_c As Integer, if3_l As Integer
Dim it1_l As Integer, it1_c As Integer, if1_c_buf As Integer
Dim t100(1 To 100, 1)
Dim rup_blc_tb
'Initialisation
if2_l = 1
if1_l = 1
it1_l = 1
rup_blc_t1 = 0
if3_l = 1
if1_c_buf = 1
nbcle2 = 0
nbcle1 = 0
'Stockage dans le tableau t100 des valeurs de la feuillle 2 à ajouter aux lignes des la feuille 1 dans la feuille 3
Do While t1.Cells(if1_l, if1_c_buf).Value <> ""
Do While T2.Cells(if2_l, 1).Value <> "" And rup_blc_t1 = 0
If t1.Cells(if1_l, 1).Value = T2.Cells(if2_l, 1).Value Then
t100(it1_l, 1) = T2.Cells(if2_l, 2).Value
it1_l = it1_l + 1
End If
if2_l = if2_l + 1
Loop
it1_l = 1
'Remplissage de la feuille 3
' Remplissage en ligne de la feuille 3 avec les éléments de la feuille 1
Do While t100(it1_l, 1) <> ""
Do While t1.Cells(if1_l, if1_c_buf) <> ""
T3.Cells(it1_l + nbcle2, if1_c_buf).Value = t1.Cells(if1_l, if1_c_buf).Value
if1_c_buf = if1_c_buf + 1
nbcle1 = if1_c_buf
nbcle2 = it1_l + nbcle2
Loop
it1_l = itl_1 + 1
Loop
it1_l = 1
if1_c_buf = 1
' Remplissage de la colonne à fusionné stockée dans le tableau t100
Do While t100(it1_l, 1) <> ""
T3.Cells(it1_l, nbcle1).Value = t100(it1_l, 1)
it1_l = it1_l + 1
Loop
rup_blc_t1 = 1
' Reset Tableau
it1_l = 1
Do While t100(it1_l, 1) <> ""
t100(it1_l, 1) = ""
itl_l = itl + 1
Loop
' Fin reset tableau
if1_l = if1_l + 1
Loop
End Sub
A voir également:
- Fusion intelligentes de tableaux VBA
- Fusionner deux tableaux excel - Guide
- Display fusion - Télécharger - Divers Utilitaires
- Tableaux croisés dynamiques - Guide
- Barbara veut calculer automatiquement son budget dans un tableau. citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur). ✓ - Forum Excel
- Incompatibilité de type vba ✓ - Forum VB / VBA
3 réponses
Bonjour
à La,ligne 49 du code tu as un problème avec l'incrémentation tu as écrit :
it1_l = itl_1 + 1
Mais ça fait toujours que une seule ligne :)
*Pensez mettre vos messages en [Résolu] et cliquer sur le + des conseil qui vous ont été utils"
à La,ligne 49 du code tu as un problème avec l'incrémentation tu as écrit :
it1_l = itl_1 + 1
Mais ça fait toujours que une seule ligne :)
*Pensez mettre vos messages en [Résolu] et cliquer sur le + des conseil qui vous ont été utils"
Ilm17
Messages postés
29
Date d'inscription
Statut
Membre
Dernière intervention
1
Je l'ai modifié merci bien, mais il plante toujours
skk201
Messages postés
942
Date d'inscription
Statut
Membre
Dernière intervention
54
C'est quoi ton but ?
Ilm17
Messages postés
29
Date d'inscription
Statut
Membre
Dernière intervention
1
excuse moi, il ne plante plus
Ilm17
Messages postés
29
Date d'inscription
Statut
Membre
Dernière intervention
1
mais la grande boucle ne fonctionne pas! Elle tourne une fois et la copie des ligne de la feuille 1 se fait une seule fois
skk201
Messages postés
942
Date d'inscription
Statut
Membre
Dernière intervention
54
c'est laquel la grande boucle ?
DOUBLON !!!!! :-((((
au passage, Bonjour à Skk201
Voir proposition sur cette discussion
https://forums.commentcamarche.net/forum/affich-30318607-fusion-intelligentes-de-tableaux#p30322852
Ilm17 mis sur ma blacklist...
au passage, Bonjour à Skk201
Voir proposition sur cette discussion
https://forums.commentcamarche.net/forum/affich-30318607-fusion-intelligentes-de-tableaux#p30322852
Ilm17 mis sur ma blacklist...
Bonjour Michel_m,
Je ne sais pas pourquoi tu le prend ainsi? Si j'ai fait cela c'est parce que je suis nouveau sur ce forum(mon profil) et sur le premier sujet il n'apparaissait pas VBA dans mon intitulé, et je n'arrivais pas à le modifier raison pour laquelle j'ai recréer un nouveau sujet. Je pensait qu'avec VBA dans l'intitulé du sujet j'aurais eu mieux de visibilité! Mais finalement j'ai eu des interventions sur les deux sujets malgré que l'un ne comportait pas le mot VBA. Donc j'ai continuer à communiquer sur les deux sujet!
Aussi franchement je vois pas l'intéret que j'aurais à créer deux sujets pour une quelconque raison perverse! Et je ne voit pas l'intéret que vous porter à faire ce que vous faites!
En tout cas cette démarche était tout à fait innocente, si vous le prennait mal je m'en excuse! Avec mes salutations les plus respectueuses
Je ne sais pas pourquoi tu le prend ainsi? Si j'ai fait cela c'est parce que je suis nouveau sur ce forum(mon profil) et sur le premier sujet il n'apparaissait pas VBA dans mon intitulé, et je n'arrivais pas à le modifier raison pour laquelle j'ai recréer un nouveau sujet. Je pensait qu'avec VBA dans l'intitulé du sujet j'aurais eu mieux de visibilité! Mais finalement j'ai eu des interventions sur les deux sujets malgré que l'un ne comportait pas le mot VBA. Donc j'ai continuer à communiquer sur les deux sujet!
Aussi franchement je vois pas l'intéret que j'aurais à créer deux sujets pour une quelconque raison perverse! Et je ne voit pas l'intéret que vous porter à faire ce que vous faites!
En tout cas cette démarche était tout à fait innocente, si vous le prennait mal je m'en excuse! Avec mes salutations les plus respectueuses