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

Macros et VBA Excel Discussion :

Faire une liste sans doublon mais départ sans entrée [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable QSE
    Inscrit en
    Novembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable QSE

    Informations forums :
    Inscription : Novembre 2017
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Faire une liste sans doublon mais départ sans entrée
    Bonjour à tous

    Je vous expose mon problème qui, après réfléxion intense, n'est toujours pas résolu: En fait, je ne sais pas du tout comment m'y prendre. Et comme je l'ai sur 2 endroits différents...

    Pour faire simple:

    1. Je boucle sur un fichier texte contenant des données par lignes, avec en premier le nom du salarié puis les infos. Le code fait sont truc (intègre les données dans la feuille correspondante, et ce pour chaque ligne du fichier (donc changement de salarié au fur et à mesure)

    2. En fin d'import, je voudrais, sur chaque feuille impactée par la modification, faire un tri. Et je beug au niveau de la récupération des feuilles impactés.

    Mon fichier d'import est de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    NOM1;Prénom1;42767;03.A;60;
    NOM1;Prénom1;43023;02.B;60;
    NOM2;Prénom2;43023;03.A;60;
    Je voudrais donc revenir sur les pages NOM1 et NOM2 (et pas NOM 1, NOM1, NOM2).

    J'ai pensé faire une boucle: On test si le nom existe dans un tableau grace à une boucle for, si elle existe, on passe une variable en True. Si a la fin la variable est "False", on intégre dans le tableau.

    Mon soucis vient du fait que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim ListeSalariesExposes() As String
    For i = 0 To Ubound(ListeSalariesEnregistres)
    Et que pour le premier salarié, ListeSalariesEnregistres n'existe pas, non Ubound ne peut retourner de valeur, et donc il plante...

    Une idée pour faire ce tri?

    PS: Je me penche sur les "dictionnaires" !

    Merci !

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bonjour
    Te viendrait-il à l'idée (juste pour le cas où ce serait un peu "utile" ...!) de préciser :
    Ce qu'est, où et comment a été déclaré et où et comment a été initialisé ListeSalariesEnregistres ?
    Ce serait peut-être un minimum, que de le préciser ici ...

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 977
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 977
    Points : 29 012
    Points
    29 012
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si l'exemple affiché est le reflet de la réalité comment définir les données en double parce-que si je me réfère aux deux premières lignes
    1. NOM1;Prénom1;42767;03.A;60;
    2. NOM1;Prénom1;43023;02.B;60;

    il n'y a pas de données en double puisque pour un même nom et prénom on a des données différentes pour les quatre colonnes suivantes.

    Sinon, pas besoin de boucle pour supprimer des doublons. La méthode RemoveDuplicates de l'objet Range fera l'affaire

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Responsable QSE
    Inscrit en
    Novembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable QSE

    Informations forums :
    Inscription : Novembre 2017
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Salut !

    J'ai édité mon premier message pour faire apparaître la déclaration du tableau.

    Je m'en suis sorti en redimensionnant le tableau de suite à 1, puis en faisant mon Ubound. Ça fonctionne.

    Concernant les données, elles viennent d'un fichier texte et je ne souhaite pas supprimer les doublons (puisque comme tu le dis, il n'y en a pas).

    En revanche, je souhaitait revenir sur les pages modifiées pour les trier. Et donc il fallait, à un moment, faire la liste des pages modifiées. Et c'est la que, pour le coup, j'avais besoin de sortir les doublons.

    Je pense qu'il y a mieux à faire, et j'imagine que vous pouvez avoir des idées...

    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
     
    Sub Sub_ImportDonneesExpo(ByVal AdresseFichier As String)
     
        Dim ListeSalariesExposes() As String
        ReDim ListeSalariesExposes(1)
        Dim SalarieExistantDansListe As Boolean
     
        Dim Wb As Workbook
        Dim WsFse As Worksheet
     
        Set Wb = ThisWorkbook
     
    ' On rentre dans une boucle que je n'ai pas copié ici qui, notamment, forme le nom de la feuille WsFse
     
        SalarieExistantDansListe = False
        For j = 0 To UBound(ListeSalariesExposes)
            If WsFse.Name = ListeSalariesExposes(j) Then
                SalarieExistantDansListe = True
                Exit For
            End If
        Next j
     
        If SalarieExistantDansListe = False Then
            ReDim Preserve ListeSalariesExposes(k)
            ListeSalariesExposes(k) = WsFse.Name
            k = k + 1
        End If
    End Sub

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 977
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 977
    Points : 29 012
    Points
    29 012
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Et c'est la que, pour le coup, j'avais besoin de sortir les doublons.
    Qu'entends-tu par sortir les doublons ?
    Les supprimer ou les exporter ou ... les deux ?

    Plus tu seras précis dans tes explications plus vite tu auras une réponse pertinente et plus vite cette discussion sera clôturée.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Responsable QSE
    Inscrit en
    Novembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable QSE

    Informations forums :
    Inscription : Novembre 2017
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Pour revenir sur les feuilles modifiées, j'enregistrais le nom de la feuille dans un tableau.

    Sauf que pour un export sur ce type de fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    NOM1;Prénom1;42767;03.A;60
    NOM1;Prénom1;43023;02.B;60
    NOM1;Prénom1;43023;02.B;60
    NOM2;Prénom2;43023;03.A;60
    NOM2;Prénom2;43023;03.A;60
    NOM2;Prénom2;43023;03.A;60
    Je me retrouvais avec un tableau qui m'enregistrait chaque ligne comme feuille.

    Donc pour trier chaque feuille impacter, je me retrouvais à boucler plusieurs fois sur le même nom:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NOM1;NOM1;NOM1;NOM2;NOM2;NOM2
    Et c'est dans ce nouveau tableau que je ne voulais pas des doublons.

    Donc maintenant, quand je boucle chaque ligne, je vérifie si NOM1 existe déjà dans le tableau, si oui, inutile de le renoter. Sauf qu'on teste un tableau qui, pour la première ligne, n'existe pas. Donc le Ubound plantait (a priori).

    J'ai le même soucis lors d'un import: Si aucune feuille n'existe, le Ubound plante... Mais j'ai plus trop la force aujourd'hui de me pencher dessus

    Vincent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] A propos des listes de validation conditionnelles et sans doublon
    Par Invité dans le forum Excel
    Réponses: 0
    Dernier message: 26/01/2011, 14h29
  2. [XL-2003] Listes de validation conditionnelles et sans doublon
    Par loliv77 dans le forum Excel
    Réponses: 1
    Dernier message: 01/12/2009, 16h26
  3. Réponses: 17
    Dernier message: 11/03/2009, 10h35
  4. Réponses: 5
    Dernier message: 31/10/2008, 13h24
  5. Réponses: 2
    Dernier message: 27/05/2007, 23h23

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