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 :

Suppression de doublons et calculs


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Suppression de doublons et calculs
    Saut tout le monde,

    J'ai un tableau 2D ressemblant à :

    cle1 4
    cle2 3
    cle3 7
    cle2 1
    cle4 10
    cle4 6

    J'aimerais faire en sorte d'avoir :

    cle1 4
    cle2 4
    cle3 7
    cle4 16

    Donc supprimer les lignes avec une clé doublon mais additionner sa valeur avec la première... Je sais que c'est pas dur, que je devrais trouver mais ce n'est pas le cas.

    Pour l'instant j'ai ceci :

    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
     
    Dim cle()
    Redim cle(Ubound(Tab3,1))
    m=0
    ok=0
    n=0
    For i=0 to Ubound(Tab3,1)
    	Do While cle(m) <> Tab3(i,0) AND m < Ubound(Tab3,1)
    				m=m+1
    	Loop
     
    	If	cle(m) = Tab3(i,0) Then
    		For a=m to Ubound(Tab3,1)-1
    			For b=0 to Ubound(Tab3,2)
    				Tab3(a,b)=Tab3(a+1,b)
    			Next
    		Next
    		ok=1
    	End If
     
    	If ok=0 Then
    		cle(n)=Tab3(i,0)
    		n=n+1
    	End If
     
    	m=0
    	ok=0
    Next
    Avez vous des idées ? Merci d'avance

    Edit : ce code m'affiche une liste sans doublon mais supprime certaines valeurs, sur 2200 lignes originales, dont 1550 sans doublons, il m'en affiche que 1422
    Dernière modification par Invité ; 14/06/2013 à 12h18.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2011
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 163
    Par défaut
    Bonjour Stalex,

    Je pense que la problématique des doublons appelle l'utilisation de dictionnaires.
    Je n'ai pas trop de temps pour me pencher sur ta question mais j'espère que ça t'aidera.
    ++

  3. #3
    Membre chevronné Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Par défaut
    Bonjour,

    Comme le dit CachLab, l'utilisation de dictionnaire parait toute indiquée pour répondre à la problématique.
    Implémentation possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set objKeysDictionnary = CreateObject("Scripting.Dictionary") 'Création du dictionnaire contenant les clés
    objKeysDictionnary.CompareMode = 1 'Mode de comparaison : texte
    For i=0 to Ubound(Tab3,1) ' Pour chaque occurence du tableau Tab3
    	If objKeysDictionnary.Exists(Tab3(i,0)) Then
    		objKeysDictionnary.Item(Tab3(i,0)) = objKeysDictionnary.Item(Tab3(i,0)) + Tab3(i,1) 'Si la clé a déjà été trouvée, ajout des valeurs
    	Else
    		objKeysDictionnary.Add(Tab3(i,0), Tab3(i,1)) 'Sinon ajout de la clé au dictionnaire
    	End If
    Next
    For Each strKey In objKeysDictionnary.Keys 'Pour chaque clé contenue dans le dictionnaire
    	WScript.Echo strKey & ";" & objKeysDictionnary.Item(strKey) 'Affichage de la clé et de la valeur
    Next
    Bonne continuation

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci à vous deux, je vais me pencher sur les dictionnaires.

    Concernant ton code pitchalov, j'ai malheureusement une erreur :

    L'appel d'une fonction Sub n'admet pas de parenthèses
    objobjKeysDictionnary.Add(Tab3(i,0), Tab3(i,1)) 'Sinon ajout de la clé au dictionnaire

    Hmm

  5. #5
    Membre chevronné Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Par défaut
    Bonjour,

    Possibilité de coquilles, je n'ai pas testé le code. C'était juste pour donner un exemple "dans l'esprit" de la problématique.
    Essaie donc sans les parenthèses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objKeysDictionnary.Add Tab3(i,0), Tab3(i,1)
    Bonne continuation

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup pitchalov, j'ai comme résultat :
    4HREX699500CZZZZZPZZZZZ 00

    Où 4HREX699500CZZZZZPZZZZZ est la clé et 0 et 0 les valeurs de la clé qui existe en 2 exemplaires.

    Me reste donc à les additionner au lieu de les ajouter

    Je regarde ça

Discussions similaires

  1. Suppression de doublons et insertion
    Par Samish dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/08/2005, 21h57
  2. Réponses: 17
    Dernier message: 03/12/2004, 11h17
  3. [langage] Suppression de doublon dans tableau
    Par LFC dans le forum Langage
    Réponses: 5
    Dernier message: 15/04/2004, 14h08
  4. Requête de suppression de doublons : besoin d'aide
    Par biocorp dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2004, 17h04
  5. [LG]Suppression de doublons
    Par moustique31 dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2003, 21h03

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