Se connecter avec
S'enregistrer | Connectez-vous

Remplacement de ligne si une cellule contient la valeur d'une autre

Dernière réponse : dans Programmation

Bonjour à tous,

Après une petite pause, me voila de retour avec une nouvelle question.
J'ai le fichier Exel 2003 suivant :

J’ai une feuille « Liste » qui récapitule les données d’une liste d’invités : nom, prénom, adresse, tel…avec un bouton Création d’invité
Ce bouton me renvoie sur une feuille « Création » avec des boites déroulantes, boites a cocher…liées à des cellules de la feuille « Invité » qui se remplissent donc automatiquement.
Quand je valide sur la feuille « Création », ça copie les infos de « Invité » sur « Liste », et aussi sur une nouvelle feuille qui se renomme avec le nom de l’invité.

J’arrive (presque :(  ) à mon problème…
Pour modifier les infos d’un invité, j’ai sur la feuille « Liste » un bouton Recherche, qui m’envoie sur une feuille « Recherche » (bien trouvé, non ? :D  ) . Je recherche l’invité avec son nom et prénom (boites déroulantes) et ça m’ouvre SA feuille qui avait été créée en validant. SA feuille s’appelle « Nom Prénom ». Un bouton Modifier se crée dessus.
Si je clique, ça m’ouvre une feuille « Modification » (Encore bien trouvé :D  ) qui reprend les boites déroulantes, à cocher comme la feuille « Création ». Ces boites sont liées aux cellules de la feuille « Invité ». Quand je valide, ça copie ces valeurs sur la feuille de l’invité : (elle se nomme avec la valeur de la cellule B19 de la feuille « Recherche »)
  1. Worksheets("Invité").Rows("4:4").Copy Destination:=Worksheets(Worksheets("Recherche").Range("B19").Value).Rows("4:4")

Et voila mon problème :sweat:  :
Je veux que ça copie aussi sur la ligne de l’invité dans la feuille « Liste » récapitulative. Il faut donc que je trouve sur cette feuille dans la colonne A le nom sur la feuille « Recherche » en B17, et dans la colonne B le prénom en C17 sur "Recherche", puis copier sur cette ligne, la ligne 4 de la feuille « Invité ».
J’espère être clair. Je peux mettre mon fichier si ça aide.

Merci d’avance.

Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

Gné ? Bah, je comprends pas.

Ton code, correctement présenté :
  1. Dim cell As Range
  2.  
  3. Application.ScreenUpdating = False
  4.  
  5. Worksheets("Invité" ).Rows("4:4" ).Copy Destination:=Worksheets(Worksheets("Recherche" ).Range("B19" ).Value).Rows("4:4" )
  6.  
  7. For Each cell In Worksheets("Liste" ).Range("A1:A65536" )
  8. If cell.Value = Worksheets("Recherche" ).Range("B17" ) And
  9. cell.Offset(, 1).Value = Worksheets("Recherche" ).Range("C17" ) Then
  10. Worksheets("Invité" ).Rows(4).Copy Destination:=cell.EntireRow
  11. Exit For ' // <- Sinon, on va jusqu'à la ligne 65536 pour rien !
  12. End If
  13. Next
  14.  
  15. Worksheets(Worksheets("Recherche" ).Range("B19" ).Value).Visible = 0
  16. Worksheets("Modification" ).Visible = 0
  17. Worksheets("Liste" ).Activate
  18. Application.ScreenUpdating = True



Bon, j'ajoute un peu de variables, histoire que ce soit un peu plus clair.

  1. Dim cell As Range
  2. Dim cell_nom As Range ' // cellule de référence dans Recherche
  3. Dim nom_feuille As String
  4. Dim f_personne As Worksheet
  5. Dim f_invite As Worksheet
  6.  
  7. Set cell_nom = Worksheets("Recherche" ).Range("B17" )
  8. nom_feuille = cell_nom.Offset(2)
  9. Set f_personne = Worksheets(nom_feuille)
  10. Set f_invite = Worksheets("Invité")
  11.  
  12. ' // Première copie
  13. f_invite.Rows(4).Copy f_personne.Rows(4)
  14.  
  15. For Each cell In Worksheets("Liste").Columns(1).Cells
  16. If cell.Offset(, 0).Value = cell_nom.Offset(, 0).Value And
  17. cell.Offset(, 1).Value = cell_nom.Offset(, 1).Value _
  18. Then
  19. ' // Seconde copie
  20. Worksheets("Invité" ).Rows(4).Copy cell.EntireRow
  21. Exit For
  22. End If
  23. Next
Qu'est-ce qui ne marche pas ?
Expert Programmation

Salut,

Citation :
J’ai une feuille « Liste » qui récapitule les données d’une liste d’invités : nom, prénom, adresse, tel…
As-tu déclaré ton fichier à la CNIL ?

Citation :
Je peux mettre mon fichier si ça aide.
Non. J'ai confiance en toi, tant que justement nous n'échangeons pas de fichiers plein de macros. Comme l'occasion ne se présente pas, les larrons passent leur chemin, et ne restent que des gens dignes de confiance ;) 

T'arrive à faire un truc pareil et t'es pas fichu de trouver un nom et un prénom dans une feuille ?
  1. Dim cell As Range
  2. For Each cell In Worksheets("Liste").Range("A1:A65536")
  3. If cell.Value = Worksheets("Recherche").Range("B17").Value And
  4. cell.Offset(, 1).Value = Worksheets("Recherche").Range("C17").Value Then
  5. ' // Trouvé !
  6.  
  7. ...
  8.  
  9. Exit For ' // <- Sinon, on va jusqu'à la ligne 65536 pour rien !
  10. End If
  11. Next

Qu'y a-t-il de sioux là dedans ?

Bonjour Zeb, et le reste du forum,

Effectivement je n'ai pas déclaré mon fichier à la CNIL, mais en même temps il s'agit de la liste des invités de mon mariage, alors si il y en a qui qui veut supprimer ses données, tant pis pour lui... :D 

Je suis effectivement arrivé jusque là grâce à l'aide d'internautes, et grâce à ton aide, surtout, Zeb. Sauf qu'une fois de plus, même avec tes explications, je sèche.
En effet, je comprends bien comment trouver les cases contenant le nom et le prénom de l'invité recherché.
Je saurais donc comment copier cette ligne par exemple. Sauf que je veux faire l'inverse, c'est à dire copier une autre ligne :
  1. Worksheets("Invité" ).Rows("4:4" )
dans cette ligne. Et là, je sèche... :??: 
Une petite aide supplémentaire ?

Merci.
Expert Programmation

:) 

Euh, par contre, je t'ai déjà donné la soluce, non ?

Dans le code de recherche que je t'ai proposé, quand la ligne dans la liste est trouvée, tu copies celle d'invité vers cette ligne.
  1. ' // Trouvé
  2. Worksheets(invite).Rows(4).Copy Destination:= cell.EntireRow


Sauf, si je n'ai pas compris la question. :( 

EDIT: cell, et non Cells.

Bonjour à tous,

J'ai essayé ce que tu m'as proposé mais au lieu de me copier la ligne sur la ligne des cellules recherchées, ça me copie cette ligne sur TOUTES :ouch:  les lignes de la feuille "modification" où il y a le bouton Valider. :( 

Pour info, mon code sur le bouton Valider est :

  1. Private Sub Valider_modif_Click()
  2. Dim cell As Range
  3. Application.ScreenUpdating = False
  4. Worksheets("Invité").Rows("4:4").Copy Destination:=Worksheets(Worksheets("Recherche").Range("B19").Value).Rows("4:4")
  5. For Each cell In Worksheets("Liste").Range("A1:A65536")
  6. If cell.Value = Worksheets("Recherche").Range("B17") And cell.Offset(, 1).Value = Worksheets("Recherche").Range("C17") Then
  7. Worksheets("Invité").Rows(4).Copy Destination:=Cells.EntireRow
  8. Exit For ' // <- Sinon, on va jusqu'à la ligne 65536 pour rien !
  9. End If
  10. Next
  11. Worksheets(Worksheets("Recherche").Range("B19").Value).Visible = 0
  12. Worksheets("Modification").Visible = 0
  13. Worksheets("Liste").Activate
  14. Application.ScreenUpdating = True
  15. End Sub


Un petit coup de pouce ?

Merci
Lassé par la pub ? Créez un compte