macro avec elseIf ?

wwwhttp

XLDnaute Nouveau
bonjour,
je bute sur une macro.
en données : colA avec un état d'avancement, colB avec des données temps en secondes
je dois à partir de ces 2 col en faire une 3ème avec soit la durée exprimée en hh:mm:ss si la durée existe en colB, soit l'état d'avancement si la durée colB est vide, et que la macro s'applique de la 2ème à la dernière ligne, quel que soit le nbre de lignes
donc quoi qu'il arrive aucune ligne vide sur la 3ème colonne
merci d'avance de votre aide
 

Pièces jointes

  • Copie de donnes 02 2012.xls
    25 KB · Affichages: 52
  • Copie de donnes 02 2012.xls
    25 KB · Affichages: 56
  • Copie de donnes 02 2012.xls
    25 KB · Affichages: 56

Excel-lent

XLDnaute Barbatruc
Re : macro avec elseIf ?

Bonjour et bienvenu sur le forum Wwwhttp,

Voici ci-joint la solution à ton problème.

Comme tu peux le constater la macro est assez basique, pratique pour commencer à apprendre le VBA. Voici ton code commenté :

VB:
Sub RemplissageColonneTrios()
Dim DernièreLigne As Long
' La variable DernièreLigne est de type Long
DernièreLigne = [A65536].End(xlUp).Row
' Se placer sur la cellule A65536 et remonter vers le haut, jusqu'à la première cellule pleine
' Puis placer le numéro de cette ligne dans la variable DernièreLigne
' Cela permet de connaître jusqu'où descend ton tableau. En partant du principe que la
' colonne A est toujours renseigné!

For i = 2 To DernièreLigne
' Mettre 2 dans la variable i lorsque la boucle est effectué pour la première fois
' puis 3, puis 4, ... jusqu'à atteindre le numéro contenu dans la variable DernièreLigne
    If Cells(i, 2) = "" Then
    'Si la cellule colonne 2, ligne i est vide alors
         Cells(i, 3) = Cells(i, 1)
         'écrire dans la cellule colonne 3, ligne i la valeur contenu dans la cellule colonne 1, ligne i
    Else
    'sinon
         Cells(i, 3) = Cells(i, 2)
         'écrire dans la cellule colonne 3, ligne i la valeur contenu dans la cellule colonne 2, ligne i
    End If
    'fin de la condition "SI"
Next i
'Tant que la valeur contenu dans i est inférieur à la valeur contenu dans la variable "DernièreLigne"
'Effectuer une nouvelle fois le code VBA inclus dans la boucle

End Sub

Si tu as besoin de plus d'explication, n'hésite pas à demander, le but est de comprendre et progresser.

Pour plus d'explication sur les boucles, dont celle utilisé ici : "For... To ... Next", regarde ici ;)

Pour plus d'explication sur les types de variable, cliquer ici

Bonne soirée

Edition : salut Dranreb
 

Pièces jointes

  • Copie de donnes 02 2012 complété.xls
    28 KB · Affichages: 41
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : macro avec elseIf ?

Bonsoir le fil, bonsoir le forum,

Tout comme Excel-lent j'étais en train de me torturer les neurones avec une solution VBA pour extraires les heures minutes et secondes quand je tombe sur la solution de Bernard. Il m'a cloué le bec ! Arrrgh, faut que je me mette aux formules urgent...

[Édition]
Bonsoir Gilbert on s'est croisé...
 

Dranreb

XLDnaute Barbatruc
Re : macro avec elseIf ?

Si vous tenez à le faire par macro :
VB:
Sub Macro1()
With Feuil9.Range("C2:C" & Feuil9.[A65536].End(xlUp).Row)
   .FormulaR1C1 = "=IF(RC2>0,RC2/86400,RC1)"
   .Value = .Value ' Facultatif
   .NumberFormat = "[h]:mm:ss;@"
   End With
End Sub
À +
 
Dernière édition:

Excel-lent

XLDnaute Barbatruc
Re : macro avec elseIf ?

Bonsoir à tous,

Ben... c'est surtout que le titre du fil était : macro avec elseIf ?

D'où ma réponse ;)

Mais c'est clair que la version "formule" est beaucoup plus simple. Mais présente l'inconvénient de ne pas s'adapter automatiquement à la hauteur du tableau :D


Bonne soirée à tous
 

wwwhttp

XLDnaute Nouveau
Re : macro avec elseIf ?

Si vous tenez à le faire par macro :
VB:
Sub Macro1()
With Feuil9.Range("C2:C" & Feuil9.[A65536].End(xlUp).Row)
   .FormulaR1C1 = "=IF(RC2>0,RC2/86400,RC1)"
   .Value = .Value ' Facultatif
   .NumberFormat = "[h]:mm:ss;@"
   End With
End Sub
À +

pile poil !
un grand merci à vous toutes et tous, ça pulse dans ce forum, aussi bien sur la rapidité que sur la qualité
je reviendrai certainement pour en apprendre plus ;-)
 

Discussions similaires

Réponses
6
Affichages
357
Réponses
25
Affichages
776

Statistiques des forums

Discussions
312 495
Messages
2 088 971
Membres
103 995
dernier inscrit
Flodk