Target.Cells.Count / Cellule par cellule

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
 

Robert

XLDnaute Barbatruc
Repose en paix
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
 

Dranreb

XLDnaute Barbatruc
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.
 

Robert

XLDnaute Barbatruc
Repose en paix
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
 

Olic78124

XLDnaute Nouveau
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.
 

Olic78124

XLDnaute Nouveau
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) ?
 

Dranreb

XLDnaute Barbatruc
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:

Discussions similaires

Réponses
7
Affichages
292

Statistiques des forums

Discussions
311 721
Messages
2 081 927
Membres
101 842
dernier inscrit
seb0390