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..
A voir également:

3 réponses

tsunamidream Messages postés 262 Date d'inscription   Statut Membre Dernière intervention   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
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
tsunamidream Messages postés 262 Date d'inscription   Statut Membre Dernière intervention   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
tsunamidream Messages postés 262 Date d'inscription   Statut Membre Dernière intervention   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
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
tsunamidream Messages postés 262 Date d'inscription   Statut Membre Dernière intervention   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
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