Besoin d'un Génie sur Excel :-)

D

dexter59

Guest
Bonjour,

Dans mon fichier j'ai des jours et des heures. Je pense que c'est impossible de créer une règle pour que cela se fasse tout seul mais bon on sait jamais.

Ce qu'il faudrait :

Il y a par exemple :

Lundi 21:00
Lundi 21:00
Lundi 21:00
Mardi 25:00
Mardi 25:00
Etc... même principe quelque soit le jour et l'heure

Il faudrait que quand il y a ce cas de figure et quelque soit le jour que Excel fasse cela automatiquement

Lundi 21:00
Lundi 21:01
Lundi 21:02
Mardi 25:00
Mardi 25:01

C'est impossible d'automatiser cela non ?

Merci d'avance
 

Pièces jointes

  • Classeur1.xls
    18.5 KB · Affichages: 85
  • Classeur1.xls
    18.5 KB · Affichages: 88
  • Classeur1.xls
    18.5 KB · Affichages: 86

Tibo

XLDnaute Barbatruc
Re : Besoin d'un Génie sur Excel :)

Bonsoir,

Pas vraiment de génie ici, plutôt des bénévoles ...

Sinon, avec le peu d'explications que tu donnes, un essai avec en colonne C (sans trop de conviction) :

en C1 :

Code:
=B1

en C2 :

Code:
=SI(ET(A2=A1;B2=B1);C1+1/24/60;B2)

à recopier vers le bas

cellules au format hh:mm

@+
 
D

dexter59

Guest
Re : Besoin d'un Génie sur Excel :)

Merci de ton aide :- ) Au fait l'objectif est de ne pas avoir à recréer de colonne. Il faudrait que tout se fasse automatiquement dans la colonne d'origine donc la B. C'est possible avec une mise en forme conditionnelle ou autre chose ?

Merci d'avance;)
 

Tibo

XLDnaute Barbatruc
Re : Besoin d'un Génie sur Excel :)

re,

Une mise en forme conditionnelle ne fait qu'agir sur le format, pas sur le contenu.

Sinon, je ne vois qu'une macro (qui devrait faire à peu près ce que la formule que j'ai proposé fait). Mais question macro, je laisse la main.

@+
 

ROGER2327

XLDnaute Barbatruc
Re : Besoin d'un Génie sur Excel :)

Bonjour à tous
Une procédure évènementielle à placer dans le module de la feuil Feuil1 :
Code:
[COLOR="DarkSlateGray"][B]Private Sub Worksheet_Change(ByVal Target As Range)
Dim i&, j&, n&, tmp$, oPlg
   Set oPlg = [A1].Resize(Cells(Rows.Count, 1).End(xlUp).Row, 2)
   If Not oPlg Is Nothing Then
      If Not Intersect(Target, oPlg) Is Nothing Then
         For i = 2 To oPlg.Rows.Count
            n = 0
            tmp = oPlg.Cells(i, 1) & "#" & oPlg.Cells(i, 2)
            For j = 1 To i - 1
               If tmp = oPlg.Cells(j, 1) & "#" & oPlg.Cells(j, 2) Then n = n + 1
            Next
            If n Then Application.EnableEvents = False: oPlg.Cells(i, 2) = oPlg.Cells(i, 2) + n / 1440: Application.EnableEvents = True
         Next
      End If
   End If
End Sub[/B][/COLOR]
Le travail se fera au fur et à mesure de la saisie des données.​
ROGER2327
#3973


Samedi 14 Tatane 137 (Sainte Anne, Pèlerine, énergumène, SQ)
9 Thermidor An CCXVIII
2010-W30-2T01:25:30Z
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Besoin d'un Génie sur Excel :)

Bonjour dexter59, Tibo, Roger,

Cette macro fait exactement ce que Tibo a proposé :

Code:
Sub Incremente()
Dim plage As Range
Application.ScreenUpdating = False
Columns("C").Insert 'insertion d'une colonne auxiliaire
Set plage = Range("C2:C" & [B65536].End(xlUp).Row)
plage.FormulaR1C1 = "=IF(AND(RC1=R[-1]C1,RC2=R[-1]C2),R[-1]C+1/24/60,RC2)"
[C1] = [B1]
plage.Offset(, -1) = plage.Value 'copie les valeurs
Columns("C").Delete 'suppression de la colonne auxiliaire
End Sub

A+
 

Pièces jointes

  • Classeur(1).xls
    42.5 KB · Affichages: 82
  • Classeur(1).xls
    42.5 KB · Affichages: 91
  • Classeur(1).xls
    42.5 KB · Affichages: 97

job75

XLDnaute Barbatruc
Re : Besoin d'un Génie sur Excel :)

Bonjour le fil, le forum,

Je repasse par là avec une petite amélioration : un 2ème clic sur le bouton remet à zéro les minutes.

Code:
Sub Incremente_RAZ()
Dim plage As Range, ref As Range
Application.ScreenUpdating = False
Columns("C").Insert 'insertion d'une colonne auxiliaire
[C1] = [B1]
Set plage = Range("B2", [B65536].End(xlUp))
Set ref = plage.Find("*:01*", LookIn:=xlFormulas)
plage.Offset(, 1).FormulaR1C1 = IIf(ref Is Nothing, _
  "=IF(AND(RC1=R[-1]C1,RC2=R[-1]C2),R[-1]C+1/1440,RC2)", "=INT(24*RC2)/24")
plage = plage.Offset(, 1).Value 'copie les valeurs
Columns("C").Delete 'suppression de la colonne auxiliaire
End Sub

Edit : "=INT(24*RC2)/24" mieux que "=RC2-MINUTE(RC2)/1440"

A+
 

Pièces jointes

  • Classeur(2).xls
    44.5 KB · Affichages: 73
  • Classeur(2).xls
    44.5 KB · Affichages: 72
  • Classeur(2).xls
    44.5 KB · Affichages: 72
Dernière édition:

Bourbon

XLDnaute Nouveau
Re : Besoin d'un Génie sur Excel :)

Bonjour,

Dans mon fichier j'ai actuellement cela en colonne F :

Lundi 21:00
Lundi 21:00
Lundi 21:00
Mardi 22:00
Mardi 22:00
Etc... même principe quelque soit le jour et l'heure

Il faudrait que quand il y a ce cas de figure et quelque soit le jour que Excel fasse cela automatiquement :

Lundi 21:00
Lundi 21:01
Lundi 21:02
Mardi 22:00
Mardi 22:01

En effet il me faudrait une Macro pour que si jamais il y a des doublons au niveau de l'heure qu'une minute soit ajouté à chaque fois.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Besoin d'un Génie sur Excel :)

Bonjour Bourbon, bienvenue sur WLD,

J'ai modifié la macro pour que votre colonne F remplace la colonne B :

Code:
Sub Incremente_RAZ()
Dim plage As Range, ref As Range
Application.ScreenUpdating = False
Columns("G").Insert 'insertion d'une colonne auxiliaire
[G1] = [F1]
Set plage = Range("F2", [F65536].End(xlUp))
Set ref = plage.Find("*:01*", LookIn:=xlFormulas)
plage.Offset(, 1).FormulaR1C1 = IIf(ref Is Nothing, _
  "=IF(AND(RC1=R[-1]C1,RC6=R[-1]C6),R[-1]C+1/1440,RC6)", "=INT(24*RC6)/24")
plage = plage.Offset(, 1).Value 'copie les valeurs
Columns("G").Delete 'suppression de la colonne auxiliaire
End Sub

Mais ATTENTION, dans le fichier du post #9, il y avait la colonne B (n°2) pour les heures mais aussi la colonne A (n°1) pour les jours.

Alors comprenez bien que sur cette partie du code :

Code:
plage.Offset(, 1).FormulaR1C1 = IIf(ref Is Nothing, _
  "=IF(AND(R[COLOR="Red"]C1[/COLOR]=R[-1][COLOR="red"]C1[/COLOR],RC6=R[-1]C6),R[-1]C+1/1440,RC6)", "=INT(24*RC6)/24")

j'ai remplacé C2 (colonne B) par C6 (colonne F), mais je n'ai pas modifié C1 (colonne A) car je ne sais pas dans quelle colonne vous avez mis les jours...

Donc à vous de modifier, si nécessaire, les C1 en rouge, en fonction de votre colonne des jours.

A+
 

job75

XLDnaute Barbatruc
Re : Besoin d'un Génie sur Excel :)

Re Bourbon,

La solution est dans mon post #11 précédent.

Mais vous pendant que je rédigeais, vous avez effacé votre question :eek:

Une erreur évidemment, excusable quand on est nouveau.

Mais soyez gentil, remodifiez maintenant votre post #10 en remettant la question de la colonne F.

Sinon nos amis XLDnautes ne comprendront pas.

A+
 

Bourbon

XLDnaute Nouveau
Re : Besoin d'un Génie sur Excel :)

Merci beaucoup pour votre réponse détaillée et désolé d'avoir édité le message. Cependant cela ne fonctionne pas ou c'est moi qui me suis planté. Afin de m'aider au maximum, j'ai mis le fichier final dont j'ai besoin en pièce jointe avec les bonnes colonnes. Pouvez vous me communiquer le code entier de la Macro pour que je n'ai plus qu'à le saisir svp. Mon fichier est en pièce jointe.

Merci beaucoup pour votre Aide.
 

Pièces jointes

  • Mémoire ESC Option Statistique.xls
    27 KB · Affichages: 61
  • Mémoire ESC Option Statistique.xls
    27 KB · Affichages: 62
  • Mémoire ESC Option Statistique.xls
    27 KB · Affichages: 63

job75

XLDnaute Barbatruc
Re : Besoin d'un Génie sur Excel :)

Re,

Pour que la macro donne de bons résultats, il faut que pour une même date les heures se suivent chronologiquement.

Ce n'est pas toujours le cas de votre fichier.

Vous devez donc faire un tri du tableau :

- sélectionner la plage C18:F89

- menu Données-Trier => Trier par : colonne D ; Puis par : colonne F

Voici la macro, tout ce qui a été adapté est en rouge :

Code:
Sub Incremente_RAZ()
Dim plage As Range, ref As Range
Application.ScreenUpdating = False
Columns("[COLOR="Red"]G[/COLOR]").Insert 'insertion d'une colonne auxiliaire
[[COLOR="red"]G18[/COLOR]] = [[COLOR="red"]F18[/COLOR]]
Set plage = Range("[COLOR="red"]F19[/COLOR]", [[COLOR="Red"]F[/COLOR]65536].End(xlUp))
Set ref = plage.Find("*:01*", LookIn:=xlFormulas)
plage.Offset(, 1).FormulaR1C1 = IIf(ref Is Nothing, _
  "=IF(AND(RC[COLOR="red"]4[/COLOR]=R[-1]C[COLOR="red"]4[/COLOR],RC[COLOR="red"]6[/COLOR]=R[-1]C[COLOR="red"]6[/COLOR]),R[-1]C+1/1440,RC[COLOR="red"]6[/COLOR])", "=INT(24*RC[COLOR="red"]6[/COLOR])/24")
plage = plage.Offset(, 1).Value 'copie les valeurs
Columns("[COLOR="red"]G[/COLOR]").Delete 'suppression de la colonne auxiliaire
End Sub

Edit : dans le problème d'origine, il s'agissait d'incrémenter des heures.

Or dans votre fichier il y a des heures avec des minutes.

Ce n'est pas grave, la macro incrémente, mais si on relance la macro, toutes les minutes sont effacées...

A+
 
Dernière édition:

Bourbon

XLDnaute Nouveau
Re : Besoin d'un Génie sur Excel :)

Bonjour,

Merci pour votre réponse à mon problème mais au fait ce n'est pas réellement cela dont j'ai besoin. J'ai besoin d'une Macro qui ajoute une minute à chaque fois si il y a des heures en doublon pour le même jour mais sans ajouter de colonne supplémentaire ou quoi que ce soit. Il faut donc que cela se fasse automatiquement pour la colonne F svp.

En bricolant j'ai réussi à faire ca mais pouvez vous m'aider à la finir svp il me manque deux choses qui fonctionnent pas :

- Que ma macro s'applique à l'infini pour toute la colonne F et

- Que si jamais j'ai 23:00 le mercredi et 23:00 le jeudi (donc pas le même jour) que cela n'ajoute pas 1 minute.

Sub HeureX()
Dim Lg%, i%, J%, x As Date
Lg = Range("f65536").End(xlUp).Row
x = Format(1 / 24 / 60, "hh:mm:ss")
For i = 19 To Lg
If Cells(i, "f") = Cells(i - 1, "f") Then
J = i
Do While Cells(J, "f") = Cells(i - 1, "f")
Cells(J, "f") = Cells(J - 1, "f") + x
J = J + 1
Loop
End If
Next i
End Sub


Merci d'avance
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 609
Messages
2 090 201
Membres
104 451
dernier inscrit
scp9990