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

  • Auteur de la discussion BEBER1212
  • Date de début

BEBER1212

Expert
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 »)
[cpp]Worksheets("Invité").Rows("4:4").Copy Destination:=Worksheets(Worksheets("Recherche").Range("B19").Value).Rows("4:4")[/cpp]
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.

 

zeb

Modérateur
Salut,

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 ?

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 ?
Code:
Dim cell As Range
For Each cell In Worksheets("Liste").Range("A1:A65536")
    If cell.Value = Worksheets("Recherche").Range("B17").Value And
       cell.Offset(, 1).Value = Worksheets("Recherche").Range("C17").Value Then
        ' // Trouvé !
        
        ...

        Exit For ' // <- Sinon, on va jusqu'à la ligne 65536 pour rien !
    End If
Next
Qu'y a-t-il de sioux là dedans ?
 

BEBER1212

Expert
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 :
[cpp]Worksheets("Invité" ).Rows("4:4" )[/cpp] dans cette ligne. Et là, je sèche... :??:
Une petite aide supplémentaire ?

Merci.
 

zeb

Modérateur
:)

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.
Code:
' // Trouvé
Worksheets(invite).Rows(4).Copy Destination:= cell.EntireRow

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

EDIT: cell, et non Cells.
 

BEBER1212

Expert
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 :

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

Un petit coup de pouce ?

Merci
 

zeb

Modérateur
Oups, il y a une coquille dans le code que je te proposais.
Il faut lire cell, et non Cells.
 

BEBER1212

Expert
Bonjour,

J'avais corrigé (Désolé je l'ai pas précisé :( Honte sur moi )
 

zeb

Modérateur
Meilleure réponse
Gné ? Bah, je comprends pas.

Ton code, correctement présenté :
Code:
Dim cell As Range

Application.ScreenUpdating = False

Worksheets("Invité" ).Rows("4:4" ).Copy Destination:=Worksheets(Worksheets("Recherche" ).Range("B19" ).Value).Rows("4:4" )

For Each cell In Worksheets("Liste" ).Range("A1:A65536" )
    If cell.Value = Worksheets("Recherche" ).Range("B17" ) And 
       cell.Offset(, 1).Value = Worksheets("Recherche" ).Range("C17" ) Then
        Worksheets("Invité" ).Rows(4).Copy Destination:=cell.EntireRow
        Exit For ' // <- Sinon, on va jusqu'à la ligne 65536 pour rien !
    End If
Next

Worksheets(Worksheets("Recherche" ).Range("B19" ).Value).Visible = 0
Worksheets("Modification" ).Visible = 0
Worksheets("Liste" ).Activate
Application.ScreenUpdating = True


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

Code:
Dim cell        As Range
Dim cell_nom    As Range  ' // cellule de référence dans Recherche
Dim nom_feuille As String
Dim f_personne  As Worksheet
Dim f_invite    As Worksheet

Set cell_nom = Worksheets("Recherche" ).Range("B17" )
nom_feuille  = cell_nom.Offset(2)
Set f_personne = Worksheets(nom_feuille)
Set f_invite   = Worksheets("Invité")

' // Première copie
f_invite.Rows(4).Copy f_personne.Rows(4)

For Each cell In Worksheets("Liste").Columns(1).Cells
    If cell.Offset(, 0).Value = cell_nom.Offset(, 0).Value And
       cell.Offset(, 1).Value = cell_nom.Offset(, 1).Value _
    Then
        ' // Seconde copie
        Worksheets("Invité" ).Rows(4).Copy cell.EntireRow
        Exit For
    End If
Next
Qu'est-ce qui ne marche pas ?
 

BEBER1212

Expert
Bonjour,

Si si, ça fonctionne. Ça ne fonctionnait pas avec le cellS, mais avec cell ça fonctionne très bien.

Je vais quand même créer un autre sujet. Il ya tjs qqch que je n'arrive pas à faire ;)

Merci
 

zeb

Modérateur
Ah, ouf... Ben c'était une coquille, même pas une erreur :/
Tu me passes ce topic en résolu steplé ?

A te lire, dans un autre topic ;)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 162
Messages
6 718 639
Membres
1 586 458
Dernier membre
Alex932
Partager cette page
Haut