Ajouter une 'incrémentation au identifiants..

Résolu
FEPOL -  
 Josiel -
Bonjour chers amis,

Nouveau venu dans le monde du VBA, je me trouve confronté à un pb dans la gestion d'un tableau sur deux colonnes.
Nous aidons les jeunes à trouver un stage, un emploi, une formation, etc...
Mais souvent ils postulent sur trois, quatre, ou cinq offres, mais avec un seul numéro d'adhérent.

Ainsi, lors de la récupération des données du site et pour les exploiter sur Excel, je souhaite ajouter une racine d'incrémentation à l'identifiant.

Je précise....Le tableau contient deux colonnes, A: l'identifiant et B: l'intitulé de poste.

Je souhaite réaliser une macro qui va trier le fichier sur les identifiants, puis ajouter la racine"-0" à la premiere occurence, puis si un ientifiant existe en deux exemplaires, le second aura la racine "-1", s'il y en à encore un il aura la racine "-2", etc..., puis quand le suivant change il reçoit à nouveau "-0" pour la première occurence, etc...
Exemple :
1548752 devient 1548752-0, le suivant 1548752-1, ect...

Par avance je vous adresse toute ma reconnaissance et mes remerciements.
Bien à vous ,
Josiel..

3 réponses

  1. tsunamidream Messages postés 283 Statut Membre 59
     
    Bonjour,

    J'ai essayé de faire quelque chose comme ca :

    Sub fonction()
    Dim liste(9, 1) As Variant
    Dim inListe(9, 1) As Integer
    Dim inl As Boolean
    Dim currentIndex As Integer
    Dim tempIndex As Integer
    'Remplissage du tableau
    'Ici je rempli juste les identifiants
    'le tableau sera rempli : 1,2,3,1,2,3,1,2,3,1
    Do While i < 10
        liste(i, 0) = 1
        If i < 9 Then
        liste(i + 1, 0) = 2
        liste(i + 2, 0) = 3
        End If
        i = i + 3
    Loop
    
    'tri
    currentIndex = 0
    For i = LBound(liste) To UBound(liste)
         inl = False
         'pour chaque identifiant on vérifie si on l'a déjà rencontré
         For j = LBound(inListe) To UBound(inListe)
            If liste(i, 0) = inListe(j, 0) Then
                inl = True
                tempIndex = j
            End If
         Next j
        'Si on l'a jamais rencontré on l'enregistre
        If inl = False Then
            inListe(currentIndex, 0) = liste(i, 0)
            inListe(currentIndex, 1) = 0
            MsgBox inListe(currentIndex, 0)
            currentIndex = currentIndex + 1
        End If
        If inl = True Then
            MsgBox liste(tempIndex, 0) & "-" & inListe(tempIndex, 1)
            inListe(tempIndex, 1) = inListe(tempIndex, 1) + 1
        End If
    Next i
    
    End Sub
    


    Demandez si vous ne comprenez pas !
    0
    1. FEPOL
       
      Bonjour et merci pour votre soutien.....

      Malheureusement, cela ne donne aucun effet, juste une dizaine de messages box.

      Je n'ai peut-être pas assez donné de précisions:
      Mon fichier contient deux colonnes A et B
      Une ligne titre: A(identifiant) - B(objet demandé)
      Colonne A des numéros de type : 128456 - 145792 - 547235 - ect....
      Colonne B des définitions : cherche cours - cherche emploi informaticien - etc....

      L'objet de la macro est de remplacer 128456 par 128456-0 si c'est sa première occurence
      si c'est la deuxième (la même personne pouvant postuler à plusieurs offres) sera 128456-1 et ainsi de suite à chaque nouvelle occurence identique.

      Je suppose qu'il ne doit pas manquer grand chose à votre macro, mais je suis incapable de l'enrichir.

      Cela dit j'apprécie votre qualité de travail et votre rapidité et bravo aussi site pour l'esprit d'entraide qu'il favorise.

      Bien Amicalement,
      Josiel.

      Notre objectif : Apporter un soutien par une prestation qui a bout but de donner : un formation - un metier - un emploi.
      Miser sur l'AVENIR... C'est déjà en AVOIR UN.
      0
    2. tsunamidream Messages postés 283 Statut Membre 59
       
      je vais essayer de modifier ma macro au mieu pour que vous n'ayez pas à la modifier.
      Etant au travail actuelement, je le ferai pendant ma pause déjeuner.
      0
  2. tsunamidream Messages postés 283 Statut Membre 59
     
    Désolé pour le retard.
    En espérant que cela convienne :

    Sub fonction()
    
    Dim inListe(1000, 1) As Integer
    Dim inl As Boolean
    Dim currentIndex As Integer
    Dim tempIndex As Integer
    
    
    currentIndex = 0
    Do while Feuil1.Cells(i, 1) <> ""
         inl = False
         'pour chaque identifiant on vérifie si on l'a déjà rencontré
         For j = LBound(inListe) To UBound(inListe)
            If Feuil1.Cells(i, 1) = inListe(j, 0) Then
                inl = True
                tempIndex = j
            End If
         Next j
        'Si on l'a jamais rencontré on l'enregistre
        If inl = False Then
            inListe(currentIndex, 0) = Feuil1.Cells(i, 1)
            inListe(currentIndex, 1) = 0
            currentIndex = currentIndex + 1
        End If
        If inl = True Then
            Feuil1.Cells(i, 1) = Feuil1.Cells(i, 1) & "-" & inListe(tempIndex, 1)
            inListe(tempIndex, 1) = inListe(tempIndex, 1) + 1
        End If
    i = i + 1
    Loop

    0
    1. Josiel
       
      Bonjour,

      Ne vous excusez pas, je vous en prie, j'apprécie votre soutien et cela ne vous engage en rien, surtout pas à un délai...

      Malheureusement lors de l'exécution je recois un code d'erreur 104 avec le message suivant : "La méthode'_Default' de l'objet 'Range' a échoué.
      Et le pointeur reste sur la ligne du Sub.

      Désolé une fois de plus de vous compliquer la tâche.
      Je ne sais même pas comment vous joindre le fichier pour faire un test...
      Mais il est facile à simuler, il suffit de constituer la colonne "A" avec une serie de nombres dont certains se répetent 1, 2, 3, 4, 5, ect...
      Encore un chaleureux MERCI, pour votre soutien.
      0
  3. tsunamidream Messages postés 283 Statut Membre 59
     
    Bonjour,

    voici mon code testé cette fois ci :

    Dim inListe(1000, 1) As Integer
    Dim inl As Boolean
    Dim currentIndex As Integer
    Dim tempIndex As Integer
    
    Sub fonction()
    
    currentIndex = 0
    i = 1
    
    For k = LBound(inListe) To UBound(inListe)
        inListe(k, 0) = 0
        inListe(k, 1) = 0
    Next k
    
    Do While Feuil1.Cells(i, 1) <> ""
         inl = False
         'pour chaque identifiant on vérifie si on l'a déjà rencontré
         For j = LBound(inListe) To UBound(inListe)
            If Feuil1.Cells(i, 1) = inListe(j, 0) Then
                inl = True
                tempIndex = j
            End If
         Next j
        'Si on l'a jamais rencontré on l'enregistre
        If inl = False Then
            inListe(currentIndex, 0) = Feuil1.Cells(i, 1)
            inListe(currentIndex, 1) = 1
            Feuil1.Cells(i, 1).NumberFormat = "@"
            Feuil1.Cells(i, 1) = "" & Feuil1.Cells(i, 1) & "-0"
            currentIndex = currentIndex + 1
        End If
        If inl = True Then
            Feuil1.Cells(i, 1).NumberFormat = "@"
            Feuil1.Cells(i, 1) = "" & Feuil1.Cells(i, 1) & "-" & inListe(tempIndex, 1) & ""
            inListe(tempIndex, 1) = inListe(tempIndex, 1) + 1
        End If
    i = i + 1
    Loop
    End Sub
    


    Cordialement,
    0
    1. Josiel
       
      Merci.... un Énorme MERCI à tsunmidream... Ca Marche !

      Bravo et félicitations, tant pour le travail que pour votre persévérence.
      Ce n'est pas une épine que vous nous enlevez, mais un cactus.

      Recevez l'expression de toute ma gratitude.
      Bien à vous
      Josiel.
      0