[Déplacé .Net --> VBA] EXTRAIRE UNE CHAINE DE CARACTAIRE DE DROITE VERS GAUCHE S

siva12 Messages postés 8 Date d'inscription vendredi 29 janvier 2010 Statut Membre Dernière intervention 16 avril 2010 - 30 janv. 2010 à 13:34
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 2 févr. 2010 à 21:59
COMMENT EXTRAIRE UNE CHAINE DE CARACTAIRE SUR EXCEL DE DROITE VERS GAUCHE.
LA FONCTION =STXT()PERMET DE PERMET DE REALISER CETTE FONCTION DE GAUCHE VERS LA DROITE

15 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
30 janv. 2010 à 13:57
D'abord, on dit bonjour
Ensuite, on évite d'écrire en majuscules, l'époque du minitel est révolue !
Enfin, on choisit la bonne catégorie pour la question.

Définition de EXTRAIRE ?
Exemple de ce que tu cherches à faire
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
30 janv. 2010 à 15:21
Bonjour,
1) +1 avec tout ce que vient de dire Jack
2)et ta question est assez ambigüe :
--- si tu veux extraire les caractères à DROITE ce que tu veux n'est même pas du VBA, mais une formule Excel... !
Sur une feuille :
en cellule B1 (exemple) :
formule ===>>> =DROITE(A1;3)
écris ce que tu veux en A1 et regarde ...
Elle te renvoit les 3 caractères à droite de ce qui est en A1

---- si par contre du veux inverser ta chaîne, c'est autre chose et il te faut ;
a) écrire une fonction dans un module :
Public Function a_l_envers(quoi As Range) As String
  a_l_envers = StrReverse(quoi.Value)
End Function

b) appeler cette fonction dans une cellule ... exemple :
=a_l_envers(A1)

mis dans la cellule B1 t'écrira en B1 l'envers de vce qui est écrit en A1

Je te rappelle (à tout hasard et on ne sait jamais) : que tu ne peux modifier par formule une cellule "sur celle-même" (références circulaires garanties !)
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
siva12 Messages postés 8 Date d'inscription vendredi 29 janvier 2010 Statut Membre Dernière intervention 16 avril 2010
1 févr. 2010 à 18:13
Bonjour, je suis nouveau sur ce site et je n'y connais pas grand chose, je découvre.
Je me suis mal exprimé peut être sur mes messages précédents. Enfin ce que je souhaiterais avoir :

si ma cellule A1 est 36498 je voudrais comme réponse dans les cellules (L1=8 ; K1=9 ; J=4 ; I=6 ; H=3 ; G=0 et F=0 etc....)

si ma cellule A1 est 876 je voudrais comme réponse dans les cellules (L1=6 ; K1=7 ; J=8 ; I=0 ; H=0 ; G=0 et F=0 etc....)

C'est à dire mon chiffre d'unité de la cellule A1 apparaîse toujours dans la cellule L1 ; mon chiffre de dixaine dans la cellule K1 ; mon chiffre de centairne dans la cellule J1 ect...)

Pourriez-vous m'aider soit créer un macro ou créer une formule sur excel
merci d'avance
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
1 févr. 2010 à 19:44
Ah ...
1) Il était temps d'exprimer clairement ce que tu cherches à faire ...
2) juste une question (car je ne vois pas réellement l'utilité de la "manoeuvre") : s'aghit-il d'un exercice scolaire ?

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
1 févr. 2010 à 21:16
si ma cellule A1 est 36498 je voudrais comme réponse dans les cellules (L1=8 ; K1=9 ; J=4 ; I=6 ; H=3 ; G=0 et F=0 etc....)


ton "etc..." est préoccupant ! Précise donc jusqu'où !


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
1 févr. 2010 à 21:25
Et tu ferais à mon avis mieux de te lancer directement vers l'utilisation de VBA, plutôt que dans ce bidouillage-là (avec des formules partout). Je t'ai parlé (plus haut) de la fonction strReverse. Intéresse-toi maintenant à la fonction Format, puis aux boucles et... ===>>> VBA et non formules !


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
siva12 Messages postés 8 Date d'inscription vendredi 29 janvier 2010 Statut Membre Dernière intervention 16 avril 2010
2 févr. 2010 à 03:13
En faite mon 36498 est mon résultat (total) d'une opération d'un mois. Il peut varier d'un mois à l'autre en fonction des chiffres. Ce chiffre 36498 est dans une cellule que je reporte sur un autre emplacement de ma feuille de calcul formatée et je dois la remettre à l'administration. Cette feuille de calcul formatée est sous forme de tableau donc j'affecte chiffre par chiffre dans chaque cellule. Le chiffre des unités ne changera jamais d'emplacement (L1, le chiffre des dixaines sur K1 etc). Le nombre de caractaire maxi de ma cellule A1 est limité à 20 chiffres.
Je ne sais pas je me suis bien exprimé.
Merci de votre aide.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
2 févr. 2010 à 08:21
Alors ;
1) déjà, si le nombre maximum de caractères est 20, je vois mas comment le dernier pourrait être dans la colonne L !
2) tu n'as pas besoin d'aller "de la droite vers la gauche" ! Il te suffit de transformer (exemple) 3198 en 00000000000000003198 puis de traiter de la gauche vers la droite !
VBA te le permet à l'aide de la fonction format dont je t'ai parlé :
format(398, string(20,"0")) retourne précisément "00000000000000003198" qu'il te treste à traiter de gauche à droite en partant de la colonne B, tout bêtement !
3) il te faudra de préférence utiliser VBA et non des formules partout !
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
2 févr. 2010 à 08:34
mais si tu tiens absolument à ne te servir que de formules Excel (et à en mettre partout), tu le peux en utilisant de manière imbriquée NBCAR (pour calculer la longueur nb de la chaine et y ajouter 20 - nb "0") et en appliquant STXT à ce résultat (où tu définis le point de départ en fonction de la cellule (12 pour colonne B, 2 pour colonne C, etc...) recevant la formule et le nombre de caractères à 1)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
2 févr. 2010 à 09:40
Exemple de formule :
=STXT(REPT(0;20 -NBCAR(A2)) & A2;18;1)

te retournera le 18ème caractère de la chaîne "00000000000000000456", à savoir "4", en te rappelant que 456 a été transformé en "00000000000000000456" par la fonction REPT à laq<uelle on a passé les paramètres 0 (le caractère à répéter), 20 - 3 = 17 (3 étant la longueur de A2, obtenue par NBCAR), puis par concaténation (&) avec A2.
Voilà ta formule à répéter partout, en changeant 18 par 1 en colonne B, par 2 en colonne C, etc...)
Je n'aime rien de tout celà et VBA me plait mille fois plus ....
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
siva12 Messages postés 8 Date d'inscription vendredi 29 janvier 2010 Statut Membre Dernière intervention 16 avril 2010
2 févr. 2010 à 21:09
Merci beaucoup pour votre aide. Est-il possible de créer cette formule en VBA. Je souhaiterais comprendre un peu plus en VBA. Si vous pouviez m'aider ça serrait bien. Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
2 févr. 2010 à 21:16
Il est bien évidemment possible de créer cette formule en VBA (enfin ... ce ne serait pas une formule à proprement parler, mais l('appel, depuis la cellule, à une fonction mise dans un module.. et je t'ai montré un exemple plus haut de cette méthode).
Le résultat serait le même : multiplication d'a^ppels depuis des cellules !
Il est par contre possible et plus judicieux de traiter directement par VBA pour attribuer des valeurs à des cellules.
Pour cela, je ne te suivrai certes pas tant que tu n'auras pas commencer par apprendre (c'est facile à l'aide de la seule lecture de ton aide en ligne ... comme moi !...) les bases même de l'apprentissage à VBA. Toute autre méthode ne conduirait qu'à un bête copier/coller de code, sans rien y comprendre (et le moins que je puisse en dire est que je n'aime pas !)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
2 févr. 2010 à 21:34
je ne sais pas, moi,...
Commence pas à pas, sans nécessairement aller d'emblée au plus complexe ...
Voyons par exemple cette partie de la formule que je t'ai donnée :
REPT(0;20 -NBCAR(A2)

Que fait-elle ? elle met le contenu de A2 au sein d'une chaîne de 20 caractères "0"
Sous VBA, soit x (ton A2) la chaine à traiter, ce serait :
Format(x, string(20,"0")

Commence par t'exercer à ce tout petit pas là en VBA.
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
2 févr. 2010 à 21:53
Et tout (de cet abrutisense) a ainsi été "bâti" !
l'IDE ne dénoncerait (en mode création) aucune erreur si l'on écrivait par exemple :
MsgBox Range(Cells("A1")).Rows.Address


Rows serait proposé après le 1er ., Address serait proposé après le 2ème .
Il faudra attendre l'exécution pour constater une erreur pourtant fondamentale
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
2 févr. 2010 à 21:59
Et zut ...
C'était là une réponse dans une autre discussion...
Pas compris comment elle a atterri ici !
A supprimer si possible ....


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0