Generer un code

canard

XLDnaute Occasionnel
salut à tous et bon week-end,

je voulais savoir si il est possible de générer un code de la maniére suivante:

A1 = Drosera
B1 = Capensis alba
C1 = DCA01

En C1 c'est le code (celui-ci reprends la premiere lettre de chaque mot contenu dans les cellules A1 et B1 et y ajoute +1)

Est-ce possible ?

Si oui, peut on faire une gestion des doublons pour la valeur +1, c'est à dire que si le code DCA01 est deja présent dans la colonne C alors je passe a DCA02.

C'est peut etre beaucoup demandé, mais si c'est possible se serait super.

Merci d'avance et bonne soirée.
@+
 

myDearFriend!

XLDnaute Barbatruc
Re canard, le fil,

Non, canard.
Visiblement, je me suis mal exprimé et si je t'ai froissé, je te prie de m'en excuser.

Cela dit, je souhaiterais également que tu relises l'ensemble de ce fil et qu'objectivement, tu regardes nos différents échanges... il n'en demeure pas moins que les éléments du problème semblent nous parvenir un peu 'au compte gouttes' là et que si tu as effectivement chercher avant de poster tes remarques, ça ne saute pas forcément aux yeux...  

Alors, une fois de plus, je te prie de m'excuser et je voulais te dire que si tes questions m'avaient paru si 'embêtantes' que ça, je ne me serais même pas arrêté dans ce fil...

En répondant aux questions du forum, je ne souhaite, pour ma part, qu'une chose : c'est que l'interlocuteur comprenne ce que j'ai essayé de proposer. Et si ce n'est pas le cas, alors j'ai tout bonnement l'impression d'avoir échoué...

Bonne soirée.

Cordialement,
 

canard

XLDnaute Occasionnel
salut ,

c'est aussi que je suis tellement en colére envers moi-même de ne pas y réussir tout seul que j'ai vite pris la mouche.

La seule précision que je voulais savoir c'est que quand je supprime une ligne par exemple et que j'execute ta macro une nouvelle fois les codes deja générer se modifie, je m'explique:

si le AVA01, AVA02 et AVA03 existe, je supprime le code AVA02 et j'execute ta macro le code AVA03 passe en AVA02.
Moi je voudrais que chaque code créé reste comme il est et si le code AVA02 est supprimé le code AVA03 reste AVA03, et le suivant code AVA passe à AVA02 ou AVA04..
L'important pour moi c'est que chaque code reste en place une fois créé.

Sinon tu n'as pas échoué, je te rassure.
Je m'exuse aussi d'avoir pris la mouche car je galére tellement derriere mon ecran que je m'emporte facilement.

Sinon si mon probléme est trop complexe, c'est pas grave je mettrai les code manuellement.

Encore merci
@+
 

myDearFriend!

XLDnaute Barbatruc
Re canard,

Désolé, mais ma macro ne fonctionnera pas avec cette nouvelle contrainte...

Le code que je t'ai soumis analyse la colonne C et donne un numéro d'ordre à chaque occurence (doublon) rencontrée.

Je reprends ton exemple : il existe au départ 3 éléments identiques et tu supprimes le n°2
Deux situations se présentent alors au prochain lancement de la macro : [ol][ul][li]1ère situation :
Les données de la colonne C sont entièrement effacées avant le traitement : alors l'élément n°3 viendra automatiquement remplacer l'ancien n°2 et le code généré pour cet élément se trouve donc modifié.[/li]
[li]2ème situation :
Les données de la colonne C ne sont pas effacées avant traitement et on décide de ne générer un code que pour les éléments nouveaux : la macro comptant le nombre d'occurences, si tu rajoutes un élément identique ultérieurement, tu te retrouves automatiquement avec deux fois le code n° '...03'.[/li][/ul][/ol]
Désolé donc, pas de solution pour ma part.

Cordialement,
 

soft

XLDnaute Occasionnel
Canard,

Avec ce que je t'avais proposé, une adaptation est possible si tu supprime une ligne puisque je prends la plus grande valeur entre les doublons et que j'y ajoute 1. Ca marchera donc si tu supprime le ..02 et que le ..03 existe (le prochain sera le 04). Par contre si tu supprimes le ..03, le code ne pourras pas deviner qu'il y avait déjà un ..03 et prendra à nouveau cette valeur pour le suivant.

J'ai repris tes dernières demandes et corriger mon code :

Sub AjoutCode()
Dim strCode As String, I As Integer, L As Long, J As Long, N As Integer

L = 1
While Range('A' & L).Value <> ''
strCode = Left(Range('A' & L).Value, 1)
I = 1
Do While I > 0
I = InStr(I + 1, Range('A' & L).Value, ' ')
If I > 0 Then
strCode = strCode & Left(Mid(Range('A' & L).Value, I + 1), 1)
End If
Loop
strCode = strCode & Left(Range('B' & L).Value, 1)
I = 1
Do While I > 0
I = InStr(I + 1, Range('B' & L).Value, ' ')
If I > 0 Then
strCode = strCode & Left(Mid(Range('B' & L).Value, I + 1), 1)
End If
Loop
J = 1
N = 0
strCode = UCase(strCode)
While Range('C' & J).Value <> ''
If J <> L Then
If Left(Range('C' & J).Value, Len(Range('C' & J).Value) - 2) = strCode Then
If CInt(Right(Range('C' & J).Value, 2)) > N Then N = CInt(Right(Range('C' & J).Value, 2))
End If
End If
J = J + 1
Wend

N = N + 1
If Range('C' & L).Value = '' Then
If N < 10 Then
Range('C' & L).Value = strCode & '0' & N
Else
Range('C' & L).Value = strCode & N
End If
End If
L = L + 1
Wend
End Sub

Message édité par: soft, à: 24/10/2005 06:30
 

canard

XLDnaute Occasionnel
salut à tous,

pour vous prouver mon imconpétence, j'ai meme pas réussi a adpter le code dans mon fichier.

J'ai essayé de le faire fonctionner à partir de la cellule A3 mais pas moyen.

J'ai essayé les truc simple du genre:

While Range('A3:A1000' & L).Value <> ''
ou

While Range('a3:a' & Range('a65536').End(xlUp).Row).Value <> ''

mais forcement ça ne marche pas.
Je suis vraiment mauvais


@+
 

soft

XLDnaute Occasionnel
Salut Canard,

on utilise While pour faire des boucles tant qu'un condition est remplie (ou non remplie), c'est donc pas possible de direcement donné l'adresse des lignes, car la condition ne changerait jamais et la boucle sera sans fin.

Dans mon code :

L = 1
While Range('A' & L).Value <> ''

signifie qu'on commence à la Cellule A1 (change juste L=3 pour commencer à A3).
Plus bas on dira L=L+1 (on passe à la cellule suivante dans la colonne A).
La boucle s'arretera quand il n'y aura plus de valeur dans la cellule atteinte (on ne sait pas à l'avance s'il va jusqu'à A100, A1000, A65000).
 

Discussions similaires

Réponses
1
Affichages
216

Membres actuellement en ligne

Statistiques des forums

Discussions
312 329
Messages
2 087 335
Membres
103 520
dernier inscrit
Azise