Macro contôle de prix

  • Initiateur de la discussion Initiateur de la discussion roidurif
  • 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 !

roidurif

XLDnaute Occasionnel
Bonjour je reviens vers vous car je suis bloqué dans ma macro, L'objectif de cette macro est de controler dans un onglet "feuil1" de la colonne Prix (AH) les prix saisies, et s'il ne respecte pas les consignes si dessous, alors indiquer en "feuil2" les numéros de celulle à problème en ligne 9.

Consigne à contrôler dans chacune des celulles :
- Si les celulles sont au format nombre "0.00"
- s'il ne contient pas des lettres du style 12.03 euro ou 12.03 € etc...
- s'il ne contient pas plus de deux decimales ex : 12.0333....

Ce que je n'arrive pas à exprimé c'est de contrôler dans chacune des celulles, regarder si la saisie du prix n'est pas plus de deux decimales ex : 12.0333....

Merci de votre aide svp

Code:
Sub Prix()
For Each x In Sheets("Feuil1").Range("AH2:" & Sheets("Feuil1").Range("AH65536").End(xlUp).Address)
    If x.NumberFormat <> "0.00" Then Sheets("Feuil2").Cells(9, 256).End(xlToLeft).Offset(0, 1) = x.Address(REF_ABS, REF_ABS) 
    If x.Value <> "*.##" Then Sheets("Feuil2").Cells(9, 256).End(xlToLeft).Offset(0, 1) = x.Address(REF_ABS, REF_ABS)  
    If Not IsNumeric(x.Value) Then Sheets("Feuil2").Cells(9, 256).End(xlToLeft).Offset(0, 1) = x.Address(REF_ABS, REF_ABS) 
Next x
End Sub
 
Re : Macro contôle de prix

Bonjour roidurif,

Pour contrôler la cellule cel, il faut 2 tests successifs :

Code:
Dim txt As String
txt = Replace(cel, ",", ".")
If Not IsNumeric(cel) Then MsgBox "xxxxxx", 48: Exit Sub
If Not (cel = Int(cel) Or txt Like "*.#" Or txt Like "*.##") Then MsgBox "yyyy", 48: Exit Sub

je remplace la virgule par le point pour que ça marche quel que soit le séparateur décimal utilisé.

A+
 
Re : Macro contôle de prix

Merci

J'ai essayer d'ajuster la macro avec la mienne, ca fonfctionne mais lorsque un prix contient une lettre ca plante sur la derniere ligne.

Vous pouvez m'aider svp

merci d'avance

Code:
Sub test2()

Dim txt As String
For Each cel In Sheets("Feuil1").Range("AH2:" & Sheets("Feuil1").Range("AH65536").End(xlUp).Address)
txt = Replace(cel, ",", ".")
If Not IsNumeric(cel) Then Sheets("Feuil2").Cells(9, 256).End(xlToLeft).Offset(0, 1) = cel.Address(REF_ABS, REF_ABS)
If 100 * cel > Int(100 * cel) Then Sheets("Feuil2").Cells(9, 256).End(xlToLeft).Offset(0, 1) = cel.Address(REF_ABS, REF_ABS)
Next
End Sub
 
Dernière édition:
Re : Macro contôle de prix

Rebonjour roidurif,

Je n'avais pas compris comment vous vouliez utiliser les tests. Voici une macro mieux adaptée à votre problème :

Code:
Sub test2()
Dim cel As Range, test As Boolean
For Each cel In Sheets("Feuil1").Range("AH2:" & Sheets("Feuil1").Range("AH65536").End(xlUp).Address)
test = True
If IsNumeric(cel) Then test = 100 * cel > Int(100 * cel)
If test Then Sheets("Feuil2").Cells(9, 256).End(xlToLeft).Offset(0, 1) = cel.Address(REF_ABS, REF_ABS)
Next
End Sub

A+
 
Dernière édition:
Re : Macro contôle de prix

Bonsoir roidurif,

Je savais qu'il y avait des problèmes avec les nombres dans VBA, mais là je ne comprends vraiment pas.

En AH29 par exemple, la cellule (cel) contient 1164,35. Dans la macro cela donne (j'ai testé) :

100 * cel = 116435
Int(100 * cel) = 116434 Incompréhensible !

Je vais voir sur le forum si quelqu'un connaît le pourquoi de ce phénomène.

Donc il faut tester sans utiliser Int, et revenir à ma première solution :

Code:
Sub test2()
Dim cel As Range, test As Boolean, txt As String
Sheets("Feuil2").Range("B9:IV9").Value = ""
For Each cel In Sheets("Feuil1").Range("AH2:" & Sheets("Feuil1").Range("AH65536").End(xlUp).Address)
test = True
txt = Replace(cel, ",", ".")
If IsNumeric(cel) Then test = [COLOR="Red"]Not (cel = Int(cel) Or txt Like "*.#" Or txt Like "*.##")[/COLOR]
If test Then Sheets("Feuil2").Cells(9, 256).End(xlToLeft).Offset(0, 1) = cel.Address(REF_ABS, REF_ABS)
Next
End Sub

J'ai ajouté une ligne pour effacer au début la plage B9:IV9

A+
 

Pièces jointes

Dernière édition:
Re : Macro contôle de prix

Bonsoir,

J'ai donc trouvé sur le forum la solution du problème de la fonction Int, voir ce fil :

https://www.excel-downloads.com/threads/fonction-int-pour-les-vbaistes.117085/

Il faut donc utiliser CDec à l'intérieur de Int.

Vous pouvez donc maintenant utiliser sans problème cette macro :

Code:
Sub test2()
Dim cel As Range, test As Boolean
Sheets("Feuil2").Range("B9:IV9").Value = ""
For Each cel In Sheets("Feuil1").Range("AH2:" & Sheets("Feuil1").Range("AH65536").End(xlUp).Address)
test = True
If IsNumeric(cel) Then test = 100 * cel > Int(100 * [COLOR="Red"]CDec(cel)[/COLOR])
If test Then Sheets("Feuil2").Cells(9, 256).End(xlToLeft).Offset(0, 1) = cel.Address(REF_ABS, REF_ABS)
Next
End Sub

Fichier joint.

Bonne nuit.
 

Pièces jointes

Re : Macro contôle de prix

Bonjour,

Je reviens vers vous, car j'aimerai ajouter une condition à cette macro qui controle le format prix en Colonne N.

Simplement, la condition est celle-ci :
si en colonne B, il y a un "D" alors pas de contrôle en colonne N.
J'ai rajouté ce code,
Code:
    If Range("B" & x.Row) = "D" Then Exit For
ca n'a pas l'air de fonctionner.


Code:
Dim Colonne(), x As Range
For Each x In Sheets(DATA).Range("AH2:" & Sheets(DATA).Range("AH65536").End(xlUp).Address)
    If Range("B" & x.Row) = "D" Then Exit For
    If x.NumberFormat <> "0.00" Then Sheets(CONTROLE).Range("N65536").End(xlUp).Offset(1) = x.Address(REF_ABS, REF_ABS) 'N° client manquant
    If x = 0 Then Sheets(CONTROLE).Range("N65536").End(xlUp).Offset(1) = x.Address(REF_ABS, REF_ABS)
    If Not IsNumeric(x) Then Sheets(CONTROLE).Range("N65536").End(xlUp).Offset(1) = x.Address(REF_ABS, REF_ABS) 'N° client manquant
    Next x
End Sub
merci de l'aide

cordialement
 
- 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

Réponses
3
Affichages
924
Réponses
35
Affichages
2 K
Réponses
9
Affichages
1 K
Retour