code pour sélectionner zone + recopier date en dur

Olivier_HTP

XLDnaute Occasionnel
Bonjour cher Forum,

J'ai une colonne (B) de ma BD qui contient des noms, et une colonne (S) qui contient la formule : =SI(Bxxx<>'';MAINTENANT();'')
afin d'afficher l'heure de saisie de la ligne correspondante.

Afin d'éviter que les cellules de la colonne S soient remises à l'heure, je cherche une macro qui sélectionne les cellules de la colonne S qui affichent l'heure (donc jusqu'à la dernière ligne contenant un nom dans la colonne B), puis qui fasse un copier/collage spécial valeur + format sur la zone sélectionnée de la colonne S. Comme ça les heures de saisie resteront figées.

Pour l'instant j'ai une macro qui fait ça ligne par ligne, mais ça prend beaucoup trop de temps car mon tableau a plusieurs milliers de lignes.
C'est pourquoi je cherche plutôt à séléectionner la zone concernée en entier et à faire ce copier/coller spécial en une fois.

J'espère (sans en être certain) avoir été assez explicite.

Merci d'avance de votre aide.

Bonne journée,

Olivier_HTP
 

Abel

XLDnaute Accro
Bonjour Olivier_HTP,

Si c'est juste pour une mise à jour, on va faire un truc simple.

Dans VBE, entre le code suivant dans la feuille correspondante au tableau.

sub EnDur()
for each c in selection
c.value=c.value
next
end sub

Sélectionne la zone où tu veux tansformer les dates et lance la macro.

Toutes les valeurs issues de formules seront transformée en valeurs.

Pour l'avenir, tu souhaites peut être que ces dates s'inscrivent directement en dur ?
Si oui dis nous le et on fera une petite évennementielle.

A+

Abel.
 

Abel

XLDnaute Accro
Re,

Ca pourrait donner un truc comme ça :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cible As Range
Set Cible = Intersect(Target, Range('a1:a' & Range('a65536').End(xlUp).Row))
If Not Cible Is Nothing And Target = 'Boudu' Then Range('s' & Target.Row) = Date
End Sub

En admettant que la plage à tester soit la colonne A et en adaptant la condition, bien sûr.


En espérant que cela te dépanne.

Abel.
 

Olivier_HTP

XLDnaute Occasionnel
Bonjour Abel, le Forum,

merci de ton aide.

Quand j'utilise ta première méthode, j'ai un problème avec la sélection, à savoir que TOUTES les cellules de la colonne S sont mises en dur. Conséquence la formule de mise à l'heure de la colonne S est effacée dans les lignes qui n'ont pas encore fait l'objet d'une saisie.

Pour la sélection j'utilise :
Range('S12').Select
Range(ActiveCell,ActiveCell.End(xlDown)).Select

Mais je pense que les cellules de la colonne S qui n'affichent rien mais ont la formule ne sont pas condidérées comme vides.

Qu'en penses tu ?

Merci d'avance et à plus tard,

Olivier_HTP
 

Abel

XLDnaute Accro
Re,

La première macro (EnDur) n'agit que sur la sélection.

Si tu sélectionnes la colonne, effectivement, toute les cellules, de la colonne sélectionnée, où il y a quelque chose seront concernées. Même les formules sans valeur.
Il faut réduire la sélection.
Si tu fais une sélection avec End(xlUp) ou End(xlDown), le résultat sera le même. Je viens de tester.

Sinon, la deuxième macro permet d'inscrire directement 'en dur' la date du jour en 'Sx' en fonction de la saisie réalisée en 'Ax' (dans mon exemple). Donc, même s'il n'y a pas de formule en 'Sx', cela doit fonctionner. Il faut juste adapter la condition dans la macro.

Abel.
 

Olivier_HTP

XLDnaute Occasionnel
Re Abel,

Merci pour tes précisions. Entre temps j'ai trouvé un autre moyen qui consiste à créer une fonction VBA personnelle qui renvoie la date en dur.

Cette nouvelle fonction s'appelle 'VBMAINTENANT' et je l'ai mise dans les cellules de la colonne date (S) :

=SI(Bxx<>'';vbmaintenant();'')

Comme ça, j'ai automatiquement la date en dur.

En tout cas, merci de ton aide précieuse, et bonne fin de journée.

Olivier_HTP
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 145
Membres
103 130
dernier inscrit
FRCRUNGR