XL 2016 Concaténation de 3 cellules par VBA impossible

  • Initiateur de la discussion Initiateur de la discussion Skyna
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
63
Réponses
2
Affichages
68
Réponses
1
Affichages
61
Réponses
5
Affichages
613
Retour