[VBA excel] nombre de caractères

Résolu/Fermé
schont - 12 juil. 2007 à 09:24
 Papou - 16 juil. 2007 à 14:53
Bonjour,
Je voudrais générer via excel des codes à 12 chiffres ni plus ni moins. Le code à 12 chiffres est composé de plusieurs valeurs ajoutées à la suite : dans la cellule du code j'utilise la fontion "=concatener(...)" qui reprend les informations de plusieurs autres cellules (n° de dossier, référence produit, n° client) le problème est que les chiffres qui composent ces informations varient de 3 à 5 caractères chacun quand tout va bien j'ai 12 chiffres pour mon code sinon j'en ai 9 ou 15 ...
L'idée serait qu'un code en vba réajuste le tout lorsqu'il n'y a pas assez de chiffres il complète avec des "0" et quand il y en a trop il supprime les derniers pour arriver à 12.

Je ne m'y connais pas trop en VB donc si quelqu'un peut m'aider ...

Merci

3 réponses

Bonjour Schont,

Voici un code applicable à ton problème.

Tu peux recopier ces 2 macros dans un module VBA. Pour changer les adresses des cellules, il te suffit de les modifier dans le code de la Macro1(). Ensuite, tu lances l'exécution de la Macro1 par le moyen que tu veux, un bouton de commande ou un événement de la feuille de calcul, par exemple.

Sub Macro1()
MacroFormatCode "A1", "A2", "A3", "B1"
' A1, A2 et A3 contiennent les codes, B1 le résultat sur 12 chiffres
End Sub

Sub MacroFormatCode(Cell1 As String, Cell2 As String, Cell3 As String, CellR As String)
' Cell1=cellule contenant le 1er code
' Cell2=cellule contenant le 2àme code
' Cell3=cellule contenant le 3ème code
' CellR=cellule contenant le code à 12 chiffres
Dim Code As String
' Concaténation du code
Code = Range(Cell1) & Range(Cell2) & Range(Cell3)
' Mise au format texte de la cellule du code
Range("b1").NumberFormat = "@"
' Définit le code en fonction de sa longueur
Select Case Len(Code)
  Case Is < 13
  Range(CellR) = Format(Code, "000000000000")
  Case Else
  Range(CellR) = Left$(Code, 12)
End Select
End Sub


Cordialement.

Papou
4
Merci !!
c'est ce que je voulais, sauf que les "0" se rajoutent devant et non derrière mais finalement ca me va,

Bonne journée
0
Re-bonjour Schont,

Qu'à celà ne tienne ! Modifie la macro 'MacroFormatCode' comme suit :

Sub MacroFormatCode(Cell1 As String, Cell2 As String, Cell3 As String, CellR As String)
' Cell1=cellule contenant le 1er code
' Cell2=cellule contenant le 2àme code
' Cell3=cellule contenant le 3ème code
' CellR=cellule contenant le code à 12 chiffres

Dim Code As String
' Concaténation du code
Code = Range(Cell1) & Range(Cell2) & Range(Cell3)
' Mise au format texte de la cellule du code
Range(CellR).NumberFormat = "@"
' Définit le code en fonction de sa longueur
Select Case Len(Code)
Case Is < 13
Range(CellR) = Code & Right$("000000000000", 12 - Len(Code)) Case Else
Range(CellR) = Left$(Code, 12)
End Select

End Sub
0
Pardon, réponse envoyée trop vite.
Voici la bonne méthode :

Sub MacroFormatCode(Cell1 As String, Cell2 As String, Cell3 As String, CellR As String) 
' Cell1=cellule contenant le 1er code 
' Cell2=cellule contenant le 2àme code 
' Cell3=cellule contenant le 3ème code 
' CellR=cellule contenant le code à 12 chiffres 

Dim Code As String 
' Concaténation du code 
Code = Range(Cell1) & Range(Cell2) & Range(Cell3) 
' Mise au format texte de la cellule du code 
Range(CellR).NumberFormat = "@" 
' Définit le code en fonction de sa longueur 
Select Case Len(Code) 
  Case Is < 13 
  Range(CellR) = Code & Right$("000000000000", 12 - Len(Code))
  Case Else 
  Range(CellR) = Left$(Code, 12) 
End Select 

End Sub


Cordialement.
0
Merci ca marche très bien, mais (oui je sais ya toujours un "mais" avec moi ...) je dois utiliser ce code pour de nombreux produits et donc l'utiliser sur de nombreuses lignes, je suis débutant en macro donc si j'utilise mal le code il faut me le dire : actuellement je copie la macro dans Visual Basic je modifie les cellules par celles que j'utilise par exemple A3, B3, C3 pour les infos et D3 pour le résultat, je met une petite icone au bout de chaque ligne et je lui affecte la macro puis je clique et hop ca marche.
C'est donc assez long surtout qu'il y a beaucoup de lignes ...

Je voudrais savoir si cette macro pourrait être utiliser en fonction, exmple : dans ma case de résultat excel j'inscris "='nom d'une fonction'(A3;B3;C3)" et le resultat s'affiche tout seul comme je peux faire un copié déplacé et tout le tableau est rempli.

J'ai essayé en commencant par :
' Ajout de la fonction
Public Function CalcNb(Cell1 As String, Cell2 As String, Cell3 As String)
' Concaténation du code
...

Mais excel ne reconnait pas la fonction (erreur #NOM?)

Si quelqu'un veut bien se pencher sur mon problème,
Après, promis, j'arrête de vous embêter !!

Merci encore
0
Bonjour Schont,

Sous forme de fonction, je n'ai pas eu le temps d'y réfléchir,
Mais si tu veux une macro "universelle", je t'adresse la précédente modifiée qui
fonctionne de la manière suivante :

Tu te positionnes sur la ligne désirée, puis tu lances son exécution (elle détecte
automatiquement le numéro de la ligne active).
Dans ton cas, il te reste à préciser les N° de colonnes adaptés à ton tableau.

Cordialement.

Sub MacroFormatCode()
lg = ActiveCell.Row
Cell1 = Cells(lg, 1).Address
Cell2 = Cells(lg, 2).Address
Cell3 = Cells(lg, 3).Address
CellR = Cells(lg, 4).Address

Dim Code As String
' Concaténation du code
Code = Range(Cell1) & Range(Cell2) & Range(Cell3)
' Mise au format texte de la cellule du code
Range(CellR).NumberFormat = "@"
' Définit le code en fonction de sa longueur
Select Case Len(Code)
  Case Is < 13
  Range(CellR) = Code & Right$("000000000000", 12 - Len(Code))
  Case Else
  Range(CellR) = Left$(Code, 12)
End Select

End Sub
0