[VBA excel] nombre de caractères

Résolu
schont -  
 Papou -
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
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. Papou
     
    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
  2. schont
     
    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
    1. Papou
       
      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
    2. Papou
       
      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
  3. schont
     
    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
    1. Papou
       
      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