Effacer une partie d'une cellule Excel
Quentin
-
Quentin -
Quentin -
Bonjour, je suis novice en VBA et j'aimerais réaliser un code qui permetterai d'éffacer une partie d'une cellule excel.
Je m'explique: dans une cellule excel arrive un signal variable de la forme suivante: 1328;2547;127;22328;9837; et ainsi de suite (les nombres entre les ";" varient eux aussi)
- j'aimerais réaliser un code gérer par un bouton pour éffacer la dernière donnée entrante du signal
(ici: 9837;)
- j'aimerais réaliser un code gérer par un bouton pour éffacer les trois premières données
(ici: 1328;2547;127;)
J'ai naturellement pensé à la fonction Clear sur la cellule, mais c'est ici que je manque d'idées et surtout de compétences. J'aimerais me servir des ";" pour dire à quel endroit éffacer comme les nombres varient.
J'ai conscience que ce que je demande est un peu tordu par les cheveux ! Mais ça m'aiderais beaucoup pour mon stage !
Merci d'avance
Je m'explique: dans une cellule excel arrive un signal variable de la forme suivante: 1328;2547;127;22328;9837; et ainsi de suite (les nombres entre les ";" varient eux aussi)
- j'aimerais réaliser un code gérer par un bouton pour éffacer la dernière donnée entrante du signal
(ici: 9837;)
- j'aimerais réaliser un code gérer par un bouton pour éffacer les trois premières données
(ici: 1328;2547;127;)
J'ai naturellement pensé à la fonction Clear sur la cellule, mais c'est ici que je manque d'idées et surtout de compétences. J'aimerais me servir des ";" pour dire à quel endroit éffacer comme les nombres varient.
J'ai conscience que ce que je demande est un peu tordu par les cheveux ! Mais ça m'aiderais beaucoup pour mon stage !
Merci d'avance
Configuration: Windows XP Firefox 3.0.17
5 réponses
-
Bonjour,
c'est possible avec par exemple les fonction InStr et InStrRev. Tu cherches les points-virgules puis tu utilises les fonctions Right et Left.
Je peux t'écrire le code mais j'ai besoin d'infos :
- Dans quelle cellule est ta chaîne de valeurs
- Est-ce que ta chaîne se termine toujours par un point-virgule
- Dans quelle cellule veux-tu écrire le résultat
-
Bonjour,
voici le code qui devrait t'aider.
Copie le dans un module vba et lie la macro à un bouton.
La macro telle qu'elle prend la valeur de la cellule située en B1 (cells(1,2)) à adapter en fonction de tes besoins.
Sub macro()
Dim valeur, longueur, nbre As Variant
valeur = Cells(1, 2) 'valeur est égale à ce que contient la cellule B2 (1ere ligne, 2e colonne)
longueur = Len(a) 'longueur définit le nombre de caractères contenu dans a
nbre = 1
Do While nbre < 4 'permet de boucler afin de supprimer les 3 premières valeurs
Do While Left(valeur, 1) <> ";" 'détermine quelle est la première valeur à gauche de a et la boucle tourne tant que ce n'est pas un ;
longueur = longueur - 1
valeur = Right(valeur, longueur) 'valeur est égale au cointenu de la valeur moins le caratère se trouvant à gauche
Loop
If Left(valeur, 1) = ";" Then 'on supprime le ; qui es tle premier caractère de valeur
longueur = longueur - 1
valeur = Right(valeur, longueur)
End If
nbre = nbre + 1
Loop
If Right(valeur, 1) = ";" Then ' fait la même chose que précédemment sauf que cela supprime la dernière donnée
longueur = longueur - 1
valeur = Left(valeur, longueur)
End If
Do While Right(valeur, 1) <> ";"
longueur = longueur - 1
valeur = Left(valeur, b)
Loop
If Right(valeur, 1) = ";" Then
longueur = longueur - 1
valeur = Left(valeur, longueur)
End If
Cells(1, 1) = valeur
End Sub -
Salut Gord21,
Ma chaîne de valeurs se trouve dans la cellule A300,
La chaîne se termine toujours par ";"
Mais je souhaite seulement supprimer, pas le réecrire dans une autre cellule
merci pour ton aide -
Bonjour,
A essayer (mettre A300 au lieu de A1)
Sub supprimer_dernier() tablo = Split(Range("A1"), ";") If UBound(tablo) - 1 > 1 Then For cptr = 0 To UBound(tablo) - 2 texto = texto & tablo(cptr) & ";" Next Else MsgBox "2 nombres mini " Exit Sub End If Range("A1") = texto End Sub '------------------------------------------------------------------- Sub supprimer_3prem() tablo = Split(Range("A1"), ";") If UBound(tablo) - 1 > 3 Then For cptr = 3 To UBound(tablo) - 1 texto = texto & tablo(cptr) & ";" Next Else MsgBox "3 nombres mini " Exit Sub End If Range("A1") = texto End Sub -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Merci à tous pour ces réponses si rapide
Que dire Michel, ta procédure marche à merveille ! merci beaucoup
Melanie j'ai essayé ta procédure, mais l'erreur 5 apparait.
A quoi correspond "a", c'est ma chaîne de caractère ? Je vais continuer à chercher, j'aimerais bien savoir le faire !
Merci