Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Concaténation de 3 cellules par VBA impossible

Skyna

XLDnaute Occasionnel
Bonjour,
Je souhaiterais concatener par VBA 3 cellules par code VBA mais la dernière cellule n'est jamais reconnue alors que lorsque je le fais avec une formule cela fonctionne..

- Pour la 1ère cellule, je souhaite récupérer les 2 caractères de droite
- Pour la 2ème colonne, je souhaite récupérer les 12 caractères de droite (Un espace est présent en 1ère place)
- Pour la 3ème colonne, je souhaite récupérer les 3 caractères de droite (Un espace est présent en 1ère place) et c'est là que ca plante, impossible de récupérer les éléments sous format "000" ......

Dans le classeur joint vous trouverez un exemple.
L'ojectif est de concatener par VBA dans la colonne E les colonne A, B et C
La colonne F affiche le résultat souhaité (qui fonctionne avec une formule dans chaque cellule)
La colonne G affiche OK ou PAS OK en fonction de la concordance ou non entre les colonne E et F

Quelqu'un pourrait-il m'aider svp ?
Par avance, merci.
 

Pièces jointes

  • Classeur Concatener.xlsm
    171.3 KB · Affichages: 13

Lolote83

XLDnaute Barbatruc
Salut,
Voici ton code modifié.
Par contre pour que cela fonctionne, il faut que la colonne E soit définie en TEXTE
Code:
Sub Concatener()
    Dim C As Range
    Dim xP1 As String
    Dim xP2 As String
    Dim xP3 As String
    Dim xResult As String
   
    Application.ScreenUpdating = False
    For Each C In Range("A2:A658")
        xP1 = Right(C, 2)
        xP2 = Right(C.Offset(0, 1), 12)
        xP3 = Right(C.Offset(0, 2), 3)
        xResult = xP1 & xP2 & xP3
        C.Offset(0, 4) = xResult
        'AVEC FORMULE CELA FONCTIONNE
        C.Offset(0, 5).FormulaR1C1 = "=RIGHT(RC[-5],2)&RIGHT(RC[-4],12)&RIGHT(RC[-3],3)"
        'VERIFICATION SI CONCORDANCE ENTRE LES 2 METHODES
        If C.Offset(0, 4) = C.Offset(0, 5) Then
            C.Offset(0, 6) = "OK"
        Else
            C.Offset(0, 6) = "PAS OK"
        End If
    Next C
    Range("A1").Select
    MsgBox ("Terminé")
    Application.ScreenUpdating = True
End Sub
@+ Lolote83
 

mutzik

XLDnaute Barbatruc
bonjour

Code:
Sub Concatener()

Dim C As Range, i, j, k, val

Application.ScreenUpdating = False

    Range("A2").Select

        For Each C In Range("A2:A658")
           
            'CODE MACRO QUI NE FONCTIONNE PAS
            i = Right(C.Value, 2)
            j = Right(C.Offset(0, 1).Value, 12)
            k = Right(C.Offset(0, 2).Value, 3)
            val = i & j & k
            C.Offset(0, 4) = "'" & val
           
            'Stop
            'ActiveCell.Offset(0, 4) = Right(ActiveCell.Value, 2) & Right(ActiveCell.Offset(0, 1).Value, 12) & Right(ActiveCell.Offset(0, 3).Value, 3)
           
            'AVEC FORMULE CELA FONCTIONNE
            ActiveCell.Offset(0, 5).FormulaR1C1 = "=RIGHT(RC[-5],2)&RIGHT(RC[-4],12)&RIGHT(RC[-3],3)"
           
                'VERIFICATION SI CONCORDANCE ENTRE LES 2 METHODES
                If ActiveCell.Offset(0, 4) = ActiveCell.Offset(0, 5) Then
                    ActiveCell.Offset(0, 6) = "OK"
                Else
                    ActiveCell.Offset(0, 6) = "PAS OK"
                End If
            
            ActiveCell.Offset(1, 0).Select
          
        Next C

    Range("A1").Select
    MsgBox ("Terminé")

Application.ScreenUpdating = True

End Sub

mais tu ne pourras pas transformer ce texte en nombre, il est (me semble t-il) trop grand pour excel
 

Discussions similaires

Réponses
5
Affichages
501
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…