Microsoft 365 InputBox : saisir ou modifier le contenu de la cellule cliquée à l'aide de l'InputBox

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
Je vous souhaite un beau dimanche :)

Pour des besoins dans l'un de mes fichiers de travail, je voudrais saisir ou modifier le contenu de la cellule cliqué à l'aide de l'InputBox :

l'InputBox prenant le contenu de la cellule (vide ou non), je saisi dans l'InputBox,
1 - à la validation, la cellule cliquée prend la valeur de l'InputBox,
2 - si j'annule, la cellule cliquée garde sa valeur (vide ou non).

J'ai fait des recherches (peut-être mal cherché) et des tentatives sans trouver comment coder.
Auriez-vous la solution ?

Un grand merci à toutes et à tous,
Je mets un p'tit fichier test et je continue à chercher.
Amicalement,
lionel :)
 

Pièces jointes

  • inputBox_test.xlsm
    14.4 KB · Affichages: 14

patricktoulon

XLDnaute Barbatruc
pour info je detaille

@patty58

VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Range("a1:zz10000")) Is Nothing Then
    Nom = Application.InputBox("Saisir ou modifier", "", Range(R.Address).Text)
    If Nom = False Then Exit Sub
    Range(R.Address).Value = Nom
End If
End Sub
ca fonctionne mais
1)
pourquoi demander au claculateur de recalculer l'adress mémoire du range
Range(R.Address).Text--->r.text fonctionne aussi bien (gain de mémoire)
2) et meme sans recalculer la fonction cstrde vb sera toujour plus rapide que la lecture en format text de la cellule

3)if nom = false là aussi on perd de la memoire les test if false ou true prenne du sandwich;)

4 tester le false ou true implique que nom soit variant donc plus lourd

@sylvanu
VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
    If Not Intersect(R, Range("a1:zz10000")) Is Nothing Then
        Nom = InputBox("Saisir ou modifier", "Modifier", R.Value)
        If Nom <> "" Then R = Nom
    End If
End Sub
le test nom en string est plus lourd que le strptr et nom est variant implicitement alors qu'il travaille en string
allez hop!! encore appel au calculateur

@patricktoulon
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim V$, Nom$
V = CStr(Target.Value)
If Not Intersect(Target, Range("a1:zz10000")) Is Nothing Then
    Nom = InputBox("Saisir ou modifier", "", V)
        If StrPtr(Nom) > 0 Then Target.Value = Nom
End If
End Sub
ici nom est string explicit il sera (bien entendu) impossible de tester false ou true
pas la peine puisque le STRPTR qui est l'address mémoire établie de la valeur de l'input est accessible
on ne calcule pas on capte juste l'information
c'est comme les course au supermarché y a pas de petites economies😂😂
voilà vous savez tout ;)
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour tout le monde,
Moi je suis très à la bourre !
Enrichi (BBcode):
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   
     Dim Nom As Variant, Zone_Saisie As Range
     Set Zone_Saisie = [A1:ZZ10000]
   
     If Intersect(Target, Zone_Saisie) Is Nothing Then Exit Sub
   
     Nom = Application.InputBox(Title:="Essai", Prompt:="Saisir ou modifier", Default:=Target.Text, Type:=2)
   
     If TypeName(Nom) = "String" Then
          If Nom = "VRAI" Then Nom = True   'pour convetir la chaîne en booléen
          If Nom = "FAUX" Then Nom = False  'pour convetir la chaîne en booléen
          '(les valeurs numériques sous forme de chaîne sont directement convertie en numérique)
          Target.Value = Nom
     End If
   
End Sub

Ça ressemble beaucoup à ce qui a déjà était publié, avec la possibilité de saisir un booléen FAUX.
Modif : et de repiquer le contenu d'une autre cellule...

Amicalement
Alain
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
un petit recap

préférer toujours le cstr(.value) plutôt que le( .text)
pour 2 raisons
1°bis (là c'est evident ) c'est que le text n'est pas forcement la valeur(Attention au numberformat)
si on renvoie le default avec l'annulation ce n'est plus la meme valeur que l'on renvoie
1°bibis lire la cellule en text implique l'utilisation en interne de application.text

dimez des le depart le RETURN en ce que vous avez besoins (string/long/double etc..etc..


Utilisez le strptr disponible des le depart pour gérer l'annulation c'est le moins lourd

Bon Ok je sort 😅😂🤣😇😇😇😇😇
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonsoir à toutes et à tous :)

patricktoulon m'a donné un code qui fonctionne bien et que j'utilise.​

Je reviens sur le sujet pour un souci de modification de date.
Mon souci :
Si je modifie par exemple :
"15.03.2022 02:30:00" la proposition dans inPROUTbox est bien "15.03.2022 02:30:00",
Mais si j'ai "15.03.2022 00:00:00, inPROUTbox ne prend que ""15.03.2022" (il ne prend plus la suite " 00:00:00",
J'ai besoin qu'il prenne le tout "15.03.2022 00:00:00" pour pouvoir tout restituer modifié ou non.

Je ne sais pas le faire.
Je joins le fichier avec les dates.
Je continue à chercher mais, pas certain d'y arriver ...
Encore un grand merci,
lionel )
 

Pièces jointes

  • inputBox_ModifCelluleP_OKTitre.xlsm
    41.8 KB · Affichages: 2
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Tu parles de quelle macro ???
Si tu parles de Worksheet_BeforeDoubleClick, franchement je doute que Job75 ait pondu ce truc...

Quant au nom inPROUTbox, ça ressemble plus à du PatrickToulon ça. ;)


[edit]
Suis de plus en plus rapide moi... :rolleyes:😞😢
[/edit]
 

TooFatBoy

XLDnaute Barbatruc
Bon, je répond comme si tu avais dit que c'était dans Worksheet_BeforeDoubleClick :

Du coup, est-ce que le cstr est indispensable ???
Est-ce que Target.value ne suffit pas ?

Une vérification sur la "date" ne serait, à mon avis pas du suprflux... 😅
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
478

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 098
Membres
103 116
dernier inscrit
kutobi87