Comparer
Fermé
freebike
Messages postés
105
Date d'inscription
jeudi 2 juillet 2009
Statut
Membre
Dernière intervention
16 juillet 2019
-
Modifié par freebike le 20/02/2016 à 11:03
Heas Messages postés 71 Date d'inscription samedi 21 novembre 2015 Statut Membre Dernière intervention 3 juillet 2018 - 23 févr. 2016 à 19:25
Heas Messages postés 71 Date d'inscription samedi 21 novembre 2015 Statut Membre Dernière intervention 3 juillet 2018 - 23 févr. 2016 à 19:25
A voir également:
- Comparer
- Comparer prix amazon - Accueil - Commerce
- Comparer deux photos pour savoir si c'est la meme personne - Forum Graphisme
- Comparer config pc avec jeu ✓ - Forum Jeux PC
- Application pour comparer 2 visages - Télécharger - Photo & Graphisme
- Comparer deux pdf - Télécharger - PDF
4 réponses
Heas
Messages postés
71
Date d'inscription
samedi 21 novembre 2015
Statut
Membre
Dernière intervention
3 juillet 2018
5
20 févr. 2016 à 11:22
20 févr. 2016 à 11:22
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?
via55
Messages postés
14501
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
28 novembre 2024
2 735
20 févr. 2016 à 11:48
20 févr. 2016 à 11:48
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
freebike
Messages postés
105
Date d'inscription
jeudi 2 juillet 2009
Statut
Membre
Dernière intervention
16 juillet 2019
5
22 févr. 2016 à 10:32
22 févr. 2016 à 10:32
Bonjour et merci via55
Ce n'est pas simple mais ça marche...
Bonne journée
Ce n'est pas simple mais ça marche...
Bonne journée
Heas
Messages postés
71
Date d'inscription
samedi 21 novembre 2015
Statut
Membre
Dernière intervention
3 juillet 2018
5
21 févr. 2016 à 19:15
21 févr. 2016 à 19:15
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
freebike
Messages postés
105
Date d'inscription
jeudi 2 juillet 2009
Statut
Membre
Dernière intervention
16 juillet 2019
5
22 févr. 2016 à 10:37
22 févr. 2016 à 10:37
Merci de s'intéresser à mon problème
Je comprend a peu près la macro mais ou commence t'elle et ou fini t'elle? (J'ai peur de copier coller des lignes inutiles et de me tromper dans la syntaxe)
Je comprend a peu près la macro mais ou commence t'elle et ou fini t'elle? (J'ai peur de copier coller des lignes inutiles et de me tromper dans la syntaxe)
Heas
Messages postés
71
Date d'inscription
samedi 21 novembre 2015
Statut
Membre
Dernière intervention
3 juillet 2018
5
23 févr. 2016 à 19:25
23 févr. 2016 à 19:25
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
20 févr. 2016 à 12:13
oui un peu...