Agregar un dato en una tabla mediante un botón

marco -  
 marco -
Hola,

me permito solicitarles de nuevo ayuda
Verán, tengo en una hoja una tabla de datos que sirve para la creación de una lista desplegable.
Quisiera que el usuario indique en una celda definida un nuevo dato y que pueda añadirlo a la tabla de datos mediante un botón "validar".
Y para llevar la perfección que los datos, tras este añadido, se ordenen alfabéticamente de forma automática.
Espero que puedan ayudarme; gracias de antemano.

Configuración: Windows / Firefox 73.0

10 respuestas

  1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
     
    1
    1. marco
       
      Hola,

      primero gracias por su respuesta.
      pero lo que me muestra es el estado actual de mi hoja de Excel con una tabla dinámica.
      Lo que desearía es que el usuario introduzca una nueva dato en una celda definida (por ejemplo A1) y que al confirmar mediante un botón que he creado que se llamaría por ejemplo "guardar" ese dato se vaya incorporando a mi tabla manteniendo, si es posible, un orden alfabético (sería un plus).
      Gracias de antemano
      0
      1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730 > marco
         
        Hay que encontrar la última fila de tu lista a la que sumas +1 Puedes incluirlo en tu botón dernièreligne + 1 = Range("A1").Value todo manteniendo, si es posible, un orden alfabético tienes originalmente el orden al hacer clic derecho sobre tu lista Así quedó @+ El Pivert
        0
      2. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730 > cs_Le Pivert Mensajes publicados 8437 Estado Colaborador
         
        He hecho una lista desplegable dinámica siguiendo el enlace que te di.

        La lista se encuentra en la Hoja1, en la columna A. La lista desplegable está en C2.
        La celda definida para introducir una nueva fila es F2.

        Tienes que adaptarla según el nombre de las hojas y las celdas de tu entorno.

        Aquí está el código:

        Option Explicit Private Sub CommandButton1_Click() Dim derniereLigne As Long derniereLigne = Range("A" & Rows.Count).End(xlUp).Row + 1 If Range("F2").Value = "" Then Exit Sub Range("A" & derniereLigne).Value = Range("F2").Value Trier 'de A à Z End Sub 'macro faite avec l'enregistreur de macro Sub Trier() ActiveWorkbook.Worksheets("Feuil1").ListObjects("Tableau1").Sort.SortFields. _ Clear ActiveWorkbook.Worksheets("Feuil1").ListObjects("Tableau1").Sort.SortFields. _ Add Key:=Range("Tableau1[[#All],[Mois]]"), SortOn:=xlSortOnValues, Order _ :=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Feuil1").ListObjects("Tableau1").Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub 


        Para ordenar, usa el grabador de macros como yo, haciendo el ordenamiento manual.

        Voilà

        @+ El Pivert
        0
    2. marco
       
      Gracias, ¡perfecto!
      0
  2. MARCO
     
    Hola,

    gracias por tu respuesta.
    Mi situación es un poco diferente, porque mi "lista desplegable" está en otra hoja del libro llamada "TEST"
    Aquí tienes la información:
    "La tabla" se encuentra en una hoja llamada "BASE DONNEES"
    La lista desplegable está en una hoja llamada "TEST" en B12
    y mi celda para ingresar el nuevo valor a insertar en la tabla está en D3 de la hoja "BASE DONNEES"
    He modificado tu código con estos elementos pero no funciona.
    Aquí está el código:

    Option Explicit
    Private Sub CommandButton1_Click()
    Dim derniereLigne As Long
    derniereLigne = Range("C" & Rows.Count).End(xlUp).Row + 1
    If Range("D3").Value = "" Then Exit Sub
    Range("C" & derniereLigne).Value = Range("D3").Value
    Ordenar 'de A a Z
    End Sub
    'macro hecha con el grabador de macros
    Sub Trier()
    ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields._
    Clear
    ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields._
    Add Key:=Range("Tableau1[#All,[Mois]]"), SortOn:=xlSortOnValues, Order _
    :=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With


    Merci d'avance.
    Bonne journée
    0
    1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
       
      Vous devez l’adapter en fonction du nom des feuilles et des cellules de votre environnement

      il suffit de regarder la macro enregistrée pour obtenir la bonne syntaxe

      comme ceci:

      Private Sub CommandButton1_Click() Dim derniereLigne As Long derniereLigne = Worksheets("BASE DONNEES").Range("C" & Rows.Count).End(xlUp).Row + 1 If Worksheets("BASE DONNEES").Range("D3").Value = "" Then Exit Sub Worksheets("BASE DONNEES").Range("C" & derniereLigne).Value = Worksheets("BASE DONNEES").Range("D3").Value Trier 'de A à Z End Sub


      @+ Le Pivert
      0
      1. MARCO > cs_Le Pivert Mensajes publicados 8437 Estado Colaborador
         
        Hola,

        una vez más lo siento, pero he pegado su código en el código del botón.
        Crear una macro llamada Ordenar en la que he pegado este código
        'macro hecho con el grabador de macros
        Sub Ordenar()
        ActiveWorkbook.Worksheets("BASE DE DATOS").ListObjects("Tableau1").Sort.SortFields. _
        Clear
        ActiveWorkbook.Worksheets("BASE DE DATOS").ListObjects("Tableau1").Sort.SortFields. _
        Add Key:=Range("Tableau1[#All,[Mes]]"), SortOn:=xlSortOnValues, Order _
        :=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("BASE DE DATOS").ListObjects("Tableau1").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        End With

        y eso no funciona.
        ¿Puede confirmar que mi enfoque es correcto y decirme qué es lo que no funciona?
        Gracias
        0
  3. MARCO
     
    Hola,

    si pego el código de mi último mensaje después del código del botón, la adición funciona, pero aparece un error de VB que dice "error de compilación" "end sub esperado".
    Y otro punto: la adición se realiza al final de la lista pero no en orden alfabético.
    0
    1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
       
      error VB se indica como "error de compilación" "end sub esperado".

      Sin embargo, está claro

      falta el End Sub al final de la macro Trier, así que ¡el ordenamiento no se realiza!
      0
  4. Marco
     
    Hola,

    lo siento pero una vez más estoy empezando.
    He añadido "end sub" y efectivamente tiene sentido.
    Una nueva error aparece :
    "error de ejecución '1004'
    La método 'Range' del objeto '_Worksheet' ha fallado
    0
    1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
       
      El método 'Range' del objeto '_Worksheet' ha fallado

      falta una s en Worksheet:

      Worksheets("BASE DONNEES").Range("C" & derniereLigne).Value = Worksheets("BASE DONNEES").Range("D3").Value


      en programación hay que ser preciso!
      0
      1. marco > cs_Le Pivert Mensajes publicados 8437 Estado Colaborador
         
        Lo siento, pero ya verifiqué mi código y está correctamente escrito con una S en "workshetts". Este mensaje aparece de todos modos. Aquí está el código:
        0
      2. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730 > marco
         
        No hay que poner nada por encima de Option Explicit

        En qué línea se produce el error destacado en amarillo
        0
  5. marco
     
    si je ne mais pas le code au dessus de la ligne où dois-je le mettre ?
    L'erreur s produit sur les lignes ci-dessous avec une flèche sur la dernière ligne :
    ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields. _
    Add Key:=Range("Tableau1[#All],[Mois]"), SortOn:=xlSortOnValues, Order _
    :=xlAscending, DataOption:=xlSortNormal
    0
    1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
       
      Coloca tu macro al final de la Sub Trier

      Para el error, usa el registrador de macros una vez más haciéndolo con el tri manual.
      Puede que haya algo que hayas cambiado desde la última grabación de Tabla; la columna de la lista ya no es la C sino la B, etc.
      0
  6. marco
     
    Hola,

    vale para el grabador para la macro Ordenar
    Para la columna, por razones prácticas las he movido efectivamente a la B pero hice las modificaciones en el código.
    Por otro lado, respecto al código siguiente, ¿es normal que no haya nada antes de los ":"?
    :=xlAscending
    Gracias
    0
    1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
       
      Por cierto, respecto al código siguiente, ¿es normal que no haya nada antes de los ":"?
      :=xlAscending


      sí, porque se puede escribir así:

      Add Key:=Range("Tableau1[#All,[Mois]]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal


      Así es
      0
  7. marco
     
    gracias por su respuesta.
    He reemplazado por el código que me pidió pero el error persiste
    0
    1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
       
      traducción: "muestra el código completo"
      0
  8. marco
     
    Hola,

    aquí. Gracias

    Option Explicit
    Private Sub CommandButton1_Click()
    Dim derniereLigne As Long
    derniereLigne = Worksheets("BASE DONNEES").Range("B" & Rows.Count).End(xlUp).Row + 1
    If Worksheets("BASE DONNEES").Range("D3").Value = "" Then Exit Sub
    Worksheets("BASE DONNEES").Range("B" & derniereLigne).Value = Worksheets("BASE DONNEES").Range("D3").Value
    Trier 'de A à Z
    End Sub
    Sub Trier()
    ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields._
    Clear
    ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields._
    Add Key:=Range("Tableau1[#All,[Mois]]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
    End Sub
    0
    1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
       
      ¿Es esa la última macro que hiciste con el grabador?

      Porque si hiciste la manipulación correctamente, no hay ninguna razón para que eso no funcione.
      0
  9. marco
     
    Hola,

    acabo de eliminar la macro y volver a crearla y sigue apareciendo el mismo error.
    ¿Hay alguna forma de que os envíe el archivo?
    0
    1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
       
      Pasa por este sitio y luego pega el enlace aquí

      https://www.cjoint.com/
      0
  10. marco
     
    aquí está la dirección del enlace.
    gracias
    https://www.cjoint.com/c/JBzkrbVbPMo
    0
    1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
       
      Aquí


      https://www.cjoint.com/c/JBzkXbUK3aQ

      he agregado un botón, pero puedes poner el código en tu botón (error mío)

      @+ El Pivert
      0