VBA - Macro para seleccionar una fila bajo condiciones

Resuelto
jeannuslanus Mensajes publicados 15 Fecha de registro   Estado Miembro Última intervención   -  
jeannuslanus Mensajes publicados 15 Fecha de registro   Estado Miembro Última intervención   -
Hola,

Debo, dentro del marco de mi estágio, hacer una macro que busque un valor en la columna A de la hoja "seguimiento renego grupo". Este valor depende de la celda C2 de otra hoja titulada "Entrada". Si el programa encuentra el valor en "seguimiento renego grupo", selecciona las 13 primeras celdas de la fila correspondiente y las copia.

Por ahora esto es lo que he logrado hacer pero soy principiante, así que aún es difícil para mí y no funciona!

'búsqueda macro
Sub búsqueda()
Hojas("Entrada").Selectderlig = Range("C2").End(xlUp).
Fila Hojas("Seguimiento Renego Grupo").
Seleccionar Range("A2").Select
Para i = 2 Hasta Cells(Rows.Count, 1).End(xlUp).Row
Si Cells(i, 1) = derlig Entonces Rows(i).Cut Sheets(2).Cells(Rows.Count, 1).End(xlUp)(2)
Siguiente

End Sub
¡Muchas gracias de antemano por tu ayuda!

7 respuestas

  1. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
     
    Hola,
    ¿Y las copias dónde las haces?

    --
    Michel
    0
  2. jeannuslanus Mensajes publicados 15 Fecha de registro   Estado Miembro Última intervención  
     
    los copio transpuestos como lista en la pestaña "entrada" a partir de la celda C2. ¡Muchas gracias!
    0
  3. jeannuslanus Mensajes publicados 15 Fecha de registro   Estado Miembro Última intervención  
     
    es genial, ¡muchas gracias! pero el copiar-pegar se hace en línea, ¿cómo modificar el programa para hacer en su lugar un "cortar-pegar transpuesto" donde la línea cortada desaparece?
    ¡sería realmente increíble !!!! :D
    0
    1. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
       
      Me equivoqué al leer, perdón te hice una macro pero tendrías el mismo resultado más simplemente con una fórmula usando BUSCARV si no conoces a esa “tonta” allí https://www.commentcamarche.net/faq/s/recherchev Sheets("saisie").Range("D2:O2") = .Range(.Cells(Lig, "B"), .Cells(Lig, "M")).Value se convierte en Sheets("saisie").Range("C3:C14") = Application.Transpose(.Range(.Cells(Lig, "B"), .Cells(Lig, "M")))
      0
  4. jeannuslanus Mensajes publicados 15 Fecha de registro   Estado Miembro Última intervención  
     
    ¡Es increíble, funciona maravillosamente!
    ¡muchas gracias de todo corazón!
    una última cosa si tenéis aún unos minutos para mí:
    he creado una macro que funciona muy bien, el principio es que en la hoja "saisie" se puede añadir una línea al final del cuadro "suivi regnego groupe".
    Gracias al programa "copie" que me acabáis de dar, ahora puedo rellenar las rangées de "saisie" simplemente a partir de los datos que introduzco en la celda C2 que la macro va a buscar en la hoja "suivi renego groupe".
    la idea sería poder eliminar la línea si el valor de C2 ya existe en la hoja "suivi renego groupe" para "grabar" los datos que introduzco en la hoja "saisie".
    ¿sería posible modificar el siguiente programa para hacer eso? ¿es suficientemente claro para vosotros?
    Sub enregistrer()
    '
    ' Enregistrer Macro
    '
    Sheets("Saisie").Select
    Range("C2:C15").Select
    Selection.Copy
    Sheets("Suivi Renego Groupe").Select
    Range("A2").Select

    Do While Not IsEmpty(ActiveCell.Value)
    ActiveCell.Offset(1, 0).Activate
    Loop

    Range("A81").Select
    ActiveWindow.SmallScroll Down:=9
    Sheets("Saisie").Select
    Selection.Copy
    Sheets("Suivi Renego Groupe").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=True
    End

    End Sub

    End Sub

    en clair il faudrait ajouter une alternative du style "ce programme s'applique quoi qu'il arrive mais si la valeur de la cellule C2 de la feuille "saisie" apparaît dans la colonne A de la feuille C2, alors il faut supprimer la ligne correspondante".

    Merci beaucoup d'avance !
    0
  5. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
     
    ¿Es suficientemente claro para usted?

    Absolutamente no

    --
    Michel
    0
  6. jeannuslanus Mensajes publicados 15 Fecha de registro   Estado Miembro Última intervención  
     
    solo hay que agregar a mi programa esta función:

    Si alguna vez el valor de la celda C2 de la hoja "saisie" existe en la columna "suivi renego groupe", entonces hay que eliminar la fila correspondiente al valor que se encuentra en "suivi renego groupe"
    0
    1. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
       
      Entonces, ¿para qué sirve lo que te propuse?
      0
    2. jeannuslanus Mensajes publicados 15 Fecha de registro   Estado Miembro Última intervención  
       
      El objetivo es actualizar datos pasando por una hoja de entrada: buscamos información que está en la tabla "seguimiento grupo renegociación", a partir de un dato que introducimos en la hoja de entrada y se muestran en la hoja de entrada, lo modificamos y se guardan en la tabla "seguimiento grupo renegociación". Para que se guarden, hice este programa:
      Sub enregistrer()
      '
      ' Enregistrer Macro
      '
      Sheets("Saisie").Select
      Range("C2:C15").Select
      Selection.Copy
      Sheets("Suivi Renego Groupe").Select
      Range("A2").Select

      Do While Not IsEmpty(ActiveCell.Value)
      ActiveCell.Offset(1, 0).Activate
      Loop

      Range("A81").Select
      ActiveWindow.SmallScroll Down:=9
      Sheets("Saisie").Select
      Selection.Copy
      Sheets("Suivi Renego Groupe").Select
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=True
      End


      End Sub


      End Sub

      Mais les valeurs s'enregistrent à la suite comme de nouvelles valeurs sans écraser les précédentes. Je voudrais donc qu'elles continuent de s'enregistrer à la suite en supprimant les anciennes lignes..
      Pour cela, il faudrait compléter le programme ci-dessus avec une fonction qui supprime la ligne où la donnée C2 (de la feuille de saisie) apparaît dans la colonne A (de la feuille "suivi renego groupe")
      Je sais que c'est assez complexe, mais mon boss n'a pas compris que j'étais en stage de com et pas de VBA ...
      si vous réussissez à comprendre ce serait vraiment génial !!
      0
    3. jeannuslanus Mensajes publicados 15 Fecha de registro   Estado Miembro Última intervención  
       
      pero tranquílez, lo que me has dado ya es super útil!!
      0
    4. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
       
      Bueno, es lo mismo en sentido contrario :o)
      Option Explicit
      '------
      Sub enregistrer()
      Dim Valeur, Lig As Integer
      Valeur = Sheets("saisie").Range("C2")
      With Sheets("Suivi Renego Groupe")
      Lig = .Columns("A").Find(Valeur, , , , , xlPrevious).Row
      Range(.Cells(Lig, "B"), Cells(Lig, "N")) = Application.Transpose(Sheets("saisie").Range("C3:C15"))
      End With
      End Sub
      0
    5. jeannuslanus Mensajes publicados 15 Fecha de registro   Estado Miembro Última intervención  
       
      gracias, ¡es genial! sin embargo tengo un mensaje de error relacionado con la línea Range(.cells.....etc ¿sabes por qué?
      gracias de nuevo, ¡me ayuda mucho!
      0
  7. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
     
    Option Explicit
    '---
    Sub copiar()
    Dim Valor As Variant, Fila As Integer

    Valor = Sheets("saisie").Range("C2")
    With Sheets("seguimiento renego grupo")
    On Error GoTo vacio
    Fila = .Columns("A").Find(Valor, , , , , xlPrevious).Row
    Sheets("saisie").Range("D2:O2") = .Range(.Cells(Fila, "B"), .Cells(Fila, "M")).Value
    Exit Sub
    vacío:
    MsgBox Valor & " inconnu", vbCritical
    End With
    End Sub
    -1