> Tous les forums > Forum Bureautique
 Récupération de caractères dans cellulesSujet résolu
Ajouter un message à la discussion
Pages : [1] 2 ... Fin
Page 1 sur 2 [Fin]
SN
  Posté le 11/11/2008 @ 15:59 
Aller en bas de la page 
Nouvelle astucienne

Bonjour,

J'ai un problème de formule que je n'arrive pas à résoudre sur Excel :

je cherche à extraire d'une liste en colonne les premières et dernières valeurs numériques;

exemple :

10 S/chemise violine 4 => je veux récupèrer 10 et 4 pour en faire le produit

ou 5 LR06 - 1,5 V 25

ou 200 S/chemise bleue 2

ou 2 Marqueur noir 1,5

J'ai écrit les formules suivantes :

- pour le premier nombre (10) : =GAUCHE(cellule concernée;CHERCHE(" ";cellule concernée;1))

- pour le second (4) : =DROITE(cellule concernée;(CHERCHE(" ";cellule concernée)-1))

Ces formules fonctionnent sauf pour si le premier nombre dépasse 2 chiffres et/ou si le dernier est un décimal.

Pouvez-vous m'indiquer où se situe mon erreur?

Merci pour votre aide

Shn





Publicité
Marmotte18
 Posté le 11/11/2008 à 16:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour SN,

En principe, on ne cherche pas à faire des calculs avec du texte. On met les :

  1. les quantités dans une colonne
  2. les libellés (les noms d'article) dans une autre
  3. les prix unitaires dans une autre aussi

Peux-tu nous fournir un petit fichier tests avec des données bidon en cliquant sur le lien suivant :

http://cjoint.com/index.php

Si tes informations texte sont dans la colonne A à partir de A1, alors tu peux mettre en B1 la formule qui te permets de récupérer les quantités :

=CNUM(GAUCHE(A1;CHERCHE(" ";A1)-1))

Pour récupérer les prix unitaires, je te propose de fabriquer une fonction par macro qui inverse le contenu d'une cellule. Je vais l'appeler "InverseContenu". fais en un copier-coller dans un module de l'éditeur VBA rattaché à ce classeur.

Public Function InverseContenu(ByVal Cellule) As String
'Inverse l'ordre des lettres dans la cellule choisie
'===================================================
Dim I As Integer, CelluleInversée As String

For I = Len(Cellule) To 1 Step -1
CelluleInversée = CelluleInversée & Mid(Cellule, I, 1)
Next I

InverseContenu = CelluleInversée

End Function

Une fois que tu auras mis cette fonction dans une macro, tu pourras t'en servir dans les calculs

En C1, mets alors la formule :

=CNUM(InverseContenu(GAUCHE(InverseContenu(A1);CHERCHE(" ";InverseContenu(A1))-1)))

=> tu devrais récupérer à coût sûr ton prix unitaire.

Une petite gâterie : voilà un fichier tout prêt avec la fonction et les formules en place : http://cjoint.com/?llrcClHMFR



Modifié par Marmotte18 le 11/11/2008 17:06
galopin01
 Posté le 11/11/2008 à 17:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonsoir,

Une "autre" 'tiote fonction personnalisée ?

...à coller dans un module standart (Module1)

Function SPEC(o As Range)
v = Split(o)
SPEC = v(0) * v(UBound(v))
End Function

Ensuite pour calculer la colonne A écrire :

=SPEC(A1)

Puis tirer la formule vers vers le bas



Modifié par galopin01 le 11/11/2008 17:04
Marmotte18
 Posté le 11/11/2008 à 17:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonsoir galopin01,

Function SPEC(o As Range)
v = Split(o)
SPEC = v(0) * v(UBound(v))
End Function

Ensuite pour calculer la colonne A écrire :

=SPEC(A1)

Puis tirer la formule vers vers le bas

Ta fonction ne marche pas. Elle n'apporte pas les valeurs escomptées.

Cf. le fichier joint : http://cjoint.com/?llrlH2qfEo

galopin01
 Posté le 11/11/2008 à 17:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

Marmotte ... D'habitude c'est moi qui code avec le pied ! Mais là... t'es à coté de tes pompes

A+

Marmotte18
 Posté le 11/11/2008 à 17:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

He galopin01,

Ne te fais pas prier ! Donne-nous ton savoir faire et des explications convaincantes.

Je t'écoute avec intérêt à moins que tu ne désires pas t'exprimer



Modifié par Marmotte18 le 11/11/2008 17:29
galopin01
 Posté le 11/11/2008 à 17:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien
Message original par SN

10 S/chemise violine 4 => je veux récupèrer 10 et 4 pour en faire le produit

Marmotte...

Tu appelles ça Prix Unitaire ?

A+

galopin01
 Posté le 11/11/2008 à 17:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Sorry... mais je n'étais pas du tout dans ta démarche :

ma fonction renvoie directement le produit recherché sans faire de colonne intermédiaire.

A+

Marmotte18
 Posté le 11/11/2008 à 17:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

galopin01,

Blague mise à part, tu es excellent ! sauf ....... peut-être ....... dans les explications à l'origine. Avec ton 2ème commentaire, on voit mieux ce que tu apportes comme résultat.

Toutefois, si ce n'est pas trop te demander. Pourrais-tu nous décortiquer ta macro en français afin que l'on comprenne le code ?

Merci par avance et de toute façon BRAVO

Publicité
galopin01
 Posté le 11/11/2008 à 17:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Euh...

Yapa grand chose à décortiquer :

Split charge un tableau (Array) de base 0 avec les strings séparés par des espaces.

J'aurai aussi pu écrire :

Function SPEC(o As Range)
Tablo = Split(o)
SPEC = Tablo(0) * Tablo(UBound(Tablo))
End Function

On peut regarder dans une Sub le fonctionnement de Split

Sub SPEC()
Tablo = Split(Range("A1").Value)
MsgBox Tablo(0)
MsgBox Tablo(1)
MsgBox Tablo(UBound(Tablo))
'UBound(Tablo) renvoie l'indice max de Tablo...
End Sub

Dans cette dernière macro si on charge Tablo avec les mots d'une phrase on obtient la liste des mots de cette phrase.

Est-ce plus clair ?

A+



Modifié par galopin01 le 11/11/2008 17:54
Marmotte18
 Posté le 11/11/2008 à 18:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

galopin01,

En fait, je viens d'apprendre quelque chose car je ne connaissais ni UBOUND ni SPLIT.

Merci

SN
 Posté le 11/11/2008 à 18:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne

merci à tous deux

juste pour info, si les données sont dans la même cellule, c'est tout bêtement qu'il s'agit d'une récupération d'autres fichiers

la (les) soluce(s) me pose(nt) quand même problème :

j'ai copié le fichier avec les 2 solutions: si j'insère une ligne sup, la première valeur est calculée correctement, mais pas la seconde.

cf copie ci-dessous (pour obtenir #NOM?, je ctrl-B)

10 S/chemise violine 4 10 4
5 LR06 - 1,5 V 25 5 25
200 S/chemise bleue 2 200 2
2 Marqueur noir 1,5 2 1,5
1254 crayons 3,17 1254 3,17
3 voitures 6512,34 3 6512,34
12 bidons 3,78 12 #NOM?

et dans module 1, comment lancer la macro? quand je veux executer le module, cela m'envoie sur la boite de dialogue "executer une macro" qui est vide.

désolée d'être aussi neu neu

Shn

galopin01
 Posté le 11/11/2008 à 18:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Voici une autre démo de l'utilisation de split : la phrase est chargée dans un Array

Yapuka générer une suite de nombre de nombre aléatoire puis tirer les mots de l'Array dans cet ordre. La suite de la macro de mélange n'a ici aucune importance : Il suffit de bien comprendre qu'on à généré un tableau de Ubound() +1 éléments, après on les restitue dans l'ordre qui convient...

Sub Melange()
Dim tablo$(), i%, j%, k%, x%, Arr
tablo() = Split("ceci est une demo de melange aléatoire des mots d'une phrase")
k = UBound(tablo())
'Cette routine génére les nombres de
'0 à k dans un ordre aléatoire
Application.ScreenUpdating = False
Randomize
ReDim Arr(0 To k)
For i = 0 To k
Arr(i) = i
Next
'permutation
For i = k To 0 Step -1
x = Int(((i) * Rnd))
j = Arr(x)
Arr(x) = Arr(i)
Arr(i) = j
mixage = mixage & " " & tablo(Arr(i))
Next
MsgBox mixage
Arr = Clear
End Sub

A+

galopin01
 Posté le 11/11/2008 à 18:37 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

SN :

Ma fonction ne s'exécute pas ! Elle s'utilise comme une fonction Excel.

La démo

A+

Marmotte18
 Posté le 11/11/2008 à 18:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

SN,

Il n'y a pas de macro à lancer c'est une fonction. Il suffit de copier la formule du dessus dans la cellule ou de tirer la formule vers le bas.

Marmotte18
 Posté le 11/11/2008 à 18:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

galopin01,

Ta découpe d'une phrase en noms ne fonctionne pas bien si l'on imagine :

  1. il y a au moins un espace devant la phrase
  2. il y a au moins un espace en fin de phrase
  3. il y a plus d'un espace entre 2 mots

Le même problème se pose avec ta solution pour SN

D'ailleurs, je viens de modifier mes formules en conséquence :

En B2 :

=CNUM(GAUCHE(SUPPRESPACE(A2);CHERCHE(" ";SUPPRESPACE(A2))-1))

En C2 :

=CNUM(InverseContenu(GAUCHE(InverseContenu(SUPPRESPACE(A2));CHERCHE(" ";InverseContenu(SUPPRESPACE(A2)))-1)))

Ci-joint le fichier rectifié : http://cjoint.com/?llsXdXcdrt



Modifié par Marmotte18 le 11/11/2008 18:52
SN
 Posté le 11/11/2008 à 18:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne

SN,

Il n'y a pas de macro à lancer c'est une fonction. Il suffit de copier la formule du dessus dans la cellule ou de tirer la formule vers le bas.

ben oui, c'est ce que j'essaie de faire depuis le début, mais ça me colle systématiquement un #NOM? dans la cellule du dessous.

Publicité
SN
 Posté le 11/11/2008 à 19:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne

Ci-joint le fichier rectifié : http://cjoint.com/?llsXdXcdrt

Nbe
Marmotte
Prix unitaire
Marmotte
Coût
Marmotte
Coût
Galopin01
10 S/chemise violine 4 10 4 40 40
5 LR06 - 1,5 V 25 5 25 125 125
200 S/chemise bleue 2 200 2 400 #VALEUR!
2 Marqueur noir 1,5 2 1,5 3 3
1254 crayons 3,17 1254 3,17 3975,18 3975,18
3 voitures 6512,34 3 6512,34 19537,02 #VALEUR!
2 bahuts 65 kg 80 x 70 x 150 1215,01 2 1215,01 2430,02 #VALEUR!
12 bidons 3,78 12 3,78 45,36 45,36
45 kjhrgefljh 22,5 45 #NOM? #NOM? #NOM?

Marmotte18
 Posté le 11/11/2008 à 19:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

SN,

As-tu essayé avec le dernier fichier que j'ai envoyé ? Cela fonctionne très bien chez moi.

Fais un copier de la formule du dessus puis fait un coller dans la cellule juste en dessous.

SN
 Posté le 11/11/2008 à 19:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne

As-tu essayé avec le dernier fichier que j'ai envoyé ? Cela fonctionne très bien chez moi.

Fais un copier de la formule du dessus puis fait un coller dans la cellule juste en dessous.

oui; je l'ai mis en copie dans ma précédente réponse; j'essaie en copiant-collant et/ou recopiant vers le bas, mais ça ne fonctionne toujours pas sur mon poste...

galopin01
 Posté le 11/11/2008 à 19:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Les #VALEUR! dans ma méthode sont causés par des espaces parasites invisibles à la fin des tes références.

Pour contourner ce problème tu peux modifier la fonction de la manière suivante :

Function SPEC(o As Range)
v = Split(Trim(o))
SPEC = v(0) * v(UBound(v))
End Function

Pour la dernières ligne je n'ai pas d'explication : ça marche bien chez moi. Il faudrait voir sur ton "vrai" fichier qu'est-ce qui coince...

A+

SN
 Posté le 11/11/2008 à 19:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne

OK; je me replonge dedans tout à l'heure.

merci en tous cas à vous deux pour votre patience

Shn

Marmotte18
 Posté le 11/11/2008 à 19:54 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonsoir,

Voilà un nouveau fichier après la correction de notre ami galopin01 :

http://cjoint.com/?lltU6S4OTa

Nous sommes parfaitement d'accord sur les résultats !

Encore 3 nouvelles instructions que je ne connaissais pas :

  • Trim(chaîne de caractères) => supprime tous les espaces à gauche et à droite de la chaîne
  • Ltrim(chaîne de caractères) => supprime tous les espaces à gauche de la chaîne
  • Rtrim(chaîne de caractères) => supprime tous les espaces à droite de la chaîne

Dis-moi où peut-on avoir la liste exhaustive des instructions, des fonctions et des variables VBA ?

Dans l'aide,me diras-tu ! Mais encore ?

SN
 Posté le 11/11/2008 à 20:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne

Un grand merci à tous les deux,

Votre formule avait toujours un soucis lorsque je rajoutais des lignes

J'ai fait le test sur un autre ordinateur et là tout fonctionne

merciiiiiiiiiii

galopin01
 Posté le 11/11/2008 à 21:04 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Marmotte... Effectivement tu as répondu toi-même !

On peut y accéder de différente manière. Dans Excel 2003 et VBA le menu "?" (à droite du menu fenêtre) fournit de manière très structurée la totalité de la documentation.

Dans la barre d'outils "Standart" de VBA le même point d'interrogation développe la même arborescence de cette volumineuse documentation...

Les 2 premières parties sont essentielles (ce qui ne signifie pas que la 3ème peut-être négligée !)

Et dans la deuxième partie "Documentation..." Visual Basic - Manuel de référence du langage tu y trouveras tout ce que tu peux souhaiter?

A titre indicatif j'ai encore quelques éditions papier de cette aide qui date d'une époque ou VBA était encore "succinct" (Excel 2 à Excel 5...) et tous les bouquins étaient fournis avec. ça tient en quelques tomes (toutes versions confondues un bonne vingtaine de cm) sur mon étagère... Et encore j'ai du en semer quelques uns en cours de route !

J'imagine sans peine que au stade du développement actuel si on voulait éditer cette aide dans des livres, une étagère entière de ma bibliothèque n'y suffirait pas...

De toute façon l'aide actuelle avec tous ses liens hypertextes, est bien plus maniable que ne l'étaient les nombreux volumes fournis.

A+



Modifié par galopin01 le 11/11/2008 21:05
Marmotte18
 Posté le 14/11/2008 à 18:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Merci galopin01, pour ton aide précieuse !

C'est toi que je devrais mettre dans mon UC et connecté à la touche F1 !

Publicité
Pages : [1] 2 ... Fin
Page 1 sur 2 [Fin]

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
33,76 €Micro clé USB 3.1 Sandisk Ultra Fit 256 Go à 33,76 € livrée
Valable jusqu'au 26 Février

Amazon Allemagne fait une promotion sur la micro clé USB Sandisk Ultra Fit d'une capacité de 256 Go qui passe à 29,24 € (avec la TVA ajustée). Comptez 4,52 € pour la livraison en France soit un total de 33,76 € livrée. La minuscule taille de cette clé USB va vous permettre de la laisser brancher en permanence sur votre portable, votre TV ou votre autoradio sans qu'elle dépasse de manière disgracieuse. Sa compatibilité USB 3.1 lui permet d'atteindre des débits jusqu'à 130 Mo/s. 

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et il n'y a pas de douanes. Si vous êtes perdu en allemand, vous pouvez traduire le site en anglais.


> Voir l'offre
92,35 €Disque dur externe portable Maxtor M3 USB 3.0 4 To à 92,35 €
Valable jusqu'au 03 Mars

Amazon propose actuellement le disque dur externe portable Seagate M3 4 To à 92,35 € livré gratuitement. Le disque dur dispose d'une connectique USB 3.0 compatible USB 2.0 et offre des débits d'environ 115 Mo/s en lecture et écriture. Seagate ayant racheté les branches disques durs de Samsung et Maxtor, vous pouvez donc trouver le logo Maxtor, Samsung ou Seagate sur ce disque dur M3. 


> Voir l'offre
79,99 €Kit 5.1 Logitech Z607 bluetooth à 79,99 €
Valable jusqu'au 01 Mars

Amazon fait une promotion sur le kit d'enceintes 5.1 Logitech Z607 qui passe à 79,99 € livré gratuitement alors qu'on le trouve ailleurs autour de 125 €. Ce kit dispose d'un caisson de basses, d'une voie centrale et de 4 satellites offrant au total  une puissance de crête de 160 Watts et 80 Watts en puissance RMS. De quoi profiter pleinement de vos films et de vos jeux dans une pièce moyenne. D'autant que des câbles extra-longs (6,2 m) sont fournis pour les satellites arrières. Grâce à ses entrées 3.5mm et RCA, vous pourrez relier le kit à un PC, à une console de jeux, un lecteur DVD/Blu-Ray tandis que sa connexion bluetooth vous permettra de l'utiliser pour vos appareils sans fil. Vous pouvez même lui brancher directement une carte mémoire ou une clé USB et écouter la radio FM. Une télécommande (sans fil) vous permettra de contrôler tout cela. Une excellente affaire !


> Voir l'offre

Sujets relatifs
Supprimer x caractères dans plusieurs cellules
[Extraction dans cellules]
Relier des choix à des cellules dans excel
Récupération dates dans tableau excel 2007
Ecrir par macro dans des cellules différents
chercher chaîne de caractères VBA dans plusieurs fichiers XL
Calculer date en fonction d'une valeur dans une plage de cellules
soustraction dans cellules Open Office Calc
OO Calc insérer un chiffre alternativement dans les cellules.
Récupération d'une adresse free dans Gmail
Plus de sujets relatifs à Récupération de caractères dans cellules
 > Tous les forums > Forum Bureautique