A voir également:
- Comparer
- Comparer prix amazon - Guide
- Meilleur prix Amazon : payer moins cher avec Amazin'Europe - Accueil - Commerce
- Comparer pdf - Télécharger - PDF
- Audio comparer - Télécharger - Nettoyage
- Comparer samsung a15 et a16 - Accueil - Téléphones
4 réponses
Bonjour,
à ma connaissance, il n'y a pas de fonction toute prête...
Pour ce genre de problème, je pense qu'il faut travailler avec une macro-instruction.
Tu as déjà fait du VBA?
à ma connaissance, il n'y a pas de fonction toute prête...
Pour ce genre de problème, je pense qu'il faut travailler avec une macro-instruction.
Tu as déjà fait du VBA?
Bonjour freebike
Une fonction non, mais en rajoutant des colonnes de comptage et en associant plusieurs fonctions c'est possible :
http://www.cjoint.com/c/FBukVU3Gaob
Cdlmnt
Via
Une fonction non, mais en rajoutant des colonnes de comptage et en associant plusieurs fonctions c'est possible :
http://www.cjoint.com/c/FBukVU3Gaob
Cdlmnt
Via
Bonjour,
Via55 t' indiqué une solution.
Tu dois pouvoir améliorer un petit peu, car la solution implique une numérotation manuelle.
Ce que je te suggère, une macro instruction qui :
1) Va copier les deux tableaux initiaux dans une autre feuille TRAVAIL(pour garder ton ordre de saisie qui a peut-être son importance).
2) Les trier
3) Ensuite, dans ta macro tu fais une fusion entre les deux tableaux :
Soit A le Nb d'éléments du tableau A
Soit B le Nb d'éléments du tableau B
Déclarer un tableau Rangement
A1=1
B1=1
Rangement=1
Tant que / A<=A1 ET B1<=B Répéter
Si / TableauA(A1) = TableauB(B1) Alors /
/Rangement(Rangement) = TableauA(A1)
/ A1=A1+1
/ B1=B1+1
Si / TableauA(A1) < TableauB(B1) Alors /
/Rangement(Rangement) = TableauA(A1)
/ A1=A1+1
Si / TableauA(A1) > TableauB(B1) Alors /
/Rangement(Rangement) = TableauB(B1)
/ B1=B1+1
/ B1=B1+1
Rangement=rangement+1
Répéter
' Traitement des lignes restantes d'un tableau quand on a atteint la fin de l'autre tableau
Si A1> A Alors / Tant que B1<=B Répéter /
/Rangement(Rangement) = TableauB(B1)
/Rangement=rangement+1
Sinon / Tant que A1<=A Répéter /
/Rangement(Rangement) = TableauA(A1)
/Rangement=rangement+1
' A l'issue de cette étape, on a un tableau Rangement qui contient l'ensemble des valeurs des deux tableaux initiaux.
Et dans la feuille TRAVAIL on a, hors macro - instruction :
Déclaré deux matrices
créé deux colonnes de recherche (voir l'exemple de Via55)
Pour chaque valeur de Fruit, on recherche dans chaque tableau (A et B)
Si La valeur existe, on prend la valeur Num
sinon 0
La première partie de macro est de l'enregistrement.
La deuxième est toute tracée dans l'analyse ci-dessus
Bon courage
Via55 t' indiqué une solution.
Tu dois pouvoir améliorer un petit peu, car la solution implique une numérotation manuelle.
Ce que je te suggère, une macro instruction qui :
1) Va copier les deux tableaux initiaux dans une autre feuille TRAVAIL(pour garder ton ordre de saisie qui a peut-être son importance).
2) Les trier
3) Ensuite, dans ta macro tu fais une fusion entre les deux tableaux :
Soit A le Nb d'éléments du tableau A
Soit B le Nb d'éléments du tableau B
Déclarer un tableau Rangement
A1=1
B1=1
Rangement=1
Tant que / A<=A1 ET B1<=B Répéter
Si / TableauA(A1) = TableauB(B1) Alors /
/Rangement(Rangement) = TableauA(A1)
/ A1=A1+1
/ B1=B1+1
Si / TableauA(A1) < TableauB(B1) Alors /
/Rangement(Rangement) = TableauA(A1)
/ A1=A1+1
Si / TableauA(A1) > TableauB(B1) Alors /
/Rangement(Rangement) = TableauB(B1)
/ B1=B1+1
/ B1=B1+1
Rangement=rangement+1
Répéter
' Traitement des lignes restantes d'un tableau quand on a atteint la fin de l'autre tableau
Si A1> A Alors / Tant que B1<=B Répéter /
/Rangement(Rangement) = TableauB(B1)
/Rangement=rangement+1
Sinon / Tant que A1<=A Répéter /
/Rangement(Rangement) = TableauA(A1)
/Rangement=rangement+1
' A l'issue de cette étape, on a un tableau Rangement qui contient l'ensemble des valeurs des deux tableaux initiaux.
Et dans la feuille TRAVAIL on a, hors macro - instruction :
Déclaré deux matrices
créé deux colonnes de recherche (voir l'exemple de Via55)
Pour chaque valeur de Fruit, on recherche dans chaque tableau (A et B)
Si La valeur existe, on prend la valeur Num
sinon 0
La première partie de macro est de l'enregistrement.
La deuxième est toute tracée dans l'analyse ci-dessus
Bon courage
Bonjour,
avec un petit délai, une solution à débugger.
PRECISION : La macro est du type hyper simplifiée....
Il y sans doute plus "élégant" en programmation, plus rapide aussi...
Mais cela devrait fonctionner.
Le fichier EXCEL DOIT AVOIR UNE FEUIILE "travail" qui contient en
B1 =NB.SI(B3:B100;"<>"&"*")
E1 =NB.SI(B3:B100;"<>"&"*")
Bon courage
Sub Conca()
'
' Conca Macro
' Déclaration des tableaux
Dim TabA$(100, 2)
Dim TabB$(100, 2)
Dim Conca$(200, 2)
'RAZ des zones de travail issues d'un précédent traitement
Sheets("Travail").Select
Range("B3:C11").Select
Selection.ClearContents
Range("E3:F6").Select
Selection.ClearContents
Range("h3:I200").Select
Selection.ClearContents
Sheets("Feuil1").Select
' Copie des infos
Range("B2:C4").Select
Selection.Copy
Sheets("Travail").Select
Range("B3").Select
ActiveSheet.Paste
Range("B3").Select
Sheets("Feuil1").Select
Range("F2:G4").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Travail").Select
Range("E3").Select
ActiveSheet.Paste
' Chargement des tableaux
For Indice = 3 To 100
TabA$(Indice, 1) = Worksheets("Travail").Cells(Indice, 1).Value
TabA$(Indice, 2) = Worksheets("Travail").Cells(Indice, 2).Value
TabB$(Indice, 1) = Worksheets("Travail").Cells(Indice, 1).Value
TabB$(Indice, 2) = Worksheets("Travail").Cells(Indice, 2).Value
Next i
' Tri des informations
' Tri tableau A
Range("B3:C100").Select
ActiveWorkbook.Worksheets("Travail").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Travail").Sort.SortFields.Add Key:=Range("B3:B7") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Travail").Sort
.SetRange Range("B3:C7")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Tri Tableau B
Range("E3:F100").Select
ActiveWorkbook.Worksheets("Travail").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Travail").Sort.SortFields.Add Key:=Range("E3:E6") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Travail").Sort
.SetRange Range("E3:F6")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Fusion
A1 = 3: B1 = 3: Rangement = 3
' Nb de cellules du tableau A
A = 100 - Worksheets("Travail").Range("B1").Value
' Nb de cellules du tableau B
B = 100 - Worksheets("Travail").Range("E1").Value
' Boucle principale
While (A1 <= A And B1 <= B)
If TabA$(A1, 1) = TabB$(B1, 1) Then
Conca$(Rangement, 1) = TabA$(A1, 1)
Conca$(Rangement, 2) = TabA$(A1, 2) + TabB$(B1, 2)
A1 = A1 + 1: B1 = B1 + 1: Rangement = Rangement + 1
End If
If TabA$(A1, 1) < TabB$(B1, 1) Then
Conca$(Rangement, 1) = TabA$(A1, 1)
Conca$(Rangement, 2) = TabA$(A1, 2)
A1 = A1 + 1: Rangement = Rangement + 1
End If
If TabA$(A1, 1) > TabB$(B1, 1) Then
Conca$(Rangement, 1) = TabB$(B1, 1)
Conca$(Rangement, 2) = TabB$(B1, 2)
B1 = B1 + 1: Rangement = Rangement + 1
End If
Wend
' un des deux tableaux est terminé, il faut ranger la fin de l'autre tableau
If A1 > A Then ' Le tableau A est terminé, on lit le tableau B
While B1 <= B
Conca$(Rangement, 1) = TabB$(B1, 1)
Conca$(Rangement, 2) = TabB$(B1, 2)
B1 = B1 + 1: Rangement = Rangement + 1
Wend
Else
' Le tableau B est terminé, on lit le tableau A
While B1 <= B
Conca$(Rangement, 1) = TabA$(A1, 1)
Conca$(Rangement, 2) = TabA$(A1, 2)
A1 = A1 + 1: Rangement = Rangement + 1
Wend
End If
' Rangement des valeurs trouvées dans la grille
For Indice = 3 To Rangement
Worksheets("Travail").Cells(Indice, 1) = Conca$(Indice, 1)
Worksheets("Travail").Cells(Indice, 2) = Conca$(Indice, 2)
Next Indice
End Sub
avec un petit délai, une solution à débugger.
PRECISION : La macro est du type hyper simplifiée....
Il y sans doute plus "élégant" en programmation, plus rapide aussi...
Mais cela devrait fonctionner.
Le fichier EXCEL DOIT AVOIR UNE FEUIILE "travail" qui contient en
B1 =NB.SI(B3:B100;"<>"&"*")
E1 =NB.SI(B3:B100;"<>"&"*")
Bon courage
Sub Conca()
'
' Conca Macro
' Déclaration des tableaux
Dim TabA$(100, 2)
Dim TabB$(100, 2)
Dim Conca$(200, 2)
'RAZ des zones de travail issues d'un précédent traitement
Sheets("Travail").Select
Range("B3:C11").Select
Selection.ClearContents
Range("E3:F6").Select
Selection.ClearContents
Range("h3:I200").Select
Selection.ClearContents
Sheets("Feuil1").Select
' Copie des infos
Range("B2:C4").Select
Selection.Copy
Sheets("Travail").Select
Range("B3").Select
ActiveSheet.Paste
Range("B3").Select
Sheets("Feuil1").Select
Range("F2:G4").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Travail").Select
Range("E3").Select
ActiveSheet.Paste
' Chargement des tableaux
For Indice = 3 To 100
TabA$(Indice, 1) = Worksheets("Travail").Cells(Indice, 1).Value
TabA$(Indice, 2) = Worksheets("Travail").Cells(Indice, 2).Value
TabB$(Indice, 1) = Worksheets("Travail").Cells(Indice, 1).Value
TabB$(Indice, 2) = Worksheets("Travail").Cells(Indice, 2).Value
Next i
' Tri des informations
' Tri tableau A
Range("B3:C100").Select
ActiveWorkbook.Worksheets("Travail").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Travail").Sort.SortFields.Add Key:=Range("B3:B7") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Travail").Sort
.SetRange Range("B3:C7")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Tri Tableau B
Range("E3:F100").Select
ActiveWorkbook.Worksheets("Travail").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Travail").Sort.SortFields.Add Key:=Range("E3:E6") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Travail").Sort
.SetRange Range("E3:F6")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Fusion
A1 = 3: B1 = 3: Rangement = 3
' Nb de cellules du tableau A
A = 100 - Worksheets("Travail").Range("B1").Value
' Nb de cellules du tableau B
B = 100 - Worksheets("Travail").Range("E1").Value
' Boucle principale
While (A1 <= A And B1 <= B)
If TabA$(A1, 1) = TabB$(B1, 1) Then
Conca$(Rangement, 1) = TabA$(A1, 1)
Conca$(Rangement, 2) = TabA$(A1, 2) + TabB$(B1, 2)
A1 = A1 + 1: B1 = B1 + 1: Rangement = Rangement + 1
End If
If TabA$(A1, 1) < TabB$(B1, 1) Then
Conca$(Rangement, 1) = TabA$(A1, 1)
Conca$(Rangement, 2) = TabA$(A1, 2)
A1 = A1 + 1: Rangement = Rangement + 1
End If
If TabA$(A1, 1) > TabB$(B1, 1) Then
Conca$(Rangement, 1) = TabB$(B1, 1)
Conca$(Rangement, 2) = TabB$(B1, 2)
B1 = B1 + 1: Rangement = Rangement + 1
End If
Wend
' un des deux tableaux est terminé, il faut ranger la fin de l'autre tableau
If A1 > A Then ' Le tableau A est terminé, on lit le tableau B
While B1 <= B
Conca$(Rangement, 1) = TabB$(B1, 1)
Conca$(Rangement, 2) = TabB$(B1, 2)
B1 = B1 + 1: Rangement = Rangement + 1
Wend
Else
' Le tableau B est terminé, on lit le tableau A
While B1 <= B
Conca$(Rangement, 1) = TabA$(A1, 1)
Conca$(Rangement, 2) = TabA$(A1, 2)
A1 = A1 + 1: Rangement = Rangement + 1
Wend
End If
' Rangement des valeurs trouvées dans la grille
For Indice = 3 To Rangement
Worksheets("Travail").Cells(Indice, 1) = Conca$(Indice, 1)
Worksheets("Travail").Cells(Indice, 2) = Conca$(Indice, 2)
Next Indice
End Sub
oui un peu...