Générer code sous excel

Générer code sous excel - VB/VBA/VBS - Programmation

Marsh Posté le 24-10-2005 à 20:04:08    

salut à tous,
 
dans mon classeur excel, je voulais generer un code qui se place en colonne C par rapport au mot inscrit en colonne A et B sur la meme ligne.
 
Je m'explique :
 
A3 = drosera
B3 = capensis alba
C3 = DCA01 (le fameux code)
 
En gros le code generer prend la premiere lettre de chaque mot plus la valeur 01, si DCA01 existe alors il pass a DCA02, etc...
 
On m'a gentillement fait la macro, mais je n'arrive pas a l'adapter pour que le processus commence a partir de A3, car la si il n'y a rien en ligne 1 ça ne marche pas.
 
Voici la macro:
 
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
 
 
Donc si quelqu'un a une idée, qu'il n'hésite pas ???
 
Merci
@+

Reply

Marsh Posté le 24-10-2005 à 20:04:08   

Reply

Marsh Posté le 25-10-2005 à 05:01:05    

Bonjour,
 
Sub AjoutCode()  
Dim strCode As String, I As Integer, L As Long, J As Long, N As Integer  
 
L = 3
 
... le reste sans changement
A+

Reply

Marsh Posté le 25-10-2005 à 07:26:49    

salut,
 
merci galopin01, ça fonctionne bien a partir de la 3é ligne, mais maintenant la macro se comporte differement.
Car si un code existe ça passe a la valeur +1 normalement, et maintenant si le code AVA01 existe alors le suivant code generer et aussi AVA01 et non AVA02.
 
@+

Reply

Marsh Posté le 25-10-2005 à 08:57:39    

bonjour,
J'ai trouvé plus simple de refaire à ma manière :

Code :
  1. Sub AjoutCode()
  2. Dim strC$, i&, iR&, J&, N%, TabloA$(), TabloB$()
  3. iR = 3
  4. While Cells(iR, 1) <> ""
  5.   strC = Left(Cells(iR, 1), 1)
  6.   TabloA = Split(Cells(iR, 1))
  7.     For k = 1 To UBound(TabloA)
  8.       strC = strC & Left(TabloA(k), 1)
  9.     Next
  10.   strC = strC & Left(Cells(iR, 2), 1)
  11.   TabloB = Split(Cells(iR, 2))
  12.     For k = 1 To UBound(TabloB)
  13.       strC = strC & Left(TabloB(k), 1)
  14.     Next
  15.   N = 1
  16.   For i = 3 To iR - 1
  17.     If Left(Cells(i, 3), Len(Cells(i, 3)) - 2) = strC Then N = N + 1
  18.   Next
  19.   If Cells(iR, 3) = "" Then
  20.     If N < 10 Then
  21.       Cells(iR, 3) = strC & "0" & N
  22.     Else
  23.       Cells(iR, 3) = strC & N
  24.     End If
  25.   End If
  26.   iR = iR + 1
  27. Wend
  28. End Sub


A+

Reply

Marsh Posté le 25-10-2005 à 12:43:34    

salut galopin01,
 
merci beaucoup, ton code marche super, je vais l'utiliser plutot que l'autre.
 
Par contre ou peut on rajouter Ucase pour avoir tout le code generé en majuscule.
 
Merci encore.
@+

Reply

Marsh Posté le 25-10-2005 à 20:08:11    

bonsoir,
ligne 17, 21 et 23 remplacer strC par UCase(strC)
A+


---------------
roger
Reply

Marsh Posté le 25-10-2005 à 20:14:13    

salut galopin,
 
ce que j'ai fait , c'est que entre la ligne 14 et 15 j'ai ajouté ceci:
 
 strC = UCase(strC)
 
et ça marche.
 
Vaut il mieu utiliser ta méthode ou la mienne fonctionne pareille ?
 
Merci
@+

Reply

Marsh Posté le 25-10-2005 à 20:56:09    

oui, c'est encore plus simple
Au plaisir.

Reply

Marsh Posté le 25-10-2005 à 21:37:52    

ok  
merci encore

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed