Oter une chaine de caractères

Polygos - Modifié le 30 août 2019 à 19:37
vb95 Messages postés 3473 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 30 avril 2024 - 31 août 2019 à 00:17
Bonjour
quand on galère, on demande de l'aide, car on ne voit plus rien.
pour ajouter un caractère sur une chaine j'utilise &.
Dans ce cas, j'ai une chaine qui génère une suite avec séparateurs ///
il s'agir de colonnes qui comprennent des O là ou la colonne est appliquée; un tableau de caractéristiques en somme..

La valeur de la cellule produite est donc la concaténation des titres des colonnes ou on trouve la valeur "O" (cellules 6, col - 4, col et 5, col), séparés par un séparateur ///

Donc je code
For Lig = 8 To DL
        For Col = 128 To 144

            If Cells(Lig, Col) = "O" Then
            Cells(Lig, 19) = Cells(6, Col) & "///" & Cells(Lig, 19) 'Ru
            Cells(Lig, 20) = Cells(4, Col) & "///" & Cells(Lig, 20) 'En
            Cells(Lig, 21) = Cells(5, Col) & "///" & Cells(Lig, 21) 'Fr
            Else
            End If
        Next Col
    Next Lig


Ce qui me donne titre colonne col///titre colonne suivante etc. dès lors que la valeur O se trouve bien à l'intersection de la ligne du produit et de la colonne sondée

Mais en faisant ça le dernier caractère est forcément ///
et ça je ne voudrais pas.
Comment oter ce dernier /// ?

Merci de vos lumières

1 réponse

vb95 Messages postés 3473 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 30 avril 2024 169
31 août 2019 à 00:17
Bonjour

Mon raisonnement
Au premier coup que
Cells(Lig, Col) = "O" 
on a
Cells(Lig, 19) = Cells(6, Col) & "///" & Cells(Lig, 19)

Pour les 2 autres lignes le raisonnement est le même
Si
Cells(Lig, 19)
est vide on ajoute les \\\ à la fin
Donc si la cellule est vide il ne faut pas mettre les \\\

donc il faut tester à chaque fois si la Cellule est vide car on ne sait pas où
Cells(Lig, Col) = "O"

J'ai fait une Sub pour ne pas répéter 3 fois le même traitement (il n 'y a que 2 numéros qui changent => 19-6 puis 20-4 puis 21-5 )

Le code ( sous toute réserve )
For Lig = 8 To DL
      For Col = 128 To 144
           If Cells(Lig, Col) = "O" Then
                 GetCellule(Lig, Col, 19, 6) ' Ru
                 GetCellule(Lig, Col, 20, 4) ' En
                 GetCellule(Lig, Col, 21, 5) ' Ru
           End If
      Next Col
Next Lig

' Sub pour les 3 lignes de code avec GetCellule
Private Sub GetCellule(Ligne as Integer, Colonne as Integer, NumCol as Integer, NumLig as Integer 
      
     Dim Slash as String = "\\\" ' on suppose qu'il y a les 3 \\\
     If Cells(Ligne, NumCol) = "" Then Slash = "" ' si cellule vide pas de \\\
     Cells(Ligne, NumCol) = Cells(NumLig, Colonne) & Slash & Cells(Ligne, NumCol)

End sub



0
Rejoignez-nous