XL 2010 VBA convertir fonction SI

spike29

XLDnaute Occasionnel
Bonjour,

Débutant en VBA, je souhaite convertir deux formules Excel en VBA.

Les voici :

En cellule E24
SI(D8="Vendredi";L8+2;SI(D8="Samedi";L8+1;L8))

En cellule G24
=SI(D8="vendredi";$L$8+3;SI(W8="NUIT";$L$8;SI(W8="JOUR";$L$8+1;)))


La quasi intégralité de mon fichier est protégé afin d'éviter des suppressions involontaires (code de protection "spike")
Pour les cas particuliers comme les fériers ou autres, l'utilisateur pourra être amené à directement modifier les dates dans les cellules E24 et G24 pour qu'elles correspondent au besoin du moment.


J'aimerai également qu'une inputbox lui propose OUI/NON s'il veut modifier la date dans la cellule qu'il sélectionne (E24 ou G24)
S'il coche "OUI" cela aura pour action de déprotéger la cellule.

En PJ, un fichier exemple pour mieux illustrer mon besoin.

Merci d'avance pour votre aide.

Bonne journée à toutes et à tous !

Spike.
 

Pièces jointes

  • TEST.xlsx
    25.3 KB · Affichages: 23

spike29

XLDnaute Occasionnel
Bonjour Staple,


Merci pour ces codes mais honnêtement ça ne me parle pas du tout.

Et comme évoqué dès mon post#1 je ne souhaite pas insérer de bouton de commande pour modifier les dates mais simplement laisser l’utilisateur cliquer sur la date qu’il souhaite modifier voilà tout.
Avec comme je l'avais imaginer une inputbox par exemple.

Restons le plus simple possible pour l’utilisateur.

J’en suis à mon xième fichier test. Pour simplifier le tout ne pouvons-nous pas travailler uniquement sur la base de fichier que je m’embête à systématiquement envoyer… merci.;)



La dernière base du code qui tu m’a envoyé m’allait très bien (présente Feuil1 du fichier en PJ, j'ai essayé d'adapter un peu le code mais sans succès ).
Je pense qu’avec tes connaissances, il doit être aisé de trouver réponse à mon problème sans forcément casser entièrement la logique de ce code. Sinon, avec cette dynamique on va atteindre les 100 #posts…



Rappel des deux besoins actuels :

1) Format de la date lors d’une saisie sur l’inputbox qui pour je ne sais quelle raison est depuis hier en mmjjdddd et non jjmmdddd. Je n’explique absolument pas cela…. A tester sur le fichier qui sera en PJ.

2) Si l’on sélectionne une des 6 cellules concernées par le code et que l’on annule l’inputbox via «annuler » ou la croix cela annule la dernière modification éventuellement réalisée sur la cellule d’à côté

Exemple :

Si en G24 je change la date du jour pour mette le 11/11/2020 et qu'ensuite par erreur je sélectionne E24 et clique sur annulé, G24 se remet aussitôt à jour avec la date prévue dans le code.



Comme toujours, le fichier en PJ.

Cette fois-ci, si tu pouvais directement travailler dessus et éventuellement le renvoyer pour faciliter l’échange ça nous ferais gagner du temps, ou ne pas en perdre suivant comment on prends la chose.


Merci d’avance et bon Dimanche !

PS : aucune animosité dans mon message bien entendu, mais j'ai toujours eu l'habitude ici ou ailleurs de travailler sur des fichiers que l'on s'échange, ça facilite grandement les choses les échanges.
 

Pièces jointes

  • TEST222.xlsm
    44.8 KB · Affichages: 1

Staple1600

XLDnaute Barbatruc
Bonsoir le fil,

=>spike29
Si j'ai changé mon fusil d'épaule, c'est pour me faciliter les choses
(et après avoir cogiter un chouia)
(Et je l'ai testé sur ta PJ)
Si cela ne te parle pas, as-tu au moins testé?
(Car malgré le bouton, il y a toujours un InputBox)
Nb: Mon dernier code* ne rencontre pas les problèmes 1) et 2)
(message#58)

NB: Je ne joins plus de fichier Excel sur aucun forum depuis le 22 mai 1968, trois heures de l'après-midi.
Je ne poste que des formules, du VBA, des conseils, des liens et parfois des digressions, calembredaines et cie.
Ensuite le demandeur en fait ce qu'il veut.
 

spike29

XLDnaute Occasionnel
Bonsoir le fil, Bonsoir Staple,

Oui, j'ai brièvement testé sur un classeur vierge comme conseillé mais sans grand succès (je m'y suis très certainement pris comme un manche, nulle doute... 😅 )

En cogitant un peu (oui ça m'arrive), j'ai trouvé plus simple avec quelques bouts de codes glanés ici et là.

Je partage dès que possible ;)

Merci à toi et bonne soirée
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, spike29

=>spike29
Oui, j'ai brièvement testé sur un classeur vierge
Contrairement à toi, j'ai simplement pris le temps de tester (et de faire en sorte que les 3 plages soient impactées par la modification)
(Et ce n'est qu'à la fin du test que j'ai poster le code VBA du message#58)
Je partage dès que possible
Cela pourrait être déjà fait dans le message#63
(Il suffit d'un CTRL+C puis CTRL+V)
:rolleyes:
 

spike29

XLDnaute Occasionnel
Mon post#63 méritait précision.

Quand je disais sans grand succès je m'explique :
Le command button fonction, la modification de date aussi, le format est le bon (ddmmyyyy).

Seule problématique, c'est la totalité des 6 cellules qui est modifié là ou moi je souhaite que l'utilisateur puisse indépendamment modifier en un clic un cellule sans venir impacter les autres #besoin Post1 puis précisé dans mes posts suivant.

Dans le fonctionnement de mon fichier l'utilisateur ne sera jamais amené à modifier les 6 cellules d'un coup avec des dates similaires.

L'utilisateur sélectionne une des 6 cellule déprotection < inputbox < modifie la date < reprotection de la cellule.
 

Staple1600

XLDnaute Barbatruc
Re

Je partage dès que possible
A chacun son interprétation du "dès que ce possible"
Sur ce, je vais me coucher
Et pour ta question, tu as largement de quoi faire dans ce fil pour mixer des morceaux de codes de ci de là pour arriver à tes fins.
(procédures événementielles, Inputbox, formulaLocal, formules nommées, CommandButton)
 

spike29

XLDnaute Occasionnel
Bonjour Staple,

Réponse tardive, j'étais pris sur autres chose.

Ci-dessous le code que j'utilise :

VB:
Private Sub Worksheet_SelectionChange(ByVal T As Range)


Dim Plage
Dim mDate As String

If Not Intersect(T, Range("E24:F24,G24:H24,E50:F50,G50:H50,E76:F76,G76:H76")) Is Nothing Then


Plage = Application.InputBox("Sélectionnez la cellule à Déverrouiller", "Sélection de cellules", Type:=8)

If Plage = "" Then
        MsgBox "bouton annuler"
        Exit Sub

Else
 
' MsgBox ("La plage que vous avez sélectionnée est :" & Plage.Address)
 
    If MsgBox("Etes-vous certain de valider ?" & Chr(13) & _
   "Vous êtes sur le point de dévérouiller cette cellule pour y modifier la date.", vbQuestion + vbYesNo) = vbYes Then
      
       ' ActiveSheet.Unprotect Password:="sandman"
      
       Selection.Locked = False
              
       ' ActiveSheet.Protect Password:="sandman"
    

Else
Exit Sub

End If
End If
End If

Tel quel le code me va bien et en terme d'interface utilisateur il correspond à nos besoin.

Bonne soirée
 

Staple1600

XLDnaute Barbatruc
Re

J'ai copié ce code (donc le code du message#69)
VB:
Private Sub Worksheet_SelectionChange(ByVal T As Range)
Dim Plage
Dim mDate As String
If Not Intersect(T, Range("E24:F24,G24:H24,E50:F50,G50:H50,E76:F76,G76:H76")) Is Nothing Then
Plage = Application.InputBox("Sélectionnez la cellule à Déverrouiller", "Sélection de cellules", Type:=8)
If Plage = "" Then
        MsgBox "bouton annuler"
        Exit Sub
Else
If MsgBox("Etes-vous certain de valider ?" & Chr(13) & _
"Vous êtes sur le point de dévérouiller cette cellule pour y modifier la date.", vbQuestion + vbYesNo) = vbYes Then
Selection.Locked = False
Else
Exit Sub
End If
End If
End If
End Sub
Puis je sélectionne E24, je sélectionne une plage de cellule
et je clique sur OK
=>Erreur Exécution 13
Incompatibilité de type
 

Staple1600

XLDnaute Barbatruc
Re

Colle ton code sur une feuille vierge et tu verras qu'il plante.
(je parle de celui du message#72 qui est le copié/collé non modifié de ton code du message#69)
1) Tu sélectionnes E24
2) Tu sélectionnes à partir de l'InputBox D23:F25 par exemple
Et tu auras alors une Erreur d'exécution 13
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 848
dernier inscrit
Djigbenou