VBA - Macro pour selectionner une ligne sous conditions

Résolu/Fermé
jeannuslanus Messages postés 15 Date d'inscription lundi 30 juin 2014 Statut Membre Dernière intervention 5 août 2014 - 30 juin 2014 à 10:50
jeannuslanus Messages postés 15 Date d'inscription lundi 30 juin 2014 Statut Membre Dernière intervention 5 août 2014 - 1 juil. 2014 à 09:20
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 !
A voir également:

7 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
30 juin 2014 à 11:04
Bonjour,
Et tu les copies où ?
0
jeannuslanus Messages postés 15 Date d'inscription lundi 30 juin 2014 Statut Membre Dernière intervention 5 août 2014
30 juin 2014 à 11:18
je les copie en transposé sous forme de liste dans l'onglet "saisie" à partir de la cellule C2 !
Merci beaucoup !
0
jeannuslanus Messages postés 15 Date d'inscription lundi 30 juin 2014 Statut Membre Dernière intervention 5 août 2014
30 juin 2014 à 11:57
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
30 juin 2014 à 13:54
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
jeannuslanus Messages postés 15 Date d'inscription lundi 30 juin 2014 Statut Membre Dernière intervention 5 août 2014
30 juin 2014 à 14:40
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
30 juin 2014 à 14:50
est-ce suffisamment clair pour vous ?

Absolument pas
0
jeannuslanus Messages postés 15 Date d'inscription lundi 30 juin 2014 Statut Membre Dernière intervention 5 août 2014
30 juin 2014 à 14:58
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
30 juin 2014 à 15:00
Alors à quoi sert ce que je t'ai proposé ?
0
jeannuslanus Messages postés 15 Date d'inscription lundi 30 juin 2014 Statut Membre Dernière intervention 5 août 2014
30 juin 2014 à 15:11
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
jeannuslanus Messages postés 15 Date d'inscription lundi 30 juin 2014 Statut Membre Dernière intervention 5 août 2014
30 juin 2014 à 15:14
mais rassurez vous, ce que vous m'avez donné est déjà super utile !!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 30/06/2014 à 17:05
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
jeannuslanus Messages postés 15 Date d'inscription lundi 30 juin 2014 Statut Membre Dernière intervention 5 août 2014
30 juin 2014 à 17:41
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 30/06/2014 à 11:39
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