Instr renvoie un texte en nombre

Bonjour tout le monde,

Question probablement facile, mais quand on ne sais pas...

La ligne ci-dessus

= Left(Cells(x, 9), InStr(1, Cells(x, 9), "-") - 2)

ciblant la cellule suivante:

041.2880 - 1371071

Renvoie 41,288

et je voudrais 041.2880

Que me manque t'il?

Merci

Bonjour SoGro, bonjour le forum,

J'aurais plutôt codé :

= Split(Cells(x, 9)," - ")(0)

Bonjour ThauThème,

Je suis ravi de découvrir la fonction Split, hélas, le résultat est le même...

Que faut'il ajouter pour que VBA considère cette valeur comme un texte?

Merci

Bonjour ThauThème,

Je suis ravi de découvrir la fonction Split, hélas, le résultat est le même...

Que faut'il ajouter pour que VBA considère cette valeur comme un texte?

Merci

Bonjour,

En essayant de la stocker dans une variable texte pour commencer :

Dim VarText As String
VarText = Split(Cells(x, 9)," - ")(0)

Bonjour le fil, bonjour le forum,

Pedro, même comme ça, bizarrement ça ne marche pas...

J'ai essayé avec ce code :

Sub Macro1()
Dim VarText As String
VarText = Split(Cells(1, 1), " - ")(0)
Cells(1, 3).Value = VarText
End Sub

Et j'ai bien une valeur numérique et pas du texte. Comme SoGro ne daigne pas envoyer le code complet, on ne sait pas ce qui se passe après... La parade est de formaté au préalable la cellule receveuse comme "texte" et là ça marche :

Sub Macro1()
Dim VarText As String
VarText = Split(Cells(1, 1), " - ")(0)
Cells(1, 3).NumberFormat = "@"
Cells(1, 3).Value = VarText
End Sub

En fonction de l'utilisation, on peu aussi imaginer ajouter un caractère non numérique, de façon à éviter une conversion non désirée.

Merci Pedro,

J'obtient toujours le même résultat...

Voici le code que Curulis57 m'a pondu il y a peu et que j'essaye de compléter depuis:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim iRow%
Dim Lig As Integer
Dim Vartext As String
'
Cancel = True
Application.ScreenUpdating = False
'
'
With Worksheets("EXTRACT")
    .Cells.Delete
    For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
        iRow = iRow + IIf(iRow = 0, 1, 2)
        .Range("A" & iRow & ":G" & iRow).Value = Range("A" & x & ":G" & x).Value
        iRow = iRow + 1
        .Cells(iRow, 2) = Cells(x, 8)
        .Cells(iRow, 4) = Cells(x, 9)
        .Cells(iRow, 5) = Cells(x, 5)
        .Range("H" & iRow & ":I" & iRow).Value = Range("J" & x & ":K" & x).Value
        .Cells(iRow, 11) = Cells(x, 13)
        If Cells(x, 17) <> 0 Then
            .Cells(iRow, 12) = Cells(x, 17)
        End If
        If Cells(x, 12) = "FOR_ARR_STR" Or Cells(x, 12) = "FOR_ARR_PVC" Or Cells(x, 12) = "CHA_ARR_STR" Or Cells(x, 12) = "CHA_ARR_PVC" Then
            iRow = iRow + 1
            .Cells(iRow, 2) = Cells(x, 12)
            .Cells(iRow, 5) = Cells(x, 5)
            .Cells(iRow, 10).Value = "H"
            If Cells(x, 21) = "PVC" Then
            Vartext = Split(Cells(x, 9), " - ")(0)
            .Cells(iRow, 4) = Vartext
            Else: .Cells(iRow, 4) = Cells(x, 9)
            End If
        Else: .Cells(iRow, 10) = Cells(x, 12)
        End If
        For y = 1 To 3
            If Cells(x, 13 + y) <> "" Then
                iRow = iRow + 1
                .Cells(iRow, 2) = Cells(x, 13 + y)
                .Cells(iRow, 5) = Cells(x, 5)
                If Left(Cells(x, 13 + y), 5) = "ASS_F" And Left(Cells(x, 13 + y - 1), 3) <> "ASS" Then
                    .Cells(iRow, 7) = Cells(x, 23)
                ElseIf Left(Cells(x, 13 + y), 5) = "ASS_F" And Left(Cells(x, 13 + y - 1), 3) = "ASS" Then
                    .Cells(iRow, 7) = Cells(x, 24)
                ElseIf Left(Cells(x, 13 + y), 5) = "ASS_A" And Left(Cells(x, 13 + y - 1), 5) <> "ASS_A" Then
                    .Cells(iRow, 7) = Cells(x, 25)
                ElseIf Left(Cells(x, 13 + y), 5) = "ASS_A" And Left(Cells(x, 13 + y - 1), 5) = "ASS_A" Then
                    .Cells(iRow, 7) = Cells(x, 26)
                End If
            End If
        Next
    Next
    .Activate
    Worksheets("EXTRACT").Columns("A:K").EntireColumn.AutoFit
End With
'
Application.ScreenUpdating = True
'
End Sub

Il ne mets pas possible de modifier la référence en ajoutant un caractère, celle-ci se retrouve dans plusieurs bases de données...

Mais je vois une nouvelle réponse de ThauThème que je vais consulter...

Merci à vous deux!!

Çà y est j'y suis

D'après la proposition de ThauThème, tu peux modifier cette partie :

If Cells(x, 21) = "PVC" Then
      Vartext = Split(Cells(x, 9), " - ")(0)
      .Cells(iRow, 4) = Vartext
Else: .Cells(iRow, 4) = Cells(x, 9)
End If

En la remplaçant par :

.Cells(iRow, 4).NumberFormat = "@"
If Cells(x, 21) = "PVC" Then
      .Cells(iRow, 4) = Split(Cells(x, 9), " - ")(0)
Else: .Cells(iRow, 4) = Cells(x, 9)
End If

En espérant n'avoir rien raté dans le reste du code (que je n'ai pas cherché à comprendre...).

Est ce que tu veux dire que je n'ai plus besoin de la variable "Vartext"?

J'ai écris mon code ça:

 If Cells(x, 21) = "PVC" Then
            Vartext = Split(Cells(x, 9), " - ")(0)
            .Cells(iRow, 4).NumberFormat = "@"
            .Cells(iRow, 4) = Vartext
            Else: .Cells(iRow, 4) = Cells(x, 9)
            End If

Est ce que tu veux dire que je n'ai plus besoin de la variable "Vartext"?

J'ai écris mon code ça:

 If Cells(x, 21) = "PVC" Then
            Vartext = Split(Cells(x, 9), " - ")(0)
            .Cells(iRow, 4).NumberFormat = "@"
            .Cells(iRow, 4) = Vartext
            Else: .Cells(iRow, 4) = Cells(x, 9)
            End If

Si le format "Texte" suffit, il n'y a pas besoin d'utiliser une variable intermédiaire. Je ne sais pas si la partie "Else" de ta structure "If" est aussi concernée par ce format spécifique, donc j'avais mis cette instruction .Cells(iRow, 4).NumberFormat = "@" avant la structure "If".

Rechercher des sujets similaires à "instr renvoie texte nombre"