× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > 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
7,99 €Hub 4 ports USB 3.0 Sabrent avec commutateurs à 7,99 €
Valable jusqu'au 24 Novembre

Amazon fait une promotion sur le Hub 4 ports USB 3.0 Sabrent à 7,99 €. On le trouve ailleurs autour de 14 €. 4 commutateurs lumineux vous permettront d'activer ou non chaque port USB 3.0.


> Voir l'offre
39,99 €Tour multiprise parasurtenseur Aukey (6 USB + 12 secteurs) à 39,99 €
Valable jusqu'au 25 Novembre

Amazon fait une promotion sur la tour multiprise parasurtenseur Aukey (6 USB + 12 secteurs) qui passe à 39,99 € livrée gratuitement. Cette multiprise en forme de tour pourra prendre place sur un bureau ou un plan de travail et vous fournir 12 prises de courant et 6 ports USB (2.4 A) pour recharger vos appareils. Câble de 2 mètres fourni. Des protections intégrées protègent vos appareils contre les courants excessifs, la surchauffe et la surcharge. Protection contre la foudre, protection contre les surtensions.


> Voir l'offre
211,64 €Casque sans fil à réduction de bruit Sony WH-1000XM3 (Hi-Res Audio, Bluetooth/NFC) à 211,64 € livré
Valable jusqu'au 25 Novembre

Amazon Allemagne propose actuellement l'excellent casque sans fil à réduction de bruit et Hi-Res Audio Sony WH-1000XM3 à 206,08 €. Comptez 5,56 € pour la livraison en France soit un total de 211,64 € livré. On le trouve ailleurs à partir de 245 €. Jusqu'à 30h d'autonomie avec la fonction de réduction de bruit activée et fonction Quick Attention pour réduire instantanément le volume de votre musique et pouvoir suivre une conversation. 

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


> 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