Gestion des type de cellule

bonjour

je revient vers vous car je n'avance plus dans mon projet...

pour fair cour, l’idée: on doit passer ^par différent point et noter l'heure et date du passage,

j'ai donc (avec votre aide) rédiger quelque ligne qui me permette d'horodater une colonne (la 7) sur double clic, j'ai ajouter un test qui vérifié que la cellule est vide, et si elle comprend déjà une valeur un MSGBOX me propose d'effacer les datas ou de les garder... le tout devant tourner sur une tablette, mais ej n'en suis pour l'heure qu'au développement sur PC

cela aller très bien sur ma maquette, mais quand j'ai voulus coller ces lignes sur le fichier "utile" j'ai des retours "erreur 13" sur la ligne "If Target.Value = "0""... je n'arrive pas a trouver le bon type de de donnée dans mes cellules, (j'imagine que pour excel une cellule est une variable défini par son X; Y et type)... j'ai bien essayer d'afficher le type de variable dans un msgbox, mais même retour "13", et j'ai beau fouiller le net je ne trouve pas d'explication sur la manipulation du type de variables...

si l'un d'entre vous peu m'indiquer de quel coté chercher..

copie de "mon" code:

Private Sub worksheet_beforedoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Column = 7 Then

    If Target.Value = "0" Then
        Target.Value = Now        
        Else
        choix = MsgBox("Attention horodatage deja defini souhaiter vous effacer le contenu", vbQustion + vbYesNo + vbDefaultButton2, "Est tu sure")

        If choix = vbYes Then
            MsgBox ("OK tampis pour toi")
            Target.Value = Clear

        End If

      End If

End If

Cancel = True

End Sub

merci a vous

Bonjour

Le code fonctionne correctement chez moi, sans erreur.

Cependant, voici quelques modifs :

Private Sub worksheet_beforedoubleClick(ByVal Target As Range, Cancel As Boolean)

With Target
    If .Column = 7 Then
        If Not IsDate(.Value) Then
            .Value = Now
        Else
            If MsgBox("Attention horodatage déjà défini. Souhaites-tu effacer le contenu ?", vbQuestion + vbYesNo + vbDefaultButton2, "Es-tu sûr.") = 6 Then
                MsgBox ("OK tant pis pour toi")
                .Value = Clear
            End If
        End If
        Cancel = True
    End If
End With

End Sub

- Utilisez With pour simplifier le code

- Le contenu de la cellule (colonne 7) devant être une date, on teste si une date est déjà présente.

  • Si date présente : demande confirmation pour une remise à zéro (inutile de passer par une variable). Attention : Clear efface également la mise en forme.
  • Si date absente (ou non date), on place la date actuelle.

- Le Cancel=True est utilisé uniquement si on est en colonne 7 (pour les autres colonnes on doit pouvoir entrer dans les cellules).

- Correction de quelques fautes.

Pour les tests selon le type de cellule, voir le post https://www.excel-pratique.com/fr/fonctions-vba/vartype#google_vignette

On aurait pu écrire : If VarType(.Value) <> 7 Then ou If VarType(.Value) <> vbDate Then

Bonne journée

merci pour ton rapide retour.. .

alors effectivement ça marche mieux que "ma vrs" mais reste un tit problème que je n'arrive pas a corriger... le test savoir si la case n'est pas déjà remplie; quelque que soit l'étas de ma cellule il l’écrase avec la date "now"

peut être car c'est une date ET une heure, j'ai essayer de filtrer avec un "variable type variant = Left (.value,, 8)" mais retour de ma vielle copine erreurs 13 d’ès la tentative d'affectation de la valeur a ma variable ... sic

pour le whith, je l'avais bien vue, mais j'avoue que re-ecrire a chaque fois toute ma variable est plus "parlant" a mon niveau, merci de
l'info au moins autant faire directement propre

existe t’il en VBA un mode débogage pas a pas avec possibilité d'afficher les contenue et type des variable je n'avais plus du toucher au basic depuis le spectrum... et j'ai pris de "mauvaise" habitudes ayant principalement développer en 4D

merci a tous bonne journée/WE

Re

La présence de l'heure dans la date ne change rien. Pour n'avoir que la date il suffit de formater la colonne 7 :

(Sélectionner toute la colonne et bouton droit, format de cellule, date, "*14/03/2012" par exemple)

De toute façon elle doit être au format Date. Si elle ne l'est pas, ça peut expliquer ton problème d'erreur 13. Les dates présentes sont alors au format texte ; il faudra les réenregistrer (ou les transposer).

Pour ce qui est de la présence d'une donnée autre que date dans la cellule, il suffit de tester le contenu et demander, via un message s'il faut écraser le contenu.

L'affectation de la date du jour reformate la cellule pour qu'elle reste au format date.

Private Sub worksheet_beforedoubleClick(ByVal Target As Range, Cancel As Boolean)

With Target
    If .Column = 7 Then
            If .Value = Empty Then
            ' Vide place la date au format
            .Value = Now
            .NumberFormat = "dd/mm/yyyy"
        Else
            If IsDate(.Value) Then
                ' Date présente, supprimer ?
                If MsgBox("Attention horodatage déjà défini. Souhaites-tu effacer le contenu ?", vbQuestion + vbYesNo + vbDefaultButton2, "Es-tu sûr.") = 6 Then
                    MsgBox ("OK tant pis pour toi")
                    .Value = Clear
                End If
            Else
                ' Autre donnée : Confirmer le remplacement
                If MsgBox("Remplacez le contenu par la date du jour ?", vbQuestion + vbYesNo + vbDefaultButton2, "Donnée présente") = 6 Then
                    .Value = Now
                    .NumberFormat = "dd/mm/yyyy"
                End If
            End If
        End If
        Cancel = True
    End If
End With

End Sub

Ce code peut être simplifié bien-sûr.

Pour tester le contenu et le type des cellules en mode débogage et pas à pas, il suffit d'ajouter des espions.

Ici Target.value qui doit donner la date complète et être de type Variant/Date

et Vartype(Target.value) qui doit donner 7 (date) de type Long.

Bonne journée

merci a toi, je n'arrive toujours pas a faire le test de cellule vide.. .mais pas grave pour l'instant, déjà il prend l'horodatage, je verrais plus tard, ça me donnera l’occasion d'avancer mes connaissance en excel/VBA... déjà l’essentiel est la... après c'est du plus/sécurité

merci a toi et au fofo... c'est toujours bon de pouvoir (comme disait jean pierre) faire appelle a un ami.. .;-)... bonne soiree

Rechercher des sujets similaires à "gestion type"