IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Savoir si il y a des doublons dans un tableau


Sujet :

VBScript

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut Savoir si il y a des doublons dans un tableau
    Bonjour,

    Je voulais savoir :

    Comment savoir si dans un tableau, j'ai des doublons ?

    Merci de vos indications
    Arnaud

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    Bonjour

    Quelle type de tableau ?

    Doublon en ligne, en colonne ou les 2 ?
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Bonjour,

    En gros, j'ai un tableau dynamique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Montableau
    Montableau = Array(Element1,Element2,Element3,...,Elementn)
    Et je veux savoir s'il n'y a pas de doublon. Je ne veux pas le dédoublonner, mais juste savoir si une valeur est en double.

    Encore merci.

  4. #4
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    Un exemple à la volée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Dim Montableau, i,j  '(compteurs)
    Dim Doublon ' Booléen pour test
    Montableau = Array(Element1,Element2,Element3,Element4,Element5,Element6,Element7)
    for i=LBound(Montableau) to UBound(Montableau)
       montableau(i)=i+4 'Remplissage d'un tableau exemple
    next
    montableau(5) = 8    ' modification de l'une des valeur du tableau pour avoir un doublon
    Doublon = False
    For i=LBound(Montableau) to UBound(Montableau) - 1
        For j = i + 1 To UBound(Montableau)
          If Montableau(i) = Montableau(j) Then
             Doublon = True
             Exit For
          End If
          if Doublon then msgbox "Position = " & cstr(j) & "  " & Doublon
        Next '  pour j
    Next ' pour i
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Merci beaucoup !

    J'ai apporté quelques modifications pour l’implémenter dans mon projet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Function Isdouble(Data)
    	Dim Montableau, i,j  '(compteurs)
    	Dim Doublon ' Booléen pour test
    	Montableau = Split(Data, ";")
    	Doublon = False
    	For i=LBound(Montableau) to UBound(Montableau) - 1
    		For j = i + 1 To UBound(Montableau)
    			If Montableau(i) = Montableau(j) Then
    				Doublon = True
    				Exit For
    			End If
    			If Doublon then
    				Isdouble = "1"
    			Else
    				Isdouble = "0"
    			End if
    		Next '  pour j
    	Next ' pour i
    End Function
     
    MsgBox Isdouble("TOTO;TITI;TATA;TUTU;POPO;TOTO;TITI")

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    J'ai un petit problème : certains tableau à analysé comporte des "-" et j'aimerai qu'ils ne soient pas pris en compte comme doublon.

    J'ai fais ceci, mais cela ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Function Isdouble(Data)
    	Dim Montableau, i,j,x,y  '(compteurs)
    	Dim Doublon ' Booléen pour test
     
    	mTab = Split(Data, ";")
    	y=0
    	For x = 1 To (UBound(mTab)) 
    		If mTab(i) <> "-" Then
    			Montableau(y) = mTab(x)
    			y = y+1
    		Else
    			y = y-1
    		End If
        Next
     
    	Doublon = False
    	For i=LBound(Montableau) to UBound(Montableau) - 1
    		For j = i + 1 To UBound(Montableau)
    			If Montableau(i) = Montableau(j) Then
    				Doublon = True
    				Exit For
    			End If
    			If Doublon then
    				Isdouble = "1"
    			Else
    				Isdouble = "0"
    			End If
    		Next '  pour j
    	Next ' pour i
    End Function
     
    MsgBox Isdouble("-;-;groupe3\AE-DBI\Shared\0-STAFF;-")
    J'ai une erreur sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	For i=LBound(Montableau) to UBound(Montableau) - 1
    Que faire ?

  7. #7
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    La ligne 7 de ton code For x = 1 To (UBound(mTab)) devrait être :
    For x = 0 To (UBound(mTab)) car le 1er élément de ce type de tableau est indexé à 0(zéro).
    D'autre part, tu as redimensionné le tableau Montableau et tu n'en as pris tenu compte dans la suite du code.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Citation Envoyé par l_autodidacte Voir le message
    La ligne 7 de ton code For x = 1 To (UBound(mTab)) devrait être :
    For x = 0 To (UBound(mTab)) car le 1er élément de ce type de tableau est indexé à 0(zéro).
    D'autre part, tu as redimensionné le tableau Montableau et tu n'en as pris tenu compte dans la suite du code.
    Justement, mon tableau peut être de taille variable.

    En faite, je prend mon tableau d'origine que je filtre. Je recrée un tableau sans les caractères "-" ou vide.

    Ensuite, dans ce nouveau tableau, je souhaite déterminer si j'ai des valeurs en doubles. De par le filtre effectué en amont, la taille de celui-ci est variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Function Isdouble(Data)
    	Dim Montableau, i,j,x,y  '(compteurs)
    	Dim Doublon ' Booléen pour test
    	Dim Data2
     
    	' Génération d'un tableau sans les caractères suivant : "" et "-"
    	mTab = Split(Data, ";")
    	for i=LBound(mTab) to UBound(mTab)
    		If mTab(i) <> "-" AND mTab(i) <> "" Then
    			If IsEmpty(Data2) Then
    				Data2 = mTab(i)
    			Else
    				Data2 = Data2 & ";" & mTab(i)
    			End If
    		End If
    	next
     
    		' Déterminer s'il y a des doublons dans le tableau
    	Montableau = Split(Data2, ";")
    	Doublon = False
    	For i=LBound(Montableau) to UBound(Montableau) - 1
    		For j = i + 1 To UBound(Montableau)
    			If Montableau(i) = Montableau(j) Then
    				Doublon = True
    				Exit For
    			End If
    			If Doublon then
    				Isdouble = "1"
    			Else
    				Isdouble = "0"
    			End if
    		Next '  pour j
    	Next ' pour i
    End Function
     
    MsgBox Isdouble("-;-;;xxxxxx\xx-xxx\Shared\0-xxxx;-;xxxxxx\xx-xxx\Shared\0-xxxx")
    MsgBox Isdouble("-;xxxxxx\xx-xxx\Shared\0-xxxx;-;yyyyyy\yy-yyy\Shared\0-yyyy;-;;-")
    La génération et la lecture de mon tableau filtré fonctionne correctement.
    Cependant, pour déterminer s'il y a doublon ou pas, ca ne fonctionne pas bien. Le problème c'est que mon tableau filtré est de taille variable. Alors que ce script fonctionne pour 7 éléments

    Edit : bon, je ne comprend pas, mais ça fonctionne maintenant avec une taille variable...

Discussions similaires

  1. Suppression des doublons dans un tableau des chaines
    Par rimenis dans le forum Langage
    Réponses: 3
    Dernier message: 22/02/2013, 13h26
  2. supprimer des doublons dans un Tableau
    Par www.rubis dans le forum Langage
    Réponses: 3
    Dernier message: 10/02/2011, 16h23
  3. [Tableaux] suppression des doublons dans un tableau
    Par hammag dans le forum Langage
    Réponses: 3
    Dernier message: 17/06/2009, 20h13
  4. Réponses: 7
    Dernier message: 09/02/2009, 15h28
  5. [Tableaux] Retirer des doublons dans un tableau
    Par Xunil dans le forum Langage
    Réponses: 2
    Dernier message: 07/11/2006, 19h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo