IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment identifier la dernière cellule modifiée


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut Comment identifier la dernière cellule modifiée
    Bonjour,

    Je veux que lorsque je modifie une cellule de mon classeur, une macro s'exécute. Pour cela j'utilise Workbook_SheetChange. De cette manière lorsque par exemple: je clique sur une cellule, que je change son contenu et que je clique sur une autre cellule, ma macro s'exécute.

    Mais voila la macro qui s'exécute va copier puis coller cette cellule dans la même case d'un autre fichier. Il faut donc que mon code est un moyen d'identifier la cellule qui vient d'être modifiée.

    Si vous avez une suggestion, je suis tout ouïe.

    Merci.

    Thomas

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Target
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Merci mercatog.

    Mais voila j'ai encore des problèmes.

    Situation:

    Je veux que quand je sélectionne(simple clique) ou que je "pénétre"(double clique et apparition du curseur) une cellule, une macro s'effectue, ça s'est ok avec Workbook_SheetSelectionChange. Mais à la fin de ces macros une autre cellule est sélectionnée ou pénétrée (toujours H9 ). Or je veux que la case sélectionnée ou "pénétrée" initialement soit finalement sélectionnée ou "pénétrée" à la suite de ma macro. Donc j'ai placé deux variables avant ma macro pour pouvoir "enregistrer" la ligne et la colonne de la case sélectionner ou "pénétrer" (grâce à Target) et pouvoir dire à la fin de ma macro de sélectionner ou pénétrer la case initiale et non plus H9. Forcément à ce moment là je créer une boucle infinie .

    Questions:

    1: Es que ma stratégie pour contrer la sélection automatique de H9 est la bonne? Si non, que faire?

    Si mon idée est la seule possibilité de contrer la sélection automatique de H9:
    2: Comment éviter cette boucle infinie?
    3: Comment écrire littéralement et VBAment: "pénétrer" dans une cellule? (littéralement et VBAment)
    4: Comment dire: Si la case a était sélectionnée initialement: sélectionne là. Et si elle a était "pénétrer" initialement: "pénétre" là.

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    1- non
    2-Application.EnableEvents = Falseµ
    3-range("A1")="pénétrer" ??? <-- Pas compris ta question

  5. #5
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut
    Bonjour et merci EngueEngue,

    1- non
    Que faire dans ce cas?

    Merci pour:
    2-Application.EnableEvents = Falseµ
    3-range("A1")="pénétrer" ??? <-- Pas compris ta question
    J'ai modifié mon message et mon "pénétrer" est définit à la première ligne de "Situation".

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    1- Utiliser 2-
    3- toujours pas compris
    4- Tu ne peux pas lancer une macro tant qu'une cellule est pénétrée.. Du coup je ne pense pas que tu puisses savoir si une cellule est pénétrée..

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    En plus si tu montres ton code, tu pourra travailler sans les Select qui sélectionnent d'autres cellules.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  8. #8
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut
    Re,

    Merci EngueEngue. Tout fonctionne parfaitement mais je ne comprend pas comment .

    Voici le code simplifier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Application.EnableEvents = False
    x = Target.Row
    y = Target.Column
    'Ma macro qui perd la cellule initialement sélectionnée à la faveur d'une mystérieuse cellule H9
    Cells(x, y).Select
    Application.EnableEvents = True
    End Sub
    Questions:

    1 (reprend les questions 3 et 4 initiales): Comment le Cells(x, y).Select arrive à savoir si j'ai simple ou double cliquer sur ma case initialement pour la mettre dans le même état (curseur ou pas à l'intérieur) que si aucune macro se produisait.

    2 (reprend les questions 1 et 2 initiales): La stratégie dont je parle dans ma question 1 initiale correspond à l'utilisation des lignes en gras dans le code ci-dessus. Pourquoi EngueEngue, vous me dites d'utiliser Application.EnableEvents = False au lieu de ces lignes?

    3: Pourquoi cette cellule H9 se sélectionne?

  9. #9
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    1 si le curseur est à l'intérieur, la macro ne s'execute pas, si oui, alors il la selectionne du coup tu n'y vois que du vent.

    Pour tes autres questions... pas d'autres lignes donc je ne vois pas

  10. #10
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut
    Re,

    Merci à vous.

    Voici ma procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
     
    Application.DisplayAlerts = False
    Application.EnableEvents = False
     
        Const FileSource As String = "Sport"
     
        Dim WkbSrce As Workbook
        Dim FoldersSource As Variant
        Dim SubFolder As String
        Dim i As Integer
     
    x = Target.Row
    y = Target.Column
     
            SubFolder = ThisWorkbook.ActiveSheet.Name
     
            If SubFolder Like "STR####" Then
        FoldersSource = Array("C:\Users\105063782\Desktop\Réseau test\TDSK\TV\", "C:\Users\105063782\Desktop\Réseau test\TDSA\TV\")
    ElseIf SubFolder Like "SCR####" Then
        FoldersSource = Array("C:\Users\105063782\Desktop\Réseau test\TDSK\CC\", "C:\Users\105063782\Desktop\Réseau test\TDSA\CC\")
    Else
        Exit Sub
    End If
     
        For i = 0 To UBound(FoldersSource)
        If Importer(FoldersSource(i), SubFolder, FileSource & ".xlsx") Then
            Exit For 'fichier trouvé
        End If
    Next i
     
    Cells(x, y).Select
     
    Application.EnableEvents = True
    Application.DisplayAlerts = True
    End Sub
    Voici la fonction "Importer" appelée par la procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Function Importer(ByVal Dossier As String, ByVal SousDossier As String, ByVal Fichier As String) As Boolean
     
    Dim FichTrouve As String, SubFolder As String
    Dim WkbSrce As Workbook
     
    Application.ScreenUpdating = False
     
    SubFolder = FindSubFolder(Dossier, SousDossier) 'Appelle la fonction FindSubFolder
     
    If SubFolder <> "" Then
        FichTrouve = Dir(SubFolder & "\" & Fichier)
     
        If FichTrouve <> "" Then
            Importer = True
            Do While FichTrouve <> ""
                Set WkbSrce = Application.Workbooks.Open(SubFolder & "\" & Fichier)
                WkbSrce.Worksheets(1).Copy After:=ThisWorkbook.Worksheets(SousDossier)
     
                Application.DisplayAlerts = False
                ThisWorkbook.Worksheets(SousDossier).Delete
                Application.DisplayAlerts = True
     
                ThisWorkbook.Worksheets("Affaire").Name = SousDossier
     
                Application.ScreenUpdating = True
     
                WkbSrce.Close False
                Set WkbSrce = Nothing
                FichTrouve = Dir()
     
            Loop
        End If
    End If
     
    End Function
    Et voici la fonction "FindSubFolder" appelée par la fonction "Importer":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Function FindSubFolder(ByVal Folder As String, Numéro_affaire As String) As String 'Cherche le sous répertoire
     
    Dim Tmp As String
     
    ChDrive "C:\"
    ChDir Folder
    Tmp = Dir("*" & Numéro_affaire & "*", vbDirectory)
    If Tmp <> "" Then FindSubFolder = Folder & Tmp
     
    End Function
    Cela fonctionne parfaitement.

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Difficile de travailler et de penser ainsi. directement dans le mur c'est sûr!
    A chaque sélection d'une cellule, tu remplace la feuille par une autre feuille venant d'un classeur qui est trouvé et ouvert par le code.

    Dans ce cas, la cellule active de la feuille qui a été importée est affichée et pour moi c'est H9 quelque soit la cellule initialement sélectionnée.

    Maintenant, voyant le code, j'espère trouver une réponse à ce que tu souhaite réellement faire par cette gymnastique loin d'être optimale.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  12. #12
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut
    Merci beaucoup.

    Ce que je veux au final c'est que ce classeur appartienne à plusieurs personnes et qu'il mette à jour le classeur recherché sans supprimer des infos mise à jour par d'autres utilisateurs au même moment.
    Donc je vais maj la feuille à chaque fois que l'utilisateur clique sur une case pour qu'il voit si d'autres ont déja maj.
    Et je compte créer un code pour que la mise à jour de ce fichier mette à jour le fichier recherché cellule par cellule, cela si personne n'a modifié cette cellule entre temps, sinon demander à l'utilisateur: voulez-vous modifier, compléter ou annuler la modification de cette cellule.

  13. #13
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    C'est autre chose ça. Peut être il faudra changer de fusil d'épaule
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  14. #14
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut
    A oui?

    Ben moi je pensais:

    Clique sur une case -> MAJ du doc contenant la macro pour voir si case déja modifiée
    Modif de la case -> MAJ du doc ne contenant pas la macro SI case vide, sinon message: la case contient déja ...

    Je ne vois pas quoi faire d'autre.

  15. #15
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Pourquoi tester deux fois ? la première est très utile ?

  16. #16
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut
    Re EngueEngue,

    C'est une bonne remarque qui m'a fait réfléchir mais oui je pense qu'elle est utile car sinon le classeur perso de chaque utilisateur ne sera pas mis à jour de la journée. Et pas du tout s'ils n'éteignent pas leur ordi le soir. Mais c'est vrai que je pourrais faire autre chose de plus intelligent: mettre à jour la feuille quand on la sélectionne parmi tant d'autres. Savez-vous comment lancer une macro au moment de la sélection d'une feuille?

  17. #17
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbook_SheetActivate(ByVal Sh As Object)

  18. #18
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Donc à présent ce que je cherche à faire c'est qu'à chaque modification d'une cellule dans le classeur contenant les codes, lancer une procédure qui va mettre à jour cette modification dans un autre classeur.
    Je me concentre donc pour l'instant sur la recherche d'une façon de lancer un code (copier-coller de la cellule venant d'être modifiée dans la même cellule de la première feuille du deuxième classeur) à chaque modification de cellule. Je connais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    mais le problème premier avec ce code est que si on ne double clique pas sur la cellule pour la modifier (ex: simple clique et changement de la couleur de fond de la cellule) alors le code ne se lance pas. Le problème secondaire est que si on double clique sur la cellule mais que l'on ne modifie pas la case, le code se lance.

    J'aimerais savoir vers quelle style de solutions vous vous dirigeriez à ma place. (L'arrêt pur et simple des tentatives de programmation de quoi que ce soit n'est pas une réponse acceptée, comprise certes, mais décliner )

    Merci.

    Thomas

  19. #19
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

  20. #20
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Merci EngueEngue, mais si j'ai bien compris l'évènement Workbook_SheetCalculate il ne me servira pas puisque je n'aurais pas de cellule dont la valeur sera le résultat d'un calcul (seulement des modifications manuelles, cellule par cellule). Mais je prend note, cela me servira certainement pour d'autres projets.

    Je m'aperçois que vous m'avez déja répondu au sujet du titre de cette discussion. Je pense donc qu'il est mieux de continuer à vous interrogé dans une autre discussion.

    Merci à tous et à très bientôt.

    Thomas

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/11/2010, 17h39
  2. [XL-2003] Comment savoir si une cellule a été modifiée
    Par Line dans le forum Excel
    Réponses: 4
    Dernier message: 08/08/2009, 19h49
  3. Réponses: 1
    Dernier message: 26/05/2007, 15h20
  4. [VBA-E] Repérer la dernière cellule modifiée
    Par aokiseiichiro dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/05/2006, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo