• Initiateur de la discussion Initiateur de la discussion BRUNO62
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

BRUNO62

XLDnaute Occasionnel
Bonsoir,

Cette macro fonctionne très bien, mais je souhaite mais je voudrais que la conversation se fasse que sur les colonne B,C,D sur une feuil1
Avez vous une idée ? Merci

Sub ConversionNumerique()
ActiveSheet.UsedRange.Select
For Each cell In Selection
If Left(CStr(cell.Formula), 1) <> "=" Then
On Error Resume Next
cell.Value = CDbl(cell) 'S'il n'y a que des entiers on peut mettre Clng(cell)
If cell = 0 Then cell.ClearContents
cell.NumberFormat = "General"
End If
Next
End Sub

Bonne soirée
A+
 
Re : Modifier macro

Salut BRUNO62 et le forum
Cette macro fonctionne très bien, mais je souhaite mais je voudrais que la conversation se fasse que sur les colonne B,C,D sur une feuil1
Et tu discute bien avec ? 😉
Code:
Sub ConversionNumerique()
On Error Resume Next
For Each cell In Sheet("Feuil1").Range("B1:D" & _
              Sheet("Feuil1").Range("A1").SpecialCells(xlCellTypeLastCell).Row)
    If Left(cell.Formula, 1) <> "=" Then
        cell = CDbl(cell) 'S'il n'y a que des entiers on peut mettre Clng(cell)
        If cell = 0 Then cell.ClearContents
        cell.NumberFormat = "General"
    End If
Next
End Sub
Je n'aime pas utiliser "On Error Resume Next", mais le mettre dans une boucle ne sert à rien => il faut réaffecter On error pour que le Resume Next s'arrête
A+
 
Re : Modifier macro

Bonsoir Gorfael ,

Désolé du retard, je viens d'apter ta macro mais cela ne fonctionne pas.
Entre temps, j'ai modifié ma demande. Je souhaite appliquer ma convertion essentiellement sur la dernière ligne saisie dan la colonne B,C,D en feuil1
Merci
A+
 
Re : Modifier macro

Bonsoir BRUNO62 et Gorfael,

Peut être cette Macro :

Sub ConversionNumerique()
Set F1 = Worksheets("Feuil1")
FinA = F1.Range("B65536").End(xlUp).Row

For Each cell In F1.Range(F1.Cells(FinA, 2), F1.Cells(FinA, 4))
If Left(CStr(cell.Formula), 1) <> "=" Then
On Error Resume Next
cell.Value = CDbl(cell) 'S'il n'y a que des entiers on peut mettre Clng(cell)
If cell = 0 Then cell.ClearContents
cell.NumberFormat = "General"
End If
Next
Set F1 = Nothing
FinA = Empty
End Sub


Laurent
 
Dernière édition:
Re : Modifier macro

Salut BRUNO62, laurent950 et le forum
Comme le client est satisfait...
Juste quelques remarques anodines (j'aime bien critiquer 😛)

l'utilisation des balises pour le code (icone #) permet une meilleure lecture de celui-ci.

Je n'ai pas vérifié le code fournit précédemment. J'aurais vu qu'en tapant le code directement j'avais mis "Sheet("Feuil1")" à la place de "Sheets("Feuil1")". Mais ça sert à quoi d'être bête si je ne le montre pas 😎

Cependant "je viens d'apter ta macro mais cela ne fonctionne pas" ne permet pas un dépannage efficace. Comme je ne sais pas à quoi sert cette macro et qu'elle ne me semble pas avoir un fonctionnement très utile (supprimer les 0 si on les rentre, pas s'ils sont calculés), difficile de porter un jugement sur le fonctionnement. De plus chez moi, il faut obligatoirement déclarer les variables et "resume next" me donne des boutons


Sur la macro de laurent950
Code:
Sub ConversionNumerique()
Set F1 = Worksheets("Feuil1")
FinA = F1.Range("B65536").End(xlUp).Row
 
For Each cell In F1.Range(F1.Cells(FinA, 2), F1.Cells(FinA, 4))
Si les cellules sont vides en B, quelque soit la longueur des colonnes C et D, on n'aura aucune conversion plus loin que la dernière non vide en B. Sans compter que la macro garde les limitations de 2003 (65536 lignes) alors qu'elle risque de passer, un jour sur une version plus évoluée qui autorise plus de lignes (et de colonnes).
Utiliser 2 variables pour des valeurs figées ne me semble pas très utile.

If Left(CStr(cell.Formula), 1) <> "=" Then => étant assez obtus, je ne vois pas le besoin de convertir la formule d'une cellule en texte pour la tester. Quelle différence cela fait-il avec If Left(cell.Formula, 1) <> "=" Then ?

On Error Resume Next => comme je l'ai dit, ça me donne des boutons : impossible de détecter toute anomalie dans le code tant qu'on n'aura pas utilisé "On Error Goto ...". Et, bien qu'Excel ne fasse pas toujours ce qu'on pense lui dire, le mettre dans une boucle ne sert pas à grand chose.
Code:
Set F1 = Nothing
FinA = Empty
Excel le fait automatiquement à la fin de la macro, donc, pourquoi se fatiguer !
A+
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
447
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
217
Réponses
5
Affichages
478
  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
267
Retour