OVH Cloud OVH Cloud

Fonction IF / SI

6 réponses
Avatar
RT
Bonjour

Je commence à utiliser les macro VBA de plus en plus
Le gros problème est que cela devient vite une drogue et que l'on en veux de
plus en plus

Je me suis payé une bible VBA et j'étudie les week-end
Mais aujourd'hui y a un truc que je voudrais au moins mettre en route
rapidement

Sur une feuille j'introduis les heures de début (colonne A) et de fin
(colonne C) grace à des boutons/macro et en fin (colonne D) j'ai le temps
passé

Dans la colonne B j'incris le nom du projet

Ce que je voudrais faire c'est une macro(accroché à un bouton) qui:
Verifie le nom du projet en B sur toutes les lignes non marqué en
colonne E
Récupère le temps en D sur la même ligne
Ajoute ce temps dans le première cellule vide d'une colonne d'une
seconde feuille (Total Time)
Mais dans la colonne dont le titre est le même que le nom en B
Et chaque fois marque d'un X en colonne E pour dire que cette ligne est
comptalisé

Après y encore des trucs à faire, mais je crois que je me débrouillerai

Une réponse rapide serait TRES appréciée

Merci à tous

Rex

6 réponses

Avatar
Michel.P
Salut rex
c'est quoi ta "bible" vba stp ?
merci

RT a tenté de faire fumer son clavier pour :
Bonjour

Je me suis payé une bible VBA et j'étudie les week-end


--
Amicalement
Michel . P
(un jour, serai Calife à la place du Calife...)

Avatar
RT
Comme elle est à la maison je n'ai pas le titre exacte
mais c'est dans le genre "programmer visual basic en nonante jours"
J'ai payé une cinquantaine d'euros
Je connais plusieurs personnes qui l'ont en français ou e anglais et il en
sont trés content

Et puis il y toujours le site du disciplus qui est bourré de truc en excel
http://www.excelabo.net/

A plus tard

Rex


"Michel.P" wrote in message
news:
Salut rex
c'est quoi ta "bible" vba stp ?
merci

RT a tenté de faire fumer son clavier pour :
Bonjour

Je me suis payé une bible VBA et j'étudie les week-end


--
Amicalement
Michel . P
(un jour, serai Calife à la place du Calife...)




Avatar
Hervé
Salut Rex,
Il y a quelques points que je n'ai pas très bien compris comme : "Et chaque
fois marque d'un X en colonne E pour dire que cette ligne est comptalisé"
car si le temps est inscit dans la ligne cela ne veux t'il pas dire qu'il a
été ajouté ? ou alors, il faut que le temps soit totalisé et non inscrit
dans la 1ère cellule vide de la colonne correspondante. Fait déjà un test
sur une copie de ton classeur et tiens moi au courant :

Sub AjouteTemps()
Dim FeTotal As Worksheet
Dim FeTemps As Worksheet
Dim Plage As Range
Dim PlgTitres As Range
Dim Cel1 As Range
Dim Cel2 As Range
'feuille où sont récupérées
'les valeurs, à adapter !!!
Set FeTemps = Worksheets("Feuil1")
'exécute la proc par
'rapport à la colonne B
With FeTemps
Set Plage = .Range(.[B2], _
.[B65536].End(xlUp))
End With

Set FeTotal = Worksheets("Total Time")
'ligne d'entetes de colonnes
'contenant les noms de projets
With FeTotal
Set PlgTitres = .Range(.[A1], _
.[IV1].End(xlToLeft))
End With
'balaye la plage et recupère les valeurs
'si dans la colonne E la cellule est vide
'puis recherche dans les titres le nom du
'projet correspondant afin de coller la
'valeur dans la 1ère cellule vide
For Each Cel1 In Plage
If Cel1.Offset(0, 3) = "" Then
Set Cel2 = PlgTitres.Find(Cel1.Value, _
, xlValues)
If Not Cel2 Is Nothing Then
FeTotal.Cells(65536, Cel2.Column) _
.End(xlUp).Offset(1, 0) = Cel1.Offset(0, 2)
End If
End If
Next Cel1

Set Cel1 = Nothing
Set Cel2 = Nothing
Set Plage = Nothing
Set PlgTitres = Nothing
Set FeTemps = Nothing
Set FeTotal = Nothing
End Sub

Hervé.

"RT" a écrit dans le message news:
zDJQc.205136$
Bonjour

Je commence à utiliser les macro VBA de plus en plus
Le gros problème est que cela devient vite une drogue et que l'on en veux
de

plus en plus

Je me suis payé une bible VBA et j'étudie les week-end
Mais aujourd'hui y a un truc que je voudrais au moins mettre en route
rapidement

Sur une feuille j'introduis les heures de début (colonne A) et de fin
(colonne C) grace à des boutons/macro et en fin (colonne D) j'ai le temps
passé

Dans la colonne B j'incris le nom du projet

Ce que je voudrais faire c'est une macro(accroché à un bouton) qui:
Verifie le nom du projet en B sur toutes les lignes non marqué en
colonne E
Récupère le temps en D sur la même ligne
Ajoute ce temps dans le première cellule vide d'une colonne d'une
seconde feuille (Total Time)
Mais dans la colonne dont le titre est le même que le nom en B
Et chaque fois marque d'un X en colonne E pour dire que cette ligne
est

comptalisé

Après y encore des trucs à faire, mais je crois que je me débrouillerai

Une réponse rapide serait TRES appréciée

Merci à tous

Rex







Avatar
RT
Salut Hervé

Merci pour la réponse

L'idée de mettre une X dans une cellule adjacente est simplement pour que
cette ligne soit considérée comme comptabilisée

Je vais essayer d'être claire, mais souvient toi que je suis British.

Cette macro serait lancée en fin de journée pour comptabiliser les heures
passées sur différents projets
Mais si le lendemain je la relance il ne faut pas qu'elle recomptabilise les
lignes comptabilisés la veille
Et il n'est pas question de les supprimer après les avoir comptabilisées car
elle doivent encore servir à d'autre calculs
La croix sert uniquement de temoin pour dire que ces lignes ne doivent plus
être traitées
Maintenant si tu as une autre idée, par exemple, en fin de macro les
déplacer sur une autre feuille, c'est tout aussi bon
Le principal est qu'elle ne soit traitées qu'une seule fois

Est-ce que tu comprends mieux maintenant?
Je sais que ce n'est pas toujours évident d'expliquer à quelqu'un ce qui
simple pour soit
C'est parce que chacun à sa logique personnelle et elle est souvent (dans
mon cas) incompréhensible pour les autres

Merci et à plus tard

PS Je suis encore au boulot pour une heure, si j'ai le courage je
continuerai demain sinon on se tape (du clavier) lundi
Bon week end

Rex
"Hervé" wrote in message
news:
Salut Rex,
Il y a quelques points que je n'ai pas très bien compris comme : "Et
chaque

fois marque d'un X en colonne E pour dire que cette ligne est comptalisé"
car si le temps est inscit dans la ligne cela ne veux t'il pas dire qu'il
a

été ajouté ? ou alors, il faut que le temps soit totalisé et non inscrit
dans la 1ère cellule vide de la colonne correspondante. Fait déjà un test
sur une copie de ton classeur et tiens moi au courant :

Sub AjouteTemps()
Dim FeTotal As Worksheet
Dim FeTemps As Worksheet
Dim Plage As Range
Dim PlgTitres As Range
Dim Cel1 As Range
Dim Cel2 As Range
'feuille où sont récupérées
'les valeurs, à adapter !!!
Set FeTemps = Worksheets("Feuil1")
'exécute la proc par
'rapport à la colonne B
With FeTemps
Set Plage = .Range(.[B2], _
.[B65536].End(xlUp))
End With

Set FeTotal = Worksheets("Total Time")
'ligne d'entetes de colonnes
'contenant les noms de projets
With FeTotal
Set PlgTitres = .Range(.[A1], _
.[IV1].End(xlToLeft))
End With
'balaye la plage et recupère les valeurs
'si dans la colonne E la cellule est vide
'puis recherche dans les titres le nom du
'projet correspondant afin de coller la
'valeur dans la 1ère cellule vide
For Each Cel1 In Plage
If Cel1.Offset(0, 3) = "" Then
Set Cel2 = PlgTitres.Find(Cel1.Value, _
, xlValues)
If Not Cel2 Is Nothing Then
FeTotal.Cells(65536, Cel2.Column) _
.End(xlUp).Offset(1, 0) = Cel1.Offset(0, 2)
End If
End If
Next Cel1

Set Cel1 = Nothing
Set Cel2 = Nothing
Set Plage = Nothing
Set PlgTitres = Nothing
Set FeTemps = Nothing
Set FeTotal = Nothing
End Sub

Hervé.

"RT" a écrit dans le message news:
zDJQc.205136$
Bonjour

Je commence à utiliser les macro VBA de plus en plus
Le gros problème est que cela devient vite une drogue et que l'on en
veux


de
plus en plus

Je me suis payé une bible VBA et j'étudie les week-end
Mais aujourd'hui y a un truc que je voudrais au moins mettre en route
rapidement

Sur une feuille j'introduis les heures de début (colonne A) et de fin
(colonne C) grace à des boutons/macro et en fin (colonne D) j'ai le
temps


passé

Dans la colonne B j'incris le nom du projet

Ce que je voudrais faire c'est une macro(accroché à un bouton) qui:
Verifie le nom du projet en B sur toutes les lignes non marqué en
colonne E
Récupère le temps en D sur la même ligne
Ajoute ce temps dans le première cellule vide d'une colonne d'une
seconde feuille (Total Time)
Mais dans la colonne dont le titre est le même que le nom en B
Et chaque fois marque d'un X en colonne E pour dire que cette ligne
est

comptalisé

Après y encore des trucs à faire, mais je crois que je me débrouillerai

Une réponse rapide serait TRES appréciée

Merci à tous

Rex











Avatar
Hervé
Re salut,
çà y est, je pense avoir compris, tu veux simplement inscrire une croix dans
la colonne E de la feuille où tu récupère tes valeurs, d'où le contrôle si
il n'y a rien d'inscrit dans la dite colonne. En reprenant le code, il te
sera possible de l'améliorer. Voilà le code retouché :
Sub Totalise()
Dim FeTotal As Worksheet
Dim FeTemps As Worksheet
Dim Plage As Range
Dim PlgTitres As Range
Dim Cel1 As Range
Dim Cel2 As Range
'feuille où sont récupérées
'les valeurs
Set FeTemps = Worksheets("Feuil1")
'exécute la proc par
'rapport à la colonne B
With FeTemps
Set Plage = .Range(.[B2], _
.[B65536].End(xlUp))
End With

Set FeTotal = Worksheets("Total Time")
'ligne d'entetes de colonnes
'contenant les noms de projets
With FeTotal
Set PlgTitres = .Range(.[A1], _
.[IV1].End(xlToLeft))
End With
'balaye la plage et recupère les valeurs
'si dans la colonne E la cellule n'a pas
'de croix "X" puis recherche dans les titres
'le nom du projet correspondant afin de
'coller la valeur dans la 1ère cellule vide
'puis marque la ligne comme comptabilisée
'inscription d'une "X"
For Each Cel1 In Plage
If Cel1.Offset(0, 3) = "" Then
Set Cel2 = PlgTitres.Find(Cel1.Value, _
, xlValues)
If Not Cel2 Is Nothing Then
FeTotal.Cells(65536, Cel2.Column) _
.End(xlUp).Offset(1, 0) = Cel1.Offset(0, 2)
End If
Cel1.Offset(0, 3) = "X"
End If
Next Cel1

Set Cel1 = Nothing
Set Cel2 = Nothing
Set Plage = Nothing
Set PlgTitres = Nothing
Set FeTemps = Nothing
Set FeTotal = Nothing
End Sub

Hervé.

"RT" a écrit dans le message news:
ZoMQc.205264$
Salut Hervé

Merci pour la réponse

L'idée de mettre une X dans une cellule adjacente est simplement pour que
cette ligne soit considérée comme comptabilisée

Je vais essayer d'être claire, mais souvient toi que je suis British.

Cette macro serait lancée en fin de journée pour comptabiliser les heures
passées sur différents projets
Mais si le lendemain je la relance il ne faut pas qu'elle recomptabilise
les

lignes comptabilisés la veille
Et il n'est pas question de les supprimer après les avoir comptabilisées
car

elle doivent encore servir à d'autre calculs
La croix sert uniquement de temoin pour dire que ces lignes ne doivent
plus

être traitées
Maintenant si tu as une autre idée, par exemple, en fin de macro les
déplacer sur une autre feuille, c'est tout aussi bon
Le principal est qu'elle ne soit traitées qu'une seule fois

Est-ce que tu comprends mieux maintenant?
Je sais que ce n'est pas toujours évident d'expliquer à quelqu'un ce qui
simple pour soit
C'est parce que chacun à sa logique personnelle et elle est souvent (dans
mon cas) incompréhensible pour les autres

Merci et à plus tard

PS Je suis encore au boulot pour une heure, si j'ai le courage je
continuerai demain sinon on se tape (du clavier) lundi
Bon week end

Rex
"Hervé" wrote in message
news:
Salut Rex,
Il y a quelques points que je n'ai pas très bien compris comme : "Et
chaque

fois marque d'un X en colonne E pour dire que cette ligne est
comptalisé"


car si le temps est inscit dans la ligne cela ne veux t'il pas dire
qu'il


a
été ajouté ? ou alors, il faut que le temps soit totalisé et non inscrit
dans la 1ère cellule vide de la colonne correspondante. Fait déjà un
test


sur une copie de ton classeur et tiens moi au courant :

Sub AjouteTemps()
Dim FeTotal As Worksheet
Dim FeTemps As Worksheet
Dim Plage As Range
Dim PlgTitres As Range
Dim Cel1 As Range
Dim Cel2 As Range
'feuille où sont récupérées
'les valeurs, à adapter !!!
Set FeTemps = Worksheets("Feuil1")
'exécute la proc par
'rapport à la colonne B
With FeTemps
Set Plage = .Range(.[B2], _
.[B65536].End(xlUp))
End With

Set FeTotal = Worksheets("Total Time")
'ligne d'entetes de colonnes
'contenant les noms de projets
With FeTotal
Set PlgTitres = .Range(.[A1], _
.[IV1].End(xlToLeft))
End With
'balaye la plage et recupère les valeurs
'si dans la colonne E la cellule est vide
'puis recherche dans les titres le nom du
'projet correspondant afin de coller la
'valeur dans la 1ère cellule vide
For Each Cel1 In Plage
If Cel1.Offset(0, 3) = "" Then
Set Cel2 = PlgTitres.Find(Cel1.Value, _
, xlValues)
If Not Cel2 Is Nothing Then
FeTotal.Cells(65536, Cel2.Column) _
.End(xlUp).Offset(1, 0) = Cel1.Offset(0, 2)
End If
End If
Next Cel1

Set Cel1 = Nothing
Set Cel2 = Nothing
Set Plage = Nothing
Set PlgTitres = Nothing
Set FeTemps = Nothing
Set FeTotal = Nothing
End Sub

Hervé.

"RT" a écrit dans le message news:
zDJQc.205136$
Bonjour

Je commence à utiliser les macro VBA de plus en plus
Le gros problème est que cela devient vite une drogue et que l'on en
veux


de
plus en plus

Je me suis payé une bible VBA et j'étudie les week-end
Mais aujourd'hui y a un truc que je voudrais au moins mettre en route
rapidement

Sur une feuille j'introduis les heures de début (colonne A) et de fin
(colonne C) grace à des boutons/macro et en fin (colonne D) j'ai le
temps


passé

Dans la colonne B j'incris le nom du projet

Ce que je voudrais faire c'est une macro(accroché à un bouton) qui:
Verifie le nom du projet en B sur toutes les lignes non marqué en
colonne E
Récupère le temps en D sur la même ligne
Ajoute ce temps dans le première cellule vide d'une colonne d'une
seconde feuille (Total Time)
Mais dans la colonne dont le titre est le même que le nom en B
Et chaque fois marque d'un X en colonne E pour dire que cette
ligne



est
comptalisé

Après y encore des trucs à faire, mais je crois que je me
débrouillerai




Une réponse rapide serait TRES appréciée

Merci à tous

Rex















Avatar
RT
Salut Hervé

Et dire que je pensais qu'après le viekend cela irait mieux
Quel con je fais!

Mais sérieusement et pas encore réveillé, je ne comprends pas très bien le
sens de tes procédures
Mais j'ai fais un copie collé pour voir et il me done le message
Out of range

J'ai bien mes titres en ligne 1 (A1, B1, C1, etc)
Et mes données qui commence en ligne deux

A mon avis cela vient de ton commentaire ''Feuille ou sont récupéré.......

S'il te plait ne crie pas trop fort, je ne sais pas ce que j'ai ce matin,
mais il n'y rien qui entre dans ma peite tête

A tantôt

Rex

P.S. Je ne suis pas sorti ce vekend, donc là n'est pas le problème
"Hervé" wrote in message
news:#
Re salut,
çà y est, je pense avoir compris, tu veux simplement inscrire une croix
dans

la colonne E de la feuille où tu récupère tes valeurs, d'où le contrôle si
il n'y a rien d'inscrit dans la dite colonne. En reprenant le code, il te
sera possible de l'améliorer. Voilà le code retouché :
Sub Totalise()
Dim FeTotal As Worksheet
Dim FeTemps As Worksheet
Dim Plage As Range
Dim PlgTitres As Range
Dim Cel1 As Range
Dim Cel2 As Range
'feuille où sont récupérées
'les valeurs
Set FeTemps = Worksheets("Feuil1")
'exécute la proc par
'rapport à la colonne B
With FeTemps
Set Plage = .Range(.[B2], _
.[B65536].End(xlUp))
End With

Set FeTotal = Worksheets("Total Time")
'ligne d'entetes de colonnes
'contenant les noms de projets
With FeTotal
Set PlgTitres = .Range(.[A1], _
.[IV1].End(xlToLeft))
End With
'balaye la plage et recupère les valeurs
'si dans la colonne E la cellule n'a pas
'de croix "X" puis recherche dans les titres
'le nom du projet correspondant afin de
'coller la valeur dans la 1ère cellule vide
'puis marque la ligne comme comptabilisée
'inscription d'une "X"
For Each Cel1 In Plage
If Cel1.Offset(0, 3) = "" Then
Set Cel2 = PlgTitres.Find(Cel1.Value, _
, xlValues)
If Not Cel2 Is Nothing Then
FeTotal.Cells(65536, Cel2.Column) _
.End(xlUp).Offset(1, 0) = Cel1.Offset(0, 2)
End If
Cel1.Offset(0, 3) = "X"
End If
Next Cel1

Set Cel1 = Nothing
Set Cel2 = Nothing
Set Plage = Nothing
Set PlgTitres = Nothing
Set FeTemps = Nothing
Set FeTotal = Nothing
End Sub

Hervé.

"RT" a écrit dans le message news:
ZoMQc.205264$
Salut Hervé

Merci pour la réponse

L'idée de mettre une X dans une cellule adjacente est simplement pour
que


cette ligne soit considérée comme comptabilisée

Je vais essayer d'être claire, mais souvient toi que je suis British.

Cette macro serait lancée en fin de journée pour comptabiliser les
heures


passées sur différents projets
Mais si le lendemain je la relance il ne faut pas qu'elle recomptabilise
les

lignes comptabilisés la veille
Et il n'est pas question de les supprimer après les avoir comptabilisées
car

elle doivent encore servir à d'autre calculs
La croix sert uniquement de temoin pour dire que ces lignes ne doivent
plus

être traitées
Maintenant si tu as une autre idée, par exemple, en fin de macro les
déplacer sur une autre feuille, c'est tout aussi bon
Le principal est qu'elle ne soit traitées qu'une seule fois

Est-ce que tu comprends mieux maintenant?
Je sais que ce n'est pas toujours évident d'expliquer à quelqu'un ce qui
simple pour soit
C'est parce que chacun à sa logique personnelle et elle est souvent
(dans


mon cas) incompréhensible pour les autres

Merci et à plus tard

PS Je suis encore au boulot pour une heure, si j'ai le courage je
continuerai demain sinon on se tape (du clavier) lundi
Bon week end

Rex
"Hervé" wrote in message
news:
Salut Rex,
Il y a quelques points que je n'ai pas très bien compris comme : "Et
chaque

fois marque d'un X en colonne E pour dire que cette ligne est
comptalisé"


car si le temps est inscit dans la ligne cela ne veux t'il pas dire
qu'il


a
été ajouté ? ou alors, il faut que le temps soit totalisé et non
inscrit



dans la 1ère cellule vide de la colonne correspondante. Fait déjà un
test


sur une copie de ton classeur et tiens moi au courant :

Sub AjouteTemps()
Dim FeTotal As Worksheet
Dim FeTemps As Worksheet
Dim Plage As Range
Dim PlgTitres As Range
Dim Cel1 As Range
Dim Cel2 As Range
'feuille où sont récupérées
'les valeurs, à adapter !!!
Set FeTemps = Worksheets("Feuil1")
'exécute la proc par
'rapport à la colonne B
With FeTemps
Set Plage = .Range(.[B2], _
.[B65536].End(xlUp))
End With

Set FeTotal = Worksheets("Total Time")
'ligne d'entetes de colonnes
'contenant les noms de projets
With FeTotal
Set PlgTitres = .Range(.[A1], _
.[IV1].End(xlToLeft))
End With
'balaye la plage et recupère les valeurs
'si dans la colonne E la cellule est vide
'puis recherche dans les titres le nom du
'projet correspondant afin de coller la
'valeur dans la 1ère cellule vide
For Each Cel1 In Plage
If Cel1.Offset(0, 3) = "" Then
Set Cel2 = PlgTitres.Find(Cel1.Value, _
, xlValues)
If Not Cel2 Is Nothing Then
FeTotal.Cells(65536, Cel2.Column) _
.End(xlUp).Offset(1, 0) = Cel1.Offset(0, 2)
End If
End If
Next Cel1

Set Cel1 = Nothing
Set Cel2 = Nothing
Set Plage = Nothing
Set PlgTitres = Nothing
Set FeTemps = Nothing
Set FeTotal = Nothing
End Sub

Hervé.

"RT" a écrit dans le message news:
zDJQc.205136$
Bonjour

Je commence à utiliser les macro VBA de plus en plus
Le gros problème est que cela devient vite une drogue et que l'on en
veux


de
plus en plus

Je me suis payé une bible VBA et j'étudie les week-end
Mais aujourd'hui y a un truc que je voudrais au moins mettre en
route




rapidement

Sur une feuille j'introduis les heures de début (colonne A) et de
fin




(colonne C) grace à des boutons/macro et en fin (colonne D) j'ai le
temps


passé

Dans la colonne B j'incris le nom du projet

Ce que je voudrais faire c'est une macro(accroché à un bouton) qui:
Verifie le nom du projet en B sur toutes les lignes non marqué
en




colonne E
Récupère le temps en D sur la même ligne
Ajoute ce temps dans le première cellule vide d'une colonne
d'une




seconde feuille (Total Time)
Mais dans la colonne dont le titre est le même que le nom en B
Et chaque fois marque d'un X en colonne E pour dire que cette
ligne



est
comptalisé

Après y encore des trucs à faire, mais je crois que je me
débrouillerai




Une réponse rapide serait TRES appréciée

Merci à tous

Rex