[VBA excel] nombre de caractères

Résolu
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. 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
    1. 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. 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. 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
    2. 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. 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