Comparaison de tableau
Résolu/Fermé
reno421
-
16 mars 2015 à 09:39
reno421 Messages postés 41 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 16 septembre 2015 - 16 mars 2015 à 16:26
reno421 Messages postés 41 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 16 septembre 2015 - 16 mars 2015 à 16:26
A voir également:
- Comparaison de tableau
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms. quel mot est formé par les 6 premières lettres de la colonne code ? - Forum Bureautique
- Afficher un tableau en c - Forum C
- Tableau word - Guide
2 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 mars 2023
2 712
16 mars 2015 à 11:00
16 mars 2015 à 11:00
Bonjour,
Un exemple est parfois plus parlant.
Regarde ce test et ses résultats dans la fenêtre d'exécution :
Un exemple est parfois plus parlant.
Regarde ce test et ses résultats dans la fenêtre d'exécution :
Sub test()
Dim Tb(), i As Long, ind_1 As Long
Dim j As Long, ind_2 As Long
Dim MaValeur As String
Dim t As Single
'tb 1 dimension :
ReDim Preserve Tb(1000)
For i = 0 To 999
Tb(i) = "Valeur " & i
Next
MaValeur = "Valeur 995"
Debug.Print "------- Tableaux à 1 dimension -------"
Debug.Print "EstDans : " & EstDans(MaValeur, Tb)
Debug.Print "IsIn : " & IsIn(MaValeur, Tb)
Debug.Print "BoucleSurTabl : " & BoucleSurTabl(MaValeur, Tb, ind_1) & " à l'indice " & ind_1
Erase Tb
'tb 2 dimensions :
ReDim Preserve Tb(1 To 1000, 1 To 100)
For i = 1 To 1000
For j = 1 To 100
Tb(i, j) = "Valeur " & i & "--" & j
Next j
Next i
MaValeur = "Valeur 995--99"
Debug.Print ""
Debug.Print "---Restart here and Now.................."
Debug.Print ""
Debug.Print "------- Tableaux à 2 dimensions -------"
t = Timer
Debug.Print "----------------------------------------" & vbCrLf & _
"EstDans," & vbCrLf & _
" résultat : " & EstDans(MaValeur, Tb) & ", en : " & Timer - t & " sec."
t = Timer
Debug.Print "----------------------------------------" & vbCrLf & _
"BoucleSurTabl," & vbCrLf & _
" résultat : " & BoucleSurTabl(MaValeur, Tb, ind_1, ind_2) & ", en : " & Timer - t & " sec." & vbCrLf & _
" En prime les indices : " & ind_1 & ", " & ind_2
End Sub
Function IsIn(mot As String, Tabl) As Boolean
If UBound(Filter(Tabl, mot, True, 1)) >= 0 Then
IsIn = True
End If
End Function
Function EstDans(mot As String, Tabl) As Boolean
Dim Dimension As Byte, j As Integer
On Error Resume Next
If IsError(UBound(Tabl, 2)) Then Dimension = 1 Else Dimension = 2
On Error GoTo 0
Select Case Dimension
Case 1
On Error Resume Next
EstDans = Application.Match(mot, Tabl, 0)
On Error GoTo 0
Case 2
For j = 1 To UBound(Tabl, 2)
On Error Resume Next
EstDans = Application.Match(mot, Application.Index(Tabl, , j), 0)
On Error GoTo 0
If EstDans = True Then Exit For
Next
End Select
End Function
Function BoucleSurTabl(mot As String, Tb, Optional Indice_1 As Long, Optional Indice_2 As Long) As Boolean
Dim Dimension As Byte, i As Long, j As Long
BoucleSurTabl = False
On Error Resume Next
If IsError(UBound(Tb, 2)) Then Dimension = 1 Else Dimension = 2
On Error GoTo 0
Select Case Dimension
Case 1
For j = LBound(Tb) To UBound(Tb)
If Tb(j) = mot Then
BoucleSurTabl = True
Indice_1 = j
Exit Function
End If
Next
Case 2
For i = LBound(Tb, 1) To UBound(Tb, 1)
For j = LBound(Tb, 2) To UBound(Tb, 2)
If Tb(i, j) = mot Then
BoucleSurTabl = True
Indice_1 = i
Indice_2 = j
Exit Function
End If
Next j
Next i
End Select
End Function
reno421
Messages postés
41
Date d'inscription
vendredi 30 janvier 2015
Statut
Membre
Dernière intervention
16 septembre 2015
16 mars 2015 à 14:44
16 mars 2015 à 14:44
Ouie ouie, ouie, merci pour ton code mais j'avoue que j'ai beaucoup de mal a le suivre. Voici un exemple plus parlant, je l'espère.
Je l'ai simplifié au max.
Voici mon premier tableau :
Zone Nom site
Paris Site B
Paris Site C
Paris Site D
Bordeaux Site J
Bordeaux Site K
Lille Site E
Caen Caen
Nice Site F
Voici mon seccond tableau
Zone Contact principal
Paris Bernard
Lille Paul
Caen Jean
Bordeaux Albert
Montellimar Vincent
L'objet de ma vérification est de savoir schaque "zone" du tableau 1 correspond à une "zone" du tableau 2 puis, de vérifier si chaque zone définie dans le tableau 2 correspond à au moins une zone du tableau 1.
Dans cet exemple, il y a 2 erreurs, voici le genre de message que j'aimerais qui apparaissent :
La zone "Nice" du tab1 n'existe pas dans le tab2
La zone "Montellimar" du tab2 n'resiste pas dan sle tab1
D'avance merci pour votre aide
Je l'ai simplifié au max.
Voici mon premier tableau :
Zone Nom site
Paris Site B
Paris Site C
Paris Site D
Bordeaux Site J
Bordeaux Site K
Lille Site E
Caen Caen
Nice Site F
Voici mon seccond tableau
Zone Contact principal
Paris Bernard
Lille Paul
Caen Jean
Bordeaux Albert
Montellimar Vincent
L'objet de ma vérification est de savoir schaque "zone" du tableau 1 correspond à une "zone" du tableau 2 puis, de vérifier si chaque zone définie dans le tableau 2 correspond à au moins une zone du tableau 1.
Dans cet exemple, il y a 2 erreurs, voici le genre de message que j'aimerais qui apparaissent :
La zone "Nice" du tab1 n'existe pas dans le tab2
La zone "Montellimar" du tab2 n'resiste pas dan sle tab1
D'avance merci pour votre aide
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 mars 2023
2 712
16 mars 2015 à 15:01
16 mars 2015 à 15:01
Je t'ai tout donné dans l'exemple, ne te restais qu'à adapter, en simplifiant...
1- boucle sur le tableau 1
2- test si l'élément appartient au tableau 2
==> si oui, élément suivant (rien à faire)
==> si non, message
3- boucle sur le tableau 2
4- test si l'élément appartient au tableau 1
==> si oui, élément suivant (rien à faire)
==> si non, message
Donc deux fonctions :
Une procédure principale ou tu met tes boucles et une fonction qui test l'appartenance.
Donc :
précision : j'ai écris cette macro sur le forum sans la tester, il peut y avoir des boulettes...
1- boucle sur le tableau 1
2- test si l'élément appartient au tableau 2
==> si oui, élément suivant (rien à faire)
==> si non, message
3- boucle sur le tableau 2
4- test si l'élément appartient au tableau 1
==> si oui, élément suivant (rien à faire)
==> si non, message
Donc deux fonctions :
Une procédure principale ou tu met tes boucles et une fonction qui test l'appartenance.
Donc :
précision : j'ai écris cette macro sur le forum sans la tester, il peut y avoir des boulettes...
Sub Main()
Dim Tb_1(), Tb_2(), i As Long
'remplissage des Tb_1 & 2
'ICI TON CODE
'boucles
For i = LBound(Tb_1, 1) To UBound(Tb_1, 1)
If EstDedans(Tb_1(i, 1), Tb_2) = False Then MsgBox Tb_1(i, 1) & " n'est pas dans Tb_2"
Next i
'IDEM POUR TB_2, je ne te le fait pas hein ;-)
End Sub
Function EstDedans(mot As String, Tb) As Boolean
Dim j As Long
For j = LBound(Tb, 1) To UBound(Tb, 1)
If Tb(j, 1) = mot Then EstDedans = True: Exit Function
Next
End Function
reno421
Messages postés
41
Date d'inscription
vendredi 30 janvier 2015
Statut
Membre
Dernière intervention
16 septembre 2015
16 mars 2015 à 15:31
16 mars 2015 à 15:31
Un tout grand merci, je vais tester, je pense que ça ira
reno421
Messages postés
41
Date d'inscription
vendredi 30 janvier 2015
Statut
Membre
Dernière intervention
16 septembre 2015
16 mars 2015 à 16:26
16 mars 2015 à 16:26
Génial et super rapide, un tout grand merci !!!!