Insertar calendario en la celda de Excel

Resuelto
Hola,

Estoy preparando un pequeño archivo en Excel 2007.
Tengo una columna destinada a recibir la fecha de puesta en servicio de un vehículo.
Para simplificar y hacer más cómodo el uso de este archivo para los futuros usuarios, me gustaría que, en el momento en que se selecciona la celda para introducir la fecha, aparezca un calendario en el que puedan hacer clic para introducir la fecha en la celda, algo más agradable...
El problema es que no soy muy versado en informática.
He probado a través de varios foros para jugar con VBA, pero no logro nada; ¿alguien podría explicarme amablemente, paso a paso, cómo hacerlo, con los códigos y los botones en los que hay que hacer clic... por favor?

Agradezco de antemano este superhéroe...
Configuración: Windows Vista

20 respuestas

  1. Colaborador

    If Not (Target.Column = 3 Or Target.Column = 5) Or Target.Row < 2 Or Target.Cells.Count > 1 Then
    3 et 5 étant les n° des colonnes concernées.

    Pour ton autre post tu te compliques la vie de vouloir faire un formulaire (si ce n'est que pour ça...). Sa gestion demande du temps que je n'aurais pas.
    Quand tu poses une question n'hésites pas à déposer un fichier exemple sur cijoint.fr et coller le lien dans le post. Tout le monde n'a pas le courage de recréer ton fichier et de plus ça ne collera pas avec le tien...

    Dans une feuille Liste crée toi tes listes et nommes les plages des modèles.
    Ex: en B1: Renault, en B2:B4 les modèles, sélectionner B1:B4 puis 'insertion / nom / créer...', cocher 'ligne du haut', valider
    Ta plage B2:B4 s'appelle maintenant Renault
    En A une liste des marques avec le titre (nommer aussi)

    Dans ta feuille de travail pour ta 1ère liste en A2:A8 tu fais une validation par liste avec =Marques
    Pour la liste en cascade une validation par liste en B2:B8 avec =INDIRECT($A2)

    exemple

    eric

    eric
    42
    1. Gracias Eric, funciona y te estoy muy agradecido; por fin podré presentar un archivo que se parezca a algo..
      Si tengo otras preguntas sobre estos programas, ¿cómo puedo contactarte directamente en este sitio?
      ¿También dominas Access?
      Gracias de nuevo y hasta pronto
      0
  2. Colaborador
    Hola a todos,

    Es en la hoja donde hay que añadir el control Calendar, y por lo tanto necesitas la barra de herramientas en Excel "normal".
    De lo contrario puedes subir tu archivo a cijoint.fr (en formato .xls) y pegar aquí el enlace proporcionado.
    Por otra parte solo podría guiarte sobre Excel 2003, en el 2007 hay que buscar...
    eric
    7
    1. Colaborador
      necesita modificar un poco la macro (atención hay una línea menos, copiar todo) y agregar otra.

      Private Sub Calendar1_Click() ActiveCell.Value = Calendar1.Value End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' si la selección en la hoja cambia (target es la referencia de la selección) If Target.Column <> 3 Or Target.Row < 2 Or Target.Cells.Count > 1 Then 'si la columna <>3 (C) o la fila <2 o la selección tiene más de 1 celda Calendar1.Visible = False 'entonces se oculta el calendario Exit Sub Else 'si no Calendar1.Top = Target.Offset(1, 0).Top + 2 ' alinear el calendario con la parte superior de la celda de abajo Calendar1.Left = Target.Left + 10 ' alinearlo a la izquierda de la celda 'Calendar1.LinkedCell = Target.Address ' poner la celda vinculada al control en la celda seleccionada If IsDate(Target.Value) Then 'si la celda seleccionada contiene una fecha Calendar1.Value = Target.Value ' recuperarla Else ' de lo contrario poner la fecha del día Calendar1.Value = Date End If Calendar1.Visible = True 'mostrar el calendario End If End Sub

      eric

      editar : he vuelto a modificar un poco el código para desplazar el calendario y poder seleccionar las celdas de abajo que estaban ocultas
      5
      1. Colaborador
        Buenas noches,

        Un ejemplo de lo que podrías hacer. Un clic en la columna C (excepto la fila 1) hace aparecer el calendario. El único pequeño problema es que el control de calendario proporciona una cadena y no una valor de fecha. Los cálculos sobre ello son posibles, pero una comparación de fechas sería incorrecta si no multiplicas por 1 el valor. No sabiendo tu nivel exacto, pregunta dónde te trabas...

        eric
        3
        1. Gracias Eriiic por haber respondido, siempre es un placer ver que se puede encontrar ayuda en Internet cuando el responsable de informática de su empresa ni siquiera se toma el tiempo de explicarlo... en fin...

          Sin embargo cuando digo que soy nulo en informática, desafortunadamente es verdad.... y aparte de la función Suma, si... no sé hacer nada....

          Entonces volviendo a nuestra pregunta, ¿puedes detallar por favor (si tienes 5 minutos por perder), los pasos detallados, los botones... en Excel 2007?
          He probado de copiar tu fórmula en VBA pero realmente no sé nada...
          En el momento en que quiero ejecutar, el programa me pide crear algo mientras yo creía haber terminado... no conozco nada sobre la forma de proceder. ¿Hay que crear un UserForm? ¿Cómo hacerlo?

          La fecha de puesta en servicio del vehículo debe estar en la columna G, salvo en G1 que constituye el título de la columna....

          No creía que fuera tan duro insertar un simple calendario en una celda...

          Gracias de antemano por tu valiosa ayuda
          2
          1. Moderador
            Hola a todos,
            Hola Eriiic,
            (por cierto, excelente tabla, muy buena solución)
            Bien para Dat, parece relativamente sencillo adaptar este código. Basta con seguir los pasos:
            1ª parte :
            en la hoja:
            - menú 'vista / barra de herramientas' marcar 'barra de herramientas de controles'
            - en esa barra hacer clic en la herramienta 'controles adicionales…' (a la derecha)
            - seleccionar 'control calendario 11.0'
            - dibujarlo en la hoja

            ¿eso no te supone problema?

            2ª parte el código : clic derecho en la pestaña de tu hoja y :
            Private Sub Worksheet_SelectionChange(ByVal Target As Range)
            ' si la selección en la hoja cambia (target es la referencia de la selección)
            If Target.Column <> 3 Or Target.Row < 2 Or Target.Cells.Count > 1 Then
            'si n° columna<>3 (C) en tu caso, columna G sustituye 3 arriba por 7 o n° fila<2 o la selección abarca más de 1 celda
            Calendar1.Visible = False
            'entonces ocultamos el calendario
            Exit Sub
            Else
            'sino
            Calendar1.Top = Target.Offset(1, 0).Top
            ' alinear el calendario con la parte superior de la celda de abajo
            Calendar1.Left = Target.Left
            ' alinearlo a la izquierda de la celda
            Calendar1.LinkedCell = Target.Address
            ' poner la celda vinculada al control en la celda seleccionada
            If IsDate(Target.Value) Then
            'si la celda seleccionada contiene una fecha
            Calendar1.Value = Target.Value
            ' recuperarla
            Else
            ' de lo contrario poner la fecha de hoy
            Calendar1.Value = Date
            End If
            Calendar1.Visible = True
            'mostrar el calendario
            End If
            End Sub

            Prueba en un libro de Excel en blanco y cuéntanos dónde te quedas.
            --
            Atentamente,
            -- Lo que vale la pena hacer vale la pena hacerse bien --
            0
        2. Colaborador
          No te preocupes pijaku, lo haces bien.

          dat: dibujas el calendario donde quieras pero le das las dimensiones correctas.
          Por otro lado, después de dibujarlo hay que salir del modo 'construcción' haciendo clic en el icono con regla+lápiz+escalímetro.
          Luego haz clic en cualquier lugar: desaparece, haz clic en la columna correcta: aparece.
          eric
          2
          1. Colaborador
            Hola,

            el mismo comentado: calendar.xls
            Según sea necesario, podríamos completar las pruebas para que solo se muestre si la celda está vacía o contiene una fecha, para evitar la pérdida de datos.

            eric
            1
            1. Colaborador
              Hola eriiic
              te hago llegar este mensaje porque me gustaría saber
              1- si es posible colocar el calendario en 3 columnas en lugar de una sola (en mi caso E, F y M)
              2- si es posible en la macro desencadenar la multiplicación por 1 para poder usar la fecha (cálculo)

              gracias
              0
            2. Colaborador
              Hola Usul,

              Adaptación rápida por la valija que hay que hacer.... ;-)
              http://www.cijoint.fr/cjlink.php?file=cj201107/cijO2M6mst.xls

              Queda un pequeño problema (que quizá existía en la otra versión): al eliminar una fecha todavía aparece 12:00:00 AM
              Podrás completar si hace falta, creo
              Atención: declaración de una variable en un módulo.
              Mal hábito, creo que puedes traerla a la hoja, pero fuera de la sub

              eric
              0
            3. Colaborador
              gracias, no hace falta apresurarse, no hay ninguna prisa pero es agradable haber tomado tu tiempo valioso, así que felices vacaciones
              para mí es en agosto ;-)

              hablamos de ello en la vuelta a la actividad
              0
          2. Hola Eriiic,

            He conseguido dibujar un calendario en la hoja de Excel, bueno... lo dibujo en cualquier sitio, ¿no importa?
            Luego hice clic derecho en la pestaña "feuil1" todavía en modo Excel "normal" y pulsé en "ver código" ; hice clic ahí y introduje los datos de pijaku directamente. ¿Hasta aquí está bien?
            Pero una vez que ingresé el código (si es que no me equivoqué) ¿qué hay que hacer para ejecutarlo y ver si funciona, porque cuando pulso "ejecutar" me pide crear la macro, ¿no es eso lo que no hice?
            ¡Qué complicado es cuando no se entiende nada!

            Gracias a ti
            1
            1. Moderador
              No, una vez que has copiado y pegado el código, cerrada la ventana de Visual Basic (ahí es donde ves tu hoja de Excel) funciona todo solo, al hacer clic en las celdas de tu hoja...

              Editar: para Eriiic, me permito intervenir aquí sin querer entrometerme en vuestra conversación...
              --
              Cordialmente,
              -- Lo que vale la pena hacerse vale la pena hacerse bien --
              0
          3. ¡Ya funciona! ¡Gracias por tu paciencia y por tu ayuda... sin ti habría abandonado!
            Una última pregunta antes de hacer clic en "resuelto"; ¿cómo hacer para que cuando haga clic en una columna (aparce el calendario...), si salgo de ella sin hacer clic en una fecha no se ponga la fecha de hoy?
            Gracias de antemano por esta pregunta y gracias por ayudarme.
            1
            1. Buenas noches,

              pasaba por aquí y, si me lo permiten, estaría muy interesado en una explicación del profesor eriiic...

              --
              Si no necesita nada, pídame.
              0
              1. y pues mucha gracias, señor profesor, me iré a la cama menos tonto esta noche..

                --
                Si no necesita nada, pídame.
                0
                1. Hola y gracias por su respuesta

                  Lamentablemente estoy atascado en la primera parte... No se ríe...

                  Me explico:

                  Menú de visualización... ¿Hay que hacerlo en VBA? ¿O simplemente en la hoja tal como está?
                  Porque yo logro dibujar este calendario 12.0 yendo a VBA y haciendo clic en "nuevo userform" e insertando el calendario; ¿eso es correcto?
                  0
                  1. Muchas gracias a todos, funciona... ¿debería poner "resuelto" en alguna parte en este foro?

                    Hasta pronto.
                    0
                    1. Colaborador
                      Sí, es mejor. Pero si no estás registrado quizá no puedas.
                      Lo hice por ti.
                      Buena continuación...
                      eric
                      0
                      1. Eric, otra pregunta,

                        Tengo otra hoja en la que dos columnas están involucradas en la incorporación de un calendario; he conseguido hacer un copiar pegar, funciona para una de las dos; pero cuando vuelvo a COPIAR o pegar una segunda vez el código, no funciona.
                        ¿Qué hacer?

                        ¿Tendrías también la respuesta al nuevo tema que acabo de abrir? adjunto el enlace ,

                        https://forums.commentcamarche.net/forum/affich-14933312-aide-formule-excel-et-grille-de-saisie

                        Gracias una vez más y otra vez
                        0
                        1. Colaborador
                          Es mejor publicar en el foro, su objetivo es que todos se beneficien de las respuestas.
                          Y si yo no estoy, otros pueden responder, en privado...
                          No, solo conozco lo mínimo sobre Access, lo siento.
                          eric
                          0
                          1. hola,

                            Esta explicación es adecuada para una tarea que quiero ejecutar, pero encuentro un problema.

                            Estoy en Excel 2003 y no encuentro en la herramienta "otros controles" la opción 'control calendario 11.0'.
                            ¿Es un problema de la versión de Excel?

                            Gracias por su ayuda para resolver el problema.
                            0
                            1. Colaborador
                              Hola,

                              A priori viene con Access, así que instala Access.
                              Si no, busca en la red MSCAL.ocx o un equivalente

                              eric
                              0
                              1. Hola,

                                Veo este tema desde hace algunos meses, pero como no encuentro la solución en otro lugar, me permito plantearte la pregunta.

                                Me gustaría hacer exactamente lo que hace Eric, pero en Word.

                                Finalmente, me gustaría hacer aparecer un calendario al hacer clic en una celda de mi tabla creada en Word.

                                Y, a través de ese calendario, poder definir la fecha que me interesa.

                                ¿Es posible?

                                Gracias por vuestra ayuda.
                                0
                                1. Genial, ¡funciona!
                                  Ahora me gustaría aplicarlo en dos columnas lado a lado.
                                  Ej.: Fecha de seguimiento y fecha solicitada
                                  Parece que no puedo usar el mismo código porque obtengo un mensaje de error...
                                  ¿Qué debo hacer?
                                  0
                              2. Hola,

                                Me gustaría hacer exactamente lo mismo, pero ¿es posible que vuelvan a subir sus archivos de prueba para que entienda cómo funciona?
                                Muchas gracias y buena tarde
                                0
                                1. Colaborador
                                  Hola,

                                  El control Calendar ya no existe en las nuevas versiones.
                                  MS cambia en casi cada versión; por ejemplo, en 2010 era el control DTPicker.
                                  Por ello te desaconsejo usarlo y tomar un calendario construido dentro de un formulario. Puedes encontrar múltiples ejemplos en la red.
                                  Aquí, el de pijaku por ejemplo: https://www.commentcamarche.net/faq/41159-vba-excel-toutes-versions-controle-calendrier-transposable
                                  eric
                                  0