VBA - Macro pour selectionner une ligne sous conditions

Résolu
jeannuslanus Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -  
jeannuslanus Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je dois, dans le cadre de mon stage, faire une macro qui recherche une valeur dans la colonne A de la feuille "suivi renego groupe". Cette valeur dépend de la cellule C2 d'une autre feuille intitulée "Saisie". Si le programme trouve la valeur dans "suivi renego groupe", il selectionne les 13 premières cellules de la ligne correspondante et les copie.

Pour l'instant voilà ce que j'ai réussi à faire mais je suis débutante donc c'est encore difficile pour moi et ça ne fonctionne pas!

'recherche macro
Sub recherche()
Sheets("Saisie").Selectderlig = Range("C2").End(xlUp).
Row Sheets("Suivi Renego Groupe").
Select Range("A2").Select
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 1) = derlig Then Rows(i).Cut Sheets(2).Cells(Rows.Count, 1).End(xlUp)(2)
Next

End Sub
Merci beaucoup d'avance pour votre aide !

7 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,
    Et tu les copies où ?
    0
  2. jeannuslanus Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
     
    je les copie en transposé sous forme de liste dans l'onglet "saisie" à partir de la cellule C2 !
    Merci beaucoup !
    0
  3. jeannuslanus Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
     
    c'est genial merci beacoup ! par contre le copier coller se fait en ligne, comment modifier le programme pour faire plutot un "couper-coller transposé" où la ligne coupée disparait?
    ca serait vraimet super !!!! :D
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      J'avais mal lu, excuse moi

      je t'ai fait une macro mais tu aurais le m^me résultat plus simplement par formule avec RECHERCHEV
      si tu ne connais cette bê^te là
      https://www.commentcamarche.net/faq/s/recherchev

      Sheets("saisie").Range("D2:O2") = .Range(.Cells(Lig, "B"), .Cells(Lig, "M")).Value
      devient
      Sheets("saisie").Range("C3:C14") = Application.Transpose(.Range(.Cells(Lig, "B"), .Cells(Lig, "M")))
      0
  4. jeannuslanus Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
     
    c'est incroyable ça marche magnifiquement bien !!
    merci de tout coeur !!
    une dernière chose s vous avez encore quelques minutes à m'accorder:
    j'ai créé une macro qui fonctionne très bien, le principe c'est que dans la feuille "saisie" on peut ajouter une ligne à la suite du tableau "suivi regnego groupe".
    Grâce au programme "copie" que vous venez de me donner, je peux maintenant remplir les plages de "saisie" simplement à partir de la donnée que je rentre dans la cellule C2 que la macro va rechercher dans la feuille "suivi renego groupe".
    l'idée serait de pouvoir supprimer la ligne si la valeur de C2 elle existe déjà dans la feuille "suivi renego groupe" pour "enregistrer" les données que j'entre dans la feuille "saisie".
    serait il alors possible de modifier le programme suivant pourfaire cela? est-ce suffisamment clair pour vous ?
    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

    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" apparait dans la collonne A de la feuille C2, alors il faut supprimer la ligne correspondante".

    Merci beaucoup d'avance !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    est-ce suffisamment clair pour vous ?

    Absolument pas
    0
  7. jeannuslanus Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
     
    il faut simplement rajouter à mon programme cette fonction:

    Si jamais la valeur de la cellule C2 de la feuille "saisie" existe dans la colonne "suivi renego groupe", alors il faut supprimer la ligne correspondante à la cellule qui se trouve dans "suivi renego groupe"
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Alors à quoi sert ce que je t'ai proposé ?
      0
    2. jeannuslanus Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
       
      l'objectif est de mettre à jour des données en passant par une feuille de saisie: on recherche des informations qui sont dans le tableau "suivi groupe renego", à partir d'une donnée que l'on entre dans la feuille de saisie et elles s'affichent dans la feuille de saisie , on les mofidie et elles s'enregistrent dans le tableau "suivi groupe renego". Pour qu'elles s'enregistrent j'ai fait ce programme :
      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

      Mais les valeurs s'enregistrent à la suite comme des nouvelles valeurs sans écraser les précédentes. Je voudrais donc qu'elles continuent de s'enregistrer à la suite en supprimant les anciennes lignes..
      Pöur 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) apparait dans la collonne A (de la feuille "suivi renego groupe")
      Je sais 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 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
       
      mais rassurez vous, ce que vous m'avez donné est déjà super utile !!
      0
    4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bin, c'est la m^me dans l'autre sens :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 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
       
      merci c'est super !! par contre j'ai un message d'erreur concernant la ligne Range(.cells.....etc est ce que vous savez pourquoi?
      merci encore ca m'aide vraiment !
      0
  8. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Option Explicit
    '---
    Sub copier()
    Dim Valeur As Variant, Lig As Integer

    Valeur = Sheets("saisie").Range("C2")
    With Sheets("suivi renego group")
    On Error GoTo vide
    Lig = .Columns("A").Find(Valeur, , , , , xlPrevious).Row
    Sheets("saisie").Range("D2:O2") = .Range(.Cells(Lig, "B"), .Cells(Lig, "M")).Value
    Exit Sub
    vide:
    MsgBox Valeur & " inconnu", vbCritical
    End With
    End Sub

    Michel
    -1