OVH Cloud OVH Cloud

Tranformer un format texte en nombre

14 réponses
Avatar
Jean Martin
Boujour tout le monde,

J'ai déjà fait appel à plusieurs reprises, et avec succès, à votre sagacité
!
J'ai encore besoin d'aide. Voici:

Dans une feuille "facture", j'ai en D18 (et suivantes en colonne) une donnée
'Quantité' qui sert à calculer, à partir d'un 'Prix Unitaire' (colonne F) le
prix total (colonne G). Il se fait que, pour certains articles en promotion,
je fais précéder de l'apostrophe (') la valeur de la colonne D, ce qui
transforme le nombre en texte et fait apparaître l'indication "promo" dans
la colonne du prix unitaire (colonne F).

Une macro que vous m'avez aidé à construire recopie chaque ligne facture
dans une feuille 'récap' qui cumule les unes en-dessous des autres les
lignes des factures successives. Cette récap me sert à calculer le stock.
Mais voilà! les données 'texte' de la colonne D restent des données textes
dans la feuille 'récap' et les données correspondantes échappent au
recensement du stock.

Question: quelle procédure pourrait-on imaginer pour supprimer, dans la
colonne D de la feuille 'récap' tous les signes 'apostrophe' (') afin de
redonner une valeur numérique aux éléments qui en sont affectés?

Merci pour toute aide!

Jean

4 réponses

1 2
Avatar
Papyty
Bonjour Jean
Le probleme vient de la modification que tu as apporté sur la sélection des
cellules.
l'ajout de with n'à pas beaucoup d'interet mais si tu le veux voici ce que
ça donne

With Sheets("récap")
.Range("d2:d" & Range("d65536").End(xlUp).row).Select
For Each Cel In Selection
Range(Cel.Address) = Cel * 1
Next Cel
End With

@+
Thierry


Bonsoir Jean
Je suis content que tu vois ma réponse car pour moi le message n'est pas
disponible sur le serveur.
Je n'ai pas réussi à recreer ton probleme chez moi ça marche bien.
Peux tu poster le bout de macro avec ta modification?
peut etre une erreur
@+
Thierry

Merci Thierry.

La démarche me plait. Il y a bien eu un petit problème pour la sélection de
la première ligne. J'ai trouvé un succédané à l'aide de l'enregistreur.
Là où le système bloque, c'est à la ligne [Range(Cell.address)Îll*1].
J'obtiens un message: [Erreur d'exécution '13': Incompatibilité de type]

Quid faciam, miser?

Merci de vos solutions

Jean

"Papyty" a écrit dans le message de
news:1l2de8bdh2uk0$
Bonsoir Jean
A mettre à la fin de ta procédure qui cré le récap
la plage est à adapter je suis parti de D2

Sheets("récap").Range("d2:d" & Range("d65536").End(xlUp).Row).Select
For Each Cel In Selection
Range(Cel.Address) = Cel * 1
Next Cel

Est ce que ça te convient?
@+
Thierry






Avatar
Frédéric Sigonneau
Bonjour,

Pour ôter les apostrophes qui marquent une cellume comme du texte, cette petite
procédure, adaptée d'une proposition de John Walkenbach (la procédure originale
balayait toute la plage utilisée de la feuille active), peut t'intéresser :

Sub ZapPrefixes()
For Each cell In _
ActiveSheet.Range("D1:D" & Cells(Rows.Count, "D").End(xlUp).Row)
If cell.PrefixCharacter <> "" Then
cell.Formula = cell.Formula
End If
Next cell
End Sub

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Merci à A.V., Daniel.j et D.V.
Les solutions proposées (basées sur la fonction 'substitue' supposent une
réorganisation de tout mon système. A défaut d'autre chose je m'y résoudrai.
Mais je préférerais de loin une procédure VBA qui, à chaque ajout dans ma
récap, vérifie s'il y a un signe apostrophe dans la colonne D et le fait
disparaître donnat ainsi une valeur numérique à la donnée concernée.

Merci de ce complément !

Jean


Avatar
Jean Martin
Bonsoir Frédéric,

Tu me donnes là une proposition géniale. Je l'adopte.
Cela ne m'empêche pas toutefois de chercher à résoudre la difficulté surgie
avec Thierry.

Merci très bien

Jean


"Frédéric Sigonneau" a écrit dans le message
de news:
Bonjour,

Pour ôter les apostrophes qui marquent une cellume comme du texte, cette
petite

procédure, adaptée d'une proposition de John Walkenbach (la procédure
originale

balayait toute la plage utilisée de la feuille active), peut t'intéresser
:


Sub ZapPrefixes()
For Each cell In _
ActiveSheet.Range("D1:D" & Cells(Rows.Count, "D").End(xlUp).Row)
If cell.PrefixCharacter <> "" Then
cell.Formula = cell.Formula
End If
Next cell
End Sub

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Merci à A.V., Daniel.j et D.V.
Les solutions proposées (basées sur la fonction 'substitue' supposent
une


réorganisation de tout mon système. A défaut d'autre chose je m'y
résoudrai.


Mais je préférerais de loin une procédure VBA qui, à chaque ajout dans
ma


récap, vérifie s'il y a un signe apostrophe dans la colonne D et le fait
disparaître donnat ainsi une valeur numérique à la donnée concernée.

Merci de ce complément !

Jean





Avatar
Papyty
Salut Jean
Aprés plusieur tests effectivement une erreur 13 est générée lorsqu'il y a
du texte dans les cellules de la colonne D autre que des chiffres
il faut donc faire le test que propose Frederic (If).

For Each Cel In _
Sheets("récap").Range("D2:D" & Range("d65536").End(xlUp).row)
If Cel.PrefixCharacter = "'" Then
Range(Cel.Address) = Cel * 1
End If
Next Cel

@+
Thierry

Bonjour Jean
Le probleme vient de la modification que tu as apporté sur la sélection des
cellules.
l'ajout de with n'à pas beaucoup d'interet mais si tu le veux voici ce que
ça donne

With Sheets("récap")
.Range("d2:d" & Range("d65536").End(xlUp).row).Select
For Each Cel In Selection
Range(Cel.Address) = Cel * 1
Next Cel
End With

@+
Thierry


Bonsoir Jean
Je suis content que tu vois ma réponse car pour moi le message n'est pas
disponible sur le serveur.
Je n'ai pas réussi à recreer ton probleme chez moi ça marche bien.
Peux tu poster le bout de macro avec ta modification?
peut etre une erreur
@+
Thierry

Merci Thierry.

La démarche me plait. Il y a bien eu un petit problème pour la sélection de
la première ligne. J'ai trouvé un succédané à l'aide de l'enregistreur.
Là où le système bloque, c'est à la ligne [Range(Cell.address)Îll*1].
J'obtiens un message: [Erreur d'exécution '13': Incompatibilité de type]

Quid faciam, miser?

Merci de vos solutions

Jean

"Papyty" a écrit dans le message de
news:1l2de8bdh2uk0$
Bonsoir Jean
A mettre à la fin de ta procédure qui cré le récap
la plage est à adapter je suis parti de D2

Sheets("récap").Range("d2:d" & Range("d65536").End(xlUp).Row).Select
For Each Cel In Selection
Range(Cel.Address) = Cel * 1
Next Cel

Est ce que ça te convient?
@+
Thierry








1 2