Agir sur toute les cllules de mon classeur sous condition

Résolu
macmanan - 15 janv. 2013 à 07:49
 macmanan - 17 janv. 2013 à 06:16
Bonjour a tous.

Comment générer un code qui permet de changer la valeur de chaque cellule de mon classeur qui contient une heure, sous forme hh:mm.

c'est a dise que j'ai un classeur qui contient plusieurs feuilles, sur chaque feuille il ya des evenements sur lesquelles l'heure est noté.

j'ai un bouton sur la première feuille, sur lequel je voudrais, par clique aller ecrire sur chaque cellule qui contient la valeur "hh:mm" exemple "02:48" . la changer par "heure"

merci à l'avance pour votre aide.

25 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 janv. 2013 à 12:58
mais ya-t il vraiment un moyen de faire un seul bouton pour toutes les feuil dans la meme ligique " sur ma première feuil sommaire"

Bien évidemment ! En bouclant sur toutes les feuille du classeur (utilisation de la collection WorkSheets) et en traitant chacune d'elle dans cette boucle.
Où est donc le problème ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
'le format de cellule est à definir sur la feuille excel
'à l'aide de format, cellule, heure, 13:30

Private Sub raz()
Dim cell As Range
Dim i As Integer, J As Integer

i = ActiveWorkbook.Sheets.Count
For J = 1 To i
Worksheets(J).Activate

For Each cell In ActiveSheet.Range("a1:g7")
cell.Select
If cell.NumberFormat = "h:mm;@" Then
'on aurait pu rechercher une police différente
'toutes la feuille en Tahoma et les cellules à "reseter" en calibri
'ou une couleur

If cell.fonts = "Calibri" Then
cell.Value = "0"
End If

Next cell
Next J
End Sub



C'est dans les lignes du pneu qu'on lit l'avenir d'une bourre
3
Bonjour
Merci infiniment pour tous.
dans le fond ca marche impec.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 janv. 2013 à 08:07
Bonjour,
Sais-tu quelles sont les plages à traiter ? (colonnes entières, ou plage connue, etc ...)?
Si non : comment les détermines-tu ? sur quelle base ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour, et merci pour la réponse.

la plage en fait c'est sur toute la feuile, c'est à dire chaque feuil de mon classeur ouvert.
toute cellule sous la forme indiquée, apres clic va etre changé.

Private Sub CommandButton1_Click()
On Error Resume Next
Select Case MsgBox("Êtes-vous sûr de bien vouloir reinitialiser les heures?", vbCritical + vbOKCancel, "Avertissement")

Case vbOK

Worksheets("Feuil1").Range("C7,D7,E7,B16,C16,D16,E16").Value = "heure"
Worksheets("Feuil1").Range("C7,D7,E7,B16,C16,D16,E16").Font.ColorIndex = 2

ce code qui est utilisé se limite aux cellules indiquées, mais moi je voudrais pas specifier de cellules. je voudrais juste chercher toutes cellules avec la valeur "hh:mm"
et la changer en "heure.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 janv. 2013 à 08:29
Worksheets("Feuil1").Range("C7,D7,E7,B16,C16,D16,E16").Value = "heure" *
Worksheets("Feuil1").Range("C7,D7,E7,B16,C16,D16,E16").Font.ColorIndex = 2

ce code qui est utilisé se limite aux cellules indiquées, mais moi je voudrais pas specifier de cellules. je voudrais juste chercher toutes cellules avec la valeur "hh:mm" et la changer en "heure **.

* "heure" est une chaîne de caractères, pas une heure. Es-tu bien certain de vouloir y marquer "heure", textuellement ???.
** cela implique que les cellules concernées ont été formatées en heure.
Si tel n'est pas le cas (format texte) il te faudra les parcourir toutes et :
- chaque fois que le texte est ce qui pourrait être transposé en une heure valide (utilisation de IsDate, à voir dans ton aide VBA), ===>>
- ajouter cette cellule à une "plage" des cellules à traiter (ouvre ton aide VBA sur le mot Union pour ce qui est de la constitution et extension de cette plage)
- traiter d'un seul coup la plage ainsi déterminée.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Oui exactement, car au depart ca commence par ca.
pour chaque feuil :

If ActiveCell.Value Like "*heure*" Then
Call InscritHeure
ActiveCell.Font.ColorIndex = 1
End If

donc je ne fais que revenir a la case départ.
seulement, apres que plusieurs personne passe sur une feuil, il y a insertion de ligne, et suppression de ligne....etc.

donc a la fin, je voudrais reinitialiser les heures, c'est a dire chaque cellule de mon classeur, inscrire "heure"

merci.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 janv. 2013 à 08:39
J'ai comme l'impression que tu "tournes" là par "tremplin" peu orthodoxe ..
Voyons donc : quel est le code complet de la procédure InscritHeure ?
Mais tu n'as pas répondu à mes autres questions !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
j'ai oublié aussi de mentionner que
Inscritheure est un module dans mon classeur qui fait que apres clique sur chaque cellule qui contient "heure", l'heure actuelle s'inscrit automatiquement.

donc les cellules se trouvent sous une autre forme qui est "hh:mm:
0
Dans Module

Sub InscritHeure()
ActiveCell.Value = Now()
Selection.NumberFormat = "hh:mm"
End Sub

et sur chaque feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Value Like "*heure*" Then
Call InscritHeure
ActiveCell.Font.ColorIndex = 1
End If
End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 janv. 2013 à 10:16
C'est bien ce que j'avais deviné !
1) tu fais une boucle (sur toutes tes cellules) dont le seul but est de "marquer" tes cellules par "heure"
2) tu reviens sur ces cellules (une nouvelle boucle sur toutes tes cellules) pour y mettre Now !
Il y a sans aucun doute là un problème fondamental de conception...

Par ailleurs :
If ActiveCell.Value Like "*heure*" Then

est :
- abusif puisque tu vas chercher les cellules contenant uniquement "heure"
- risqué puisque sera transformée également une cellule qui contiendrait malencontreusement par exemple "A la bonne heure!"

Beaucoup trop de choses me paraissent ici extrêmement lourdes et gênantes.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 janv. 2013 à 10:26
Tu devrais par ailleurs travailler en équipe par manlaurent, dont la discussion qu'il a ouverte ici :

[url=http://www.vbfrance.com/forum/sujet-EXCEL-AVEC-VISUAL-STUDIO-2010_1622148.aspx?p=2]Tapez le te, sinon sur la même appli que toi, tout au mins dans une appli dont certains "aspects" sont très similaires, à la différence près que tu choisis un tremplin "heure" et lui "0".



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
J'ai fait un saut sur le site que tu m'a suggéré.
son problème a l'air plus compliqué, que pour moi.

pour les complication que tu a suggéré, je t'explique c'est une sorte de tableau déjà rempli.....par "heure", ceci pour chaque événement saisi, l'auteur clique dessus, donc l'heure apparait. c'est le but d'ailleur.

a la fin on copie le meme classeur pour le lendemain, avec une autre application toute les cellules sont vidé, mais il faut revenir aussi sur les heures.

j'ai essayé, de trouver toute cellules sous la forme "hh:mm" de mon classeur, et avec un clic remettre le mot "heure"

y a-t il un moyen please.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 janv. 2013 à 10:57
j'ai essayé, de trouver toute cellules sous la forme "hh:mm" de mon classeur

tu parles de quoi ? de "forme" ou de format ?
Si format texte et "forme" ===>> je t'ai déjà répondu : utilisation dee IsDate
Si format heure "hh:mm" ==> condition sur la propriété NumberFormat de la cellule
Maintenant : parcourir toutes les cellules (de toutes les feuilles, en plus ?) de ton classeur est forcément lourd et cette "nécessité" denoterait sans aucun doute possible un défaut majeur de conception.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Dans le fond la solution est comment formuler :

Private Sub CommandButton1_Click()
On Error Resume Next
Select Case MsgBox("Êtes-vous sûr de bien vouloir reinitialiser les heures?", vbCritical + vbOKCancel, "Avertissement")

Case vbOK

[b]' et la précisement aller chercher chaque cellules, dans chaque feuille du classeur, qui contient l'heure sous la forme "hh:mm"....exemple 02:35

' et inscrire à la place le texte "heure"/b

'********************suite de la procédure

et la tout mon problème serait résolu.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 janv. 2013 à 11:08
On a bien compris. Inutile de le répéter sans cesse !
Et je t'ai répondu ! Relis attentivement et reviens avec ton essai de boucle


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Désolé je répétait juste pour bien me faire comprendre.
maintenant je n'arrive pas a le faire pour tout le classeur comme je disais, j'ai vraiment essayé des centaines de combinaisons.

je vais essayer de trouver, sinon...

merci beaucoup pour ton aide UCFOUTU
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 janv. 2013 à 11:22
Commence par nous "montrer" ce que tu as réussi à écrire (sur les bases que je t'ai indiquées) pour les cellule d'une seule feuille.
A partir de là, le reste sera simple (un bête boucle sur toutes les feuilles) !
Tout cela est fort simple, hein ... et on veut te voir t'y mettre.
Et je maintiens ce que j'ai dit à propos de la conception et de la lourdeur, mais cet aspect restera ton affaire.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
voila mon bouton

Option Explicit

Private Sub CommandButton1_Click()
On Error Resume Next
Select Case MsgBox("Êtes-vous sûr de bien vouloir reinitialiser les heures?", vbCritical + vbOKCancel, "Avertissement")

Case vbOK

Worksheets("Feuil1").Range("C7,D7,E7,B16,C16,D16,E16").Value = "heure"
Worksheets("Feuil1").Range("C7,D7,E7,B16,C16,D16,E16").Font.ColorIndex = 2
Worksheets("Feuil2").Range("C5,D5,E5,B11,C11,D11,E11").Value = "heure"
Worksheets("Feuil2").Range("C5,D5,E5,B11,C11,D11,E11").Font.ColorIndex = 2
Worksheets("Feuil3").Range("C5,D5,E5,B11,C11,D11,E11").Value = "heure"
Worksheets("Feuil3").Range("C5,D5,E5,B11,C11,D11,E11").Font.ColorIndex = 2

CommandButton1.Visible = False

Case vbCancel
CommandButton1.Visible = False
Exit Sub

End Select
End Sub

Private Sub CommandButton2_Click()
UserForm1.Show
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo gesterreur
Application.ScreenUpdating = False
Dim valOp As String
valOp = Range("C2").Value 'Ancienne Valeur
If Target.Address = "$C$2" And Target.Value <> "" Then
If Range("A1").Value <> valOp Then
Worksheets("DATE-NOTES").CommandButton1.Visible = True
End If
End If
Application.ScreenUpdating = True
Exit Sub
gesterreur:
Application.ScreenUpdating = True
End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 janv. 2013 à 11:29
Je ne comprends plus !
Tu nous as jusqu'à présent dit que tu voulais traiter la totalité des cellules et voilà que maintenant tu n'en traites que quelques-unes bien dséfinies et sans boucle aucune !
C'est une plaisanterie ?
Alors ? T u les connais déjà, les cellules concernées ? )===>>
si oui : tout ce temps perdu ...
si non : elle vient, ta tentative de boucle ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Rejoignez-nous