Lire les lignes du dessus et recopier des infos

Salut à tous,

Jsuis en galère totale, je fait pas du tout de VBA, mais là j'en aurais bien besoin! J'ai un fichier avec dans la colonne A des chaines des caractères types "Toto Tata" et ensuite des infos le concernant dans d'autres colonnes!

Sauf que certaines personnes apparaissent plusieurs fois dans le fichier car chaque ligne correspond à une action définit!

Je souhaiterais que lorsque j'ajoute des lignes cela regarde si ce Nom est deja dans le fichier et si oui recopier cette de ces informations.

Cordialement

Bonjour,

code à mettre dans le module de la feuille qui va bien

Private Sub Worksheet_Change(ByVal Target As Range)
' macro qui s'active dès qu'une cellule de la feuille est modifiée
    If Target.Column = 1 Then 'si changement en colonne 1
        dl = Cells(Rows.Count, 1).End(xlUp).Row 'dl = dernière ligne contenant des données en colonne 1
        If dl = Target.Row Then 'si cette dernière ligne est celle sur laquelle on vient d'introduire une donnée
            Set pl = Range("A1").Resize(dl - 1) 
            Set re = pl.Find(Target.Value, lookat:=xlWhole) 'on recherche dans les lignes précédentes, la donnée que l'on vient d'introduire
            If Not re Is Nothing Then 'si cette donnée existe dans une ligne précédente
                Application.EnableEvents = False
                re.EntireRow.Copy Target 'on copie cette ligne sur la ligne sur laquelle on vient d'introduire une donnée
                Application.EnableEvents = True
            End If
        End If
    End If
End Sub

Salut h2so4,

Merci bien de ta réponse si rapide, cependant comme je l'ai dit je ne fait pas du tout de VBA, j'ai lu les bases sur le site, mais tu pourrais rapidement expliqué ton code stp?

Cordialement

Salut h2so4,

Merci bien de ta réponse si rapide, cependant comme je l'ai dit je ne fais pas du tout de VBA, j'ai lu les bases sur le site, mais tu pourrais rapidement expliquer ton code stp?

Cordialement

j'ai mis des commentaires dans le code

Suis-je très con ou ne les vois-je pas?

laisse-moi le temps de les mettre.

Ok my bad, j'avais compris que tu les avais déjà mise

Je te joins un fichier parce que cela ne m'as rien fait.

J'ai déjà ajouter la dernière à laquelle je voudrais récupérer les colonnes B et C simplement à titre d'exemple

3test3.xlsx (8.17 Ko)

Bonjour,

pas de problème avec la macro proposée sur ton fichier

7lhue.xlsm (13.60 Ko)

Merci bien,

est ce qu'il y a un moyen de modifier la macro pour que je ne recopie pas l'ensemble de la ligne mais seulement 2 colonnes?

Bonjour,

voici le code adapté

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 Then
        dl = Cells(Rows.Count, 1).End(xlUp).Row
        If dl = Target.Row Then
            Set pl = Range("A1").Resize(dl - 1)
            Set re = pl.Find(Target.Value, lookat:=xlWhole)
            If Not re Is Nothing Then
                Application.EnableEvents = False
                re.Resize(, 3).Copy Target
                Application.EnableEvents = True
            End If
        End If
    End If
End Sub

Salut,

Merci bien ça fonctionne, j'aurais à nouveau une question, si je souhaite ajouter plusieurs noms d'un coup est ce possible? Au lieu de les mettre un par un il peut m'arriver de les insérer 5 à 5 voire même plus donc souhaiterais savoir!

Cordialement

Bonjour,

oui cela devrait être possible, moyennant une adaptation de la macro.

ça ferait une énorme modif?

Bonjour,

tu ferais l'ajout via un copier/coller ? à partir de quelle source ? si c'est le même tableau tu peux tout aussi bien copier les 2 colonnes qui se trouvent à coté des noms.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Then
        dl = Cells(Rows.Count, 2).End(xlUp).Row
        If dl = Target.Row Then
            Set pl = Range("B1").Resize(dl - 1)
            Set re = pl.Find(Target.Value, lookat:=xlWhole)
            If Not re Is Nothing Then
                Application.EnableEvents = False
                re.Resize(, 6).Copy Target
                Application.EnableEvents = True
            End If
        End If
    End If
End Sub

J'ai adapté ta macro à mon fichier, mais ce que je souhaite ces que lorsque je rajoute plusieurs noms en colonne B il me les cherche! Cela m'éviterait de les insérer un par un étant donné que ça monte à 40 parfois

bonjour,

regarde si ceci peut te convenir.

Private Sub Worksheet_Change(ByVal Target As Range)
    For Each cell In Target 'on prend chaque cellule qui a été modifié
        If cell.Column = 2 Then 'si en colonne 2
            Set pl = Range("B1").Resize(cell.Row - 1) 'on définit  toutes les cellules qui précèdent comme plage de recherche
            Set re = pl.Find(cell.Value, lookat:=xlWhole) 'on recherche le nom trouvé dans la cellule modifée considérée
            If Not re Is Nothing Then 'si trouvé 
                Application.EnableEvents = False
                re.Resize(, 6).Copy cell 'on copie les infos sur la ligne de la cellule modifiée considérée
                Application.EnableEvents = True
            End If
        End If
    Next
End Sub

merci, ça fonctionne bien!

Je commence à comprendre. Tu as remplacé la dernière ligne dans la colonne 2 par l'ensemble des cellules de la colonne 2

Je valide le sujet en résolu

Merci de ton aide

bonjour,

commentaires ajoutés dans le code ci-dessus

Rechercher des sujets similaires à "lire lignes dessus recopier infos"