Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Target.Cells.Count / Cellule par cellule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Olic78124

XLDnaute Nouveau
Bonjour à toutes et à tous,

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim iTabModif As Integer, i as Integer

    Modifications = True
    ' Modification 201911115  - Mise en place d'un fichier LOG pour les modifications dans l'onglet CR
    NomFichier = Format(Date, "yyyymmdd") & " - " & Format(Time, "hhmm")
    MonDossier = "C:\User\" & Right(Application.UserName, 7) & "\Fichiers CdC\"
    ' Création du dossier pour accueillir les fichiers de suivi/log
    If Len(Dir(MonDossier, vbDirectory)) = 0 Then
        MkDir (MonDossier)
    End If
    Open MonDossier & "Modifications-CR.txt" For Append As #1 ' Ouverture du fichier LOG

    If Target.Cells.Count > 1 Then
        For i = 1 To Target.Cells.Count
        ' En admettant que je modifie 5 cellules d'un coup entre $H$5:$H$9 en supprimant le contenu
        ' Mettre la valeur de chaque cellule modifiée dans un tableau
        ' mais je n'arrive pas à récupérer la valeur de chaque cellule :-(
        Next i
    End If

End Sub

Je me tire les cheveux depuis hier avec ce test.

Voir dans le bout de code ci-dessus, tout est expliqué.

D'avance merci et bonne journée.
Olivier
 
Bonjour Olic, bonjour le forum,

peut-être comme ça :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim iTabModif As Integer, i As Integer
Dim Modifications As Boolean
Dim NomFichier As String
Dim MonDossier As String
Dim TCM() As Variant '(Tableau des Cellules Modifiées)

Modifications = True
' Modification 201911115  - Mise en place d'un fichier LOG pour les modifications dans l'onglet CR
NomFichier = Format(Date, "yyyymmdd") & " - " & Format(Time, "hhmm")
MonDossier = "C:\User\" & Right(Application.UserName, 7) & "\Fichiers CdC\"
' Création du dossier pour accueillir les fichiers de suivi/log
If Len(Dir(MonDossier, vbDirectory)) = 0 Then
    MkDir (MonDossier)
End If
Open MonDossier & "Modifications-CR.txt" For Append As #1 ' Ouverture du fichier LOG
If Target.Cells.Count > 0 Then
    ReDim TCM(1 To Target.Cells.Count)
    For i = 1 To Target.Cells.Count
        TCM(i) = Target(1).Value
    Next i
End If
End Sub
 
Bonjour.
Vous dites "en supprimant le contenu", alors c'est vide ?
Je suppose que vous parlez du contenu avant suppression, mais dans ce cas une Sub Worksheet_Change c'est un peu tard pour le faire, non ?
C'est dans une Worksheet_SelectionChange qu'il aurait fallu noter préalablement les valeurs dans un tableau.
 
Bonjour le fil, bonjour le forum,

Oui, Bernard a raison !... Je te propose alors :
• dans un module standard (Module 1 par exemple), la ligne :

VB:
Public TCM() As Variant
• dans l'événement Selection_Change de l'onglet approprié :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim I As Integer

If Target.Cells.Count > 1 Then 'ou >= 1 je ne sais pas...
    ReDim TCM(1 To Target.Cells.Count)
    For I = 1 To Target.Cells.Count
        TCM(I) = Target(I).Value
    Next I
End If
End Sub
 
Merci pour ces réponses rapides.

Vous dites "en supprimant le contenu", alors c'est vide ?

LoL... je me suis fait la réflexion en écrivant le commentaire... je ne pensais pas que la remarque viendrait aussi vite !
En fait l'onglet CR est une concaténation de plusieurs autres onglets "Projet" et des mises à jour/modifications peuvent être faites dans CR et dans ces onglets "Projet". Le but de ma demande est de stocker les modifications faites dans CR pour le reporter dans les "Projet" respectifs en quittant CR, lors d'un Ctr+ X / Ctrl+V de plusieurs cellule par exemple.

Pour ce qui est des solutions, je n'avais même pas pensé à ce Target(I).Value. Je vais voir ce que ça donne dans mon code et je reviens vous dire quoi.
 
La classe, c'est bon ça fonctionne !

Pendant que j'y suis, le tableau où je stocke les modifications est à 2 dimensions : Dim TCM(10 ,4) as String
En admettant que les 5 premières lignes sont renseignées, comment savoir combien de lignes sont occupées (un peu à la manière d'un Range("A" & Rows.Count).End(xlUp).Select dans une feuille Excel) ?
 
Vous semblez avoir eu compris la chose correctement. C'est le fait qu'il soit dynamique, c'est à dire sans dimension précisée entre les parenthèses dans sa déclaration, qui lui confère un nombre total de lignes tout à fait variable.
Certains ne mettent même pas les parenthèses, mais dans ce cas ça ne déclare pas un tableau mais un Variant, qui peut certes aussi contenir un tableau, mais la variable en elle même n'en est pas un.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
226
Réponses
4
Affichages
399
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
801
Réponses
4
Affichages
573
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…