Macro événementiel cellule copier

Fermé
kaderladou973 Messages postés 3 Date d'inscription mardi 17 octobre 2017 Statut Membre Dernière intervention 18 octobre 2017 - 17 oct. 2017 à 15:58
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 - 18 oct. 2017 à 15:19
Bonjour

Je me permet de vous posez une question pour laquelle je ne trouve pas de solution.

J'ai un classeur Excel qui contient deux feuille.
Sur la première il y a des info qui sont collecter en temps réel
Sur la deuxième je fais un copié coller d'une cellule de la première feuille qui se met a jour automatiquement

En parallèle j'ai créer un macro événementiel sur la deuxième feuille pour que a chaque modification de la cellule celle ci enregistre une valeur en dessous

Le problème est que si j'inscrit dans la 2 feuille des donnés manuellement ça marche, mais si je met la formule pour qu'il prend la cellule de la première feuille ça ne marche pas

Pouvez vous m'aidez, je vous donne mon code

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
t = Range("a1").Value
If Range("a2").Value = "" Then
Range("a2").Value = t
Else
Range("a" & Range("a1").End(xlDown).Row + 1).Value = t
End If
End If
End Sub


Merci
A voir également:

4 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
18 oct. 2017 à 03:17
Bonjour
La macro évènementielle doit être sur la première feuille et agir sur la deuxième. De ce fait la formule dans la feuille 2 devient inutile.
Copiez le code ci-dessous dans le module de la feuille 1. (Remplacez "feuil2" par le nom alloué à votre feuille 2)
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
        t = Range("a1").Value
        If Sheets("feuil2").Range("a2").Value = "" Then
            Sheets("feuil2").Range("a2").Value = t
        Else
            Sheets("feuil2").Range("a" & Sheets("feuil2").Range("a1").End(xlDown).Row + 1).Value = t
        End If
    End If
End Sub

Cdlt
1
kaderladou973 Messages postés 3 Date d'inscription mardi 17 octobre 2017 Statut Membre Dernière intervention 18 octobre 2017
18 oct. 2017 à 07:20
Bonjour

Merci pour votre réponse
J'ai réussi à copier le code et ça marche
mais maintenant il y a un autre problème.
Sur la feuille 1 il y a des données qui sont récolté d'une page web par Excel et mis a jour tous les minutes.
donc si j'écrit les données "a la main" ça marche mais si ç'est Excel qui met à jour les données ça ne marche pas
Pouvez vous m'aidez pour que les données mis a jour par Excel soit bien pris en compte

Merci
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
18 oct. 2017 à 14:24
Bonjour
"Sur la feuille 1 il y a des données qui sont récolté d'une page web par Excel et mis a jour tous les minutes."
Si les données sont récupérées par Excel, c'est qu'il y a déjà une procédure chargée de faire ce travail, il suffit donc, à chaque importation des données de la page Web vers le fichier excel, d'appeler la macro de recopie des données de la feuille 1 vers la feuille 2 lors. La macro de recopie doit être dans un module classique et non dans le module de la feuille 1.
Cdlt
0
kaderladou973 Messages postés 3 Date d'inscription mardi 17 octobre 2017 Statut Membre Dernière intervention 18 octobre 2017
18 oct. 2017 à 14:53
Merci pour votre réponse

Comment mettre la macro dans un module classique s'il vous plait, je suis novice dans le vba

Merci
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
18 oct. 2017 à 15:19
Dans la fenêtre VBA, sélectionnez "Insertion" et choisir "Module" et copiez le code ci-dessous.
Sub RecupValeur()
    t = Sheets("Feuil1").Range("a1").Value
    If Sheets("feuil2").Range("a2").Value = "" Then
        Sheets("feuil2").Range("a2").Value = t
    Else
        Sheets("feuil2").Range("a" & Sheets("feuil2").Range("a100000").End(xlUp).Row + 1).Value = t
    End If
End Sub

Dans votre programme d'importation des données, avant "End Sub", insérer une ligne et coller le nom de la procédure RecupValeur
Cdlt
0