MODIFICAR EL CONTENIDO DE UNA CELDA DE UNA TABLA EN EXCEL VBA

Resuelto
patrick1870 Mensajes publicados 65 Fecha de registro   Estado Miembro Última intervención   -  
patrick1870 Mensajes publicados 65 Fecha de registro   Estado Miembro Última intervención   -

Hola a todos


Me estoy lanzando por primera vez a la escritura de una macro para Excel.

Me encuentro con un problema: ¿cómo modificar una celda de una tabla copiando, mediante macro, el contenido de otra celda?
Sé hacer la operación inversa: extraer un dato de una tabla y colocarlo en otra celda.

Mis datos están colocados en dos hojas distintas de un mismo libro: una hoja "entrada" y una hoja "contadores".

Aquí hay una parte simplificada de la macro que debería permitir comprender mejor mi problema, espero :)

' MACRO "VALIDACIÓN"

Dim contador1 As Integer
    
    
'   1 -  recuperación del contador
    
    Hojas("entrada").Seleccionar
    Rango("F5").Seleccionar
    CeldaActiva.FormulaR1C1 = "=BUSCARV(R6C3,Contadores!R3C1:R50C7,2)"

'   2 -  tratamientos diversos sobre los datos de la hoja "entrada"

'   3 -  incremento de contador1
    
     contador1=contador1 +1
     rango("F5") = contador1
'   
'    4 -  copiar el contenido de F5 en la celda de la tabla de la hoja
'         "contadores" (la misma celda que se utilizó para la recuperación
'          del 1- anterior) ... y aquí es donde me quedo en blanco ....

Gracias de antemano a quien pueda ayudarme.

6 respuestas

  1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Ambassadeur 1 588
     

    Hola,

    No entiendo "la misma celda que se utilizó para la recuperación del 1 arriba".

    Dame quizás un ejemplo, y explica esto claramente en español.

    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      Creo que estás intentando obtener esto:

      Dim tabl As Range, encuentra As Range Set tabl = Sheets("contadores").[a3:a50] Set encuentra = tabl.Find(Sheets("entrada").[c6]) If Not encuentra Is Nothing Then encuentra.Offset(, 2) = encuentra.Offset(, 2) + 1 End If 
      0
  2. patrick1870 Mensajes publicados 65 Fecha de registro   Estado Miembro Última intervención   17
     

    Lo siento por no haber sido lo suficientemente claro ... pensaba que me había expresado en francés. Esto puede deberse a que no manejo VBA y que tal vez no utilicé las palabras exactas.

    En el 1 - voy a buscar en la tabla (que está en la hoja 'Contadores') un dato, utilizando

    BúscaV(contenido de la celda C6 de la hoja "entrada"; tabla A3:G50 de la hoja "Contadores"; 2ª columna) **

    y es en esta misma celda de la tabla donde quiero copiar el contenido de la celda F5 al final de la macro.

    ¿Está más claro así? Si no, ¿qué tipo de ejemplo te gustaría?

    ** transcripción de "=BUSCARV(R6C3,Contadores!R3C1:R50C7,2)"

    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      De hecho, estás describiendo tu código en lugar de explicar el resultado que quieres obtener.

      Un ejemplo de ejemplo:

      Sea un tabla:

       123 456 789 555 888 999

      la celda C6 de la hoja "entrada" contiene 555.

      el objetivo es reemplazar 999 por el contenido de la celda F5 de la hoja "entrada".

      .

      Sugerencia, muy cercana a la sugerencia en #2:

      Set tabl = Sheets("contadores").[a3:a50] Set trouve = tabl.Find(Sheets("entrada").[c6]) If Not trouve Is Nothing Then trouve.Offset(, 2) = Sheets("entrada").[f5] End If
      0
    2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      ¿Has probado el código que sugerí el 22 de abril de 2024 a las 16:15?

      1
  3. patrick1870 Mensajes publicados 65 Fecha de registro   Estado Miembro Última intervención   17
     

    Hola,

    Mis más sinceras disculpas por este largo silencio (vacaciones con los nietos :)).

    Desde el principio habías entendido bien lo que quería hacer.
    Desafortunadamente, un descuido de mi parte me había hecho pensar que había explicado tan mal mi problema que tú no lo habías entendido en absoluto.
    Me he puesto a ello de nuevo y tu primera macro corresponde exactamente a lo que estaba buscando.

    Te agradezco enormemente por tu ayuda, ya que solo probablemente nunca lo hubiera logrado. No he comprendido del todo las instrucciones contenidas en la macro, pero lo esencial es que funciona. Como decía, soy novato (¡con más de 75 años!) en materia de VBA.
    Nuevamente, gracias.

    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      Genial, no dudes en llamarme si quieres entender y/o modificar la macro.

      1
  4. patrick1870 Mensajes publicados 65 Fecha de registro   Estado Miembro Última intervención   17
     

    Hola yg_be

    Vuelvo a recurrir a ti, arriesgándome a abusar de tu paciencia, porque realmente no entiendo lo que está pasando.

    He reescrito todo mi proyecto, he cambiado los nombres de las hojas, los nombres de las variables, las ubicaciones de las celdas, etc.

    Pensé que había reescrito la macro de forma idéntica, teniendo en cuenta estos cambios. Pero ahora no funciona. Además, he sobrescrito la versión anterior de la macro (la que funcionaba) sin poder recuperarla.

    La variable "trouve" mantiene obstinadamente el valor "Nothing", lo que hace que la macro sea inoperante.
    ¿Sabes decirme cuál podría ser la causa y cómo solucionarlo?

    Gracias de antemano por la ayuda que puedas brindarme.

    ---------

    A continuación, la nueva macro:

     Sub YY6_MAJ_compteurs() ' ' 6. Actualización de contadores ' ' 6.1 contador de entrada ' Sheets("YY_Paramètres").Select Range("J2").Select Range("J2") = Sheets("YY_Saisie").[G9] ' ' 6.2 contador por mes y tipo de operación ' ' en la tabla a3:g50 de la hoja "YY_Paramètres" se encuentra: '- el mes en la columna A y '- en las columnas B a G los contadores correspondientes a los 6 tipos de operaciones ' Dim tabl As Range, trouve As Range Dim colonn As Integer colonn = Sheets("YY_Saisie").[i9] 'la celda i9 de la hoja YY_Saisie contiene el número de la columna de la tabla Set tabl = Sheets("YY_Paramètres").[a3:g50] Set trouve = tabl.Find(Sheets("YY_Saisie").[c9]) 'en la celda c9 de la hoja YY_Saisie se encuentra el mes If Not trouve Is Nothing Then trouve.Offset(, colonn) = trouve.Offset(, colonn) + 1 End If End Sub 
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      hola,

      Supongo, sin ver tu hoja de cálculo, que el valor en [c9] en la hoja de entrada no es exactamente idéntico a uno de los valores de la tabla. Lo importante es el valor registrado en una celda, no el valor mostrado en esa celda.

      Por cierto, ¿por qué buscas en toda la tabla y no solo en la columna A?

      0
  5. patrick1870 Mensajes publicados 65 Fecha de registro   Estado Miembro Última intervención   17
     

    Hola yg_be

    Muchas gracias por tu respuesta.

    He estado buscando durante horas dónde podría estar el error, pero no he encontrado nada.

    Sin embargo, he encontrado en una memoria USB una versión antigua de la macro... que funcionaba en su momento.

    He retomado esta macro y la he modificado para tener en cuenta los cambios que han ocurrido y... ¡funciona!

    A pesar de eso, la nueva línea "set trouve..." (que se puede sospechar que es responsable de mis dificultades) es idéntica a la que figuraba en la macro cuya copia incluí en mi mensaje anterior.

    Empiezo a preocuparme por la continuidad de mi proyecto porque no es la primera vez que encuentro dificultades cuya causa no comprendo. Por ejemplo, he tenido fórmulas que aparecían en la hoja de entrada pero que no se ejecutaban... Busqué durante mucho tiempo antes de rendirme y reescribir toda la página de entrada en una nueva hoja, con las fórmulas, los formatos, el formato condicional, los controles de entrada... También he tenido problemas de memoria disponible... a pesar de que tengo 16 GB de memoria RAM y no tenía ningún otro programa abierto aparte de Excel.

    Utilizo Excel de la suite 365 con suscripción mensual y, por lo tanto, imagino que esta versión no tiene errores.

    No soy muy optimista respecto al futuro. Me había propuesto un desafío para hacer trabajar mi viejo cerebro, pero tengo miedo de que esto esté fuera de mi alcance.

    De todos modos, te agradezco enormemente el interés y la paciencia que has tenido con mis problemas de principiante.

    Patrick.

    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      "problemas de memoria disponible": a menudo tengo esto en el editor de VBA, así que cierro Excel y lo vuelvo a abrir.

      Si compartes tu archivo, podré buscar la causa del problema con "set encuentra".

      0
  6. patrick1870 Mensajes publicados 65 Fecha de registro   Estado Miembro Última intervención   17
     

    hola yg_be

    y gracias por tu mensaje.

    La macro ahora funciona, aunque no entiendo por qué no funcionaba antes.

    Así que seguiré avanzando ...

    Saludos

    Patrick

    0