Essai avec ce code mais fonctionne pas

Fermé
duduleray - Modifié le 25 avril 2020 à 17:53
 duduleray - 27 avril 2020 à 19:41
Bonjour a tous, forum bonjour

<config>Windows 10/ Edge 81.0.416.64</Excel 2007>

J'ai trouver ce code sur le net, j'ai beau essayer, il fonctionne pas
Quand j'entre une lettre dans une ou l'autre des cellules de la colonne (H2:H30) sur la Feuil1
tout passe donc c'est pas bon.
Je souhaiterai que lorsqu'une entrée n'ai pas bonne, on efface et on retourne en colonne
dans la cellule d'où l'on viens.

PS: je sais qu'il y a d'autres possibilités sans VBA mais je souhaiterai faire l'essai en VBA avec ce code ci dessous si possible ou alors un autre code si avez, je suis preneur.

Merci pour votre aide, bonne fin d'après midi a vous.

Cdlt Vieuxray

Public tag As String, ok As Boolean
 
Private Sub Worksheet_Change(ByVal Target As Range)
'tag = Target.Address
'ok = Fals
                                                                ' n 'accepte que les chiffres et le /
If InStr(Range("H2:H30"), "1324567890/", Chr(KeyAscii)) = 0 Then KeyAscii = 0

Select Case KeyAscii                                  ' Gestion de la décimale virgule / point
Case 44, 46                                               ' que l'on frappe une virgule ou un point
If InStr(TextBox1.Text, ",") Then                  ' si déjà une virgule présent
KeyAscii = 0                                               ' on ne permet pas deux virgules
Else                                                           ' sinon
KeyAscii = 44                                             ' on force la une virgule
End If
Case 48 To 57
                                                                  ' on laisse passer car ce sont des chiffres
Case Else
KeyAscii = 0                                                ' on ne laisse pas passer
End Select
End Sub
A voir également:

6 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié le 25 avril 2020 à 17:57
Bonjour,

Je ne sais pas où tu as trouvé ce code mais je suis certain que tu y a apporté les modification qui causent son dysfonctionnement : ce code ne s'applique pas à une cellule (et donc encore moins à une plage de cellules).

Pour contrôler la saisie dans une cellule, pas besoin de VBA, Excel possède un fonctionnalité native parfaitement adaptée à ce besoin : la validation de donnée.

1
Salut Patrice33740,

Merci pour ta réponse,

Comme il ne fonctionnait pas de toutes façons, donc effectivement j'ai modifier pour essayer
de le faire marcher.
Et puis baht ça marche pas.
Plutôt que de compliquer, je vais laisser tomber cette possibilité.

--- Excel possède une fonctionnalité native

Oui je sais bien et tu a raison, mais je souhaiterai le faire en VBA ça sera bon pour mon savoir.
Et puis j'avais vu lors de lecture sur le net un code assez simple qui faisait quasiment ce que je recherche a faire et que je pouvais modifier a ma guise.

Mais je le retrouve plus, dommage.

Bonne soirée a toi.

Cdlt
1
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
25 avril 2020 à 19:38
Re,

« mais je souhaiterai le faire en VBA ça sera bon pour mon savoir. »
Je pense qu'il est bien plus profitable au savoir, de bien connaître toutes les fonctionnalités natives du tableur, et ceci d'autant plus qu'avec les dernières avancées (tableaux structurés, Power Query) on peut de plus en plus souvent se passer du VBA.

Le VBA doit être un dernier recours pour ajouter des fonctionnalités inexistantes.
Je vois trop souvent des macros pêchées ci et là, qui sont mal appropriées ou mal utilisées ou des développements conséquents dont on comprend bien que l'espérance de vie ne rentabilisera jamais le coût de l'investissement, fusse-t'il bénévole.
1
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
26 avril 2020 à 11:30
bonjour,
pourquoi fais-tu cela?
est-ce pour apprendre? si oui, je ne pense pas que ce soit une bonne idée de recopier, sans les comprendre, des codes trouvés sur internet.
1
Salut yg_be,

Merci pour ta réponse,

Tout simplement pour apprendre bien sur.

Mais je cherche éventuellement ce qui n'ai pas trop compliqué, ça me fait un départ, mais je cherche a comprendre
et quand je comprends pas je cherche une explication sur le net.

Mais je me sers toujours des codes et comme après je sais je peux les modifiés facilement, mais je ne vais pas me lancer dans des études a 68 ans.

Bon dimanche a toi et merci

Cdlt Ray
0
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477 > duduleray
Modifié le 26 avril 2020 à 12:15
pour apprendre, rien de tel que de faire soi-même.
pour commencer, sois certain que le module commence par
option explicit
.
ensuite, ne garde que les lignes 3 et 21 du code.

posons-nous deux questions:
1) sais-tu ce que représente target?
2) que veux-tu réaliser avec ce code? oublions le comment, ne pensons qu'au comportement attendu.
0
duduleray > yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024
26 avril 2020 à 12:36
Re yg_be,

Pour Target pour pas te répondre de bêtises, j'ai regarder sur le net et TARGET on le vois dans de nombreux codes.
a quoi sert t'il exactement je ne suis sur de rien.

Je dois faire pour mon fils et pour faciliter son boulot sur Excel 2007 une feuil1 de commande de filtre pour piscine et de chaudière.

Les colonnes A à G sont pour les informations, Réf, taille etc, etc, concernants les filtres.

La colonne (H2:H90) pour entrer la quantité à commander.

Donc je souhaiterai en VBA tester les entrées qui seront faites dans cette colonne (H).

Alors ne laisser entrer UNIQUEMENT que les chiffres de 1 à 99 et rien d’autres.

•Aucun zéro devant le chiffre 01 non on efface et on retourne en colonne (H)

•Un ou deux zéros 0 ou 00 non on efface on retourne en colonne (H)

•Un ou deux chiffres autorisés si 3 chiffres on efface on retourne en colonne (H)

•Valider par ENTER par erreur donc cellule vide on retourne en colonne (H)

•Tout autres caractères Tels qu’ils soient on efface on retourne en colonne (H)

Ceci est strict, car ça sera utiliser par plusieurs personnes et si une erreur faisant passer une commande pour 100 filtres par Exemple alors qu’il en faudrait que deux, le boss va pas être content.

Mais un code que je comprenne puisque c'est aussi l'utilité.

Cdlt
0
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477 > duduleray
26 avril 2020 à 13:41
la fonction Worksheet_Change() est appelée chaque fois qu'il y a un changement dans la feuille. le paramètre de la fonction correspond à la zone qui a été modifiée.
pour que tu comprennes mieux, changeons donc le nom du paramètre: remplace target par un nom que tu trouves clair.

il faut ensuite ajouter du code dans la fonction.
la première chose à faire, c'est de vérifier qu'une seule cellule a été changée, car c'est plus simple à programmer.
je suggère que tu lises ceci: https://www.developpez.net/forums/d563748/logiciels/microsoft-office/excel/macros-vba-excel/verifier-qu-seule-cellule-selectionnee/
0
duduleray > yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024
26 avril 2020 à 15:05
Re

Plutot qu'une fonction une macro sub si possible je préfère, comme ça je peux l'utiliser dans d'autre programme si bien sur le besoin reste plus ou moins identique quitte a modifier un peu.

Remplacer TARGET par ??? le but étant de tester chaque entrée effectuez dans les cellules de la colonne (H)
Je me permets de te laisser le choix tu a plus l'habitude que moi.

j'ai lu la doc sur le lien que tu me proposes mais je vais relire a nouveau.

Cdlt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
26 avril 2020 à 23:50
Re,

Si tu veux une procédure sub :)
Option Explicit
Sub VérificationSaisie()
Const min As String = "1"
Const max As String = "99"
Const titre As String = "Erreur de saisie du nombre"
Const msg As String = "Veuillez saisir un nombre entier" & vbCrLf & "compris entre " & min & " et " & max
Dim rng As Range
  Set rng = Worksheets("Feuil1").Range("H2:H30")
  With rng.Validation
    .Delete
    .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=min, Formula2:=max
    .IgnoreBlank = True
    .InCellDropdown = True
    .ErrorTitle = titre
    .ErrorMessage = msg
    .ShowInput = False
    .ShowError = True
  End With
End Sub


1
Salut Patrice33740,

Merci pour ta réponse,

J'ai essayer ton code "SUB" et j'ai essayer également celui de l'ami yg_be dans un autre fichier avec seulement son code
et lors de mes essais, j'ai provoquer des erreurs pour voir si ça fonctionne et quand j'ai effectivement une erreur tes messages s'affichent, je souhaiterai ne plus les voir s'afficher dans le code de l'ami yg_be que je suis en train de tester, comment puis-je faire svp.

--- Const titre As String = "Erreur de saisie du nombre"
--- Const msg As String = "Veuillez saisir un nombre entier"

et le pire c'est qu'ils s'affichent aussi dans ma compta réaliser sous mon Excel 2007

Merci et bonne fin d'après midi a toi.

Cdlt Ray
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776 > duduleray
Modifié le 27 avril 2020 à 19:16
En principe, si tu fermes Excel et que tu le relances tu ne devrais plus y avoir de problème, à moins que tu enregistres ces macro au mauvais endroit (ce qui expliquerait pourquoi tu as tant de mal avec elles).
Ou as-tu copié ces macros ?
0
duduleray > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
27 avril 2020 à 19:29
Merci de ta réponse Patrice

Enregistrer dans un module toujours quand ce sont des SUB la c'est juste un fichier essai .

j'ai tout effacer nettoyage remis dans un fichier excel (neuf) juste le code de l'ami yg_be pour refaire l'essai et toujours pareil.

bonne soirée a toi

Cdlt Ray
0
duduleray > duduleray
27 avril 2020 à 19:41
Re Patrice

Bon, tu peux dormir sur tes deux oreilles, c'est bon ça re fonctionne bien, une erreur de ma part.

Je suis bien reparti sur un fichier (neuf) mais j'ai recopier le fichier qui était dans l'ancien
donc j'ai du sans doute recopier le problème.

La, j'ai repris directement sur le site le dernier fichier en cours et c'est bon.

je paufine tout ca demain.

Bonne soirée a toi, ta réponse m'a tout de mème aiguiller, merci

Cdlt Ray
0
Salut a tous, forum

Salut Patrice,

Tu a raison, mais ça m'arrange pas, je voulais finir en VBA.

Alors tant pis, Si quelqu'un veux bien reprendre le flambeau, ça serai bien sympa.

Merci d'avance et bon dimanche a tous.

Cdlt Ray
0