Répéter une macro jusqu'à la dernière ligne(changeante)
Résolu
BILLING
Messages postés
162
Date d'inscription
Statut
Membre
Dernière intervention
-
BILLING Messages postés 162 Date d'inscription Statut Membre Dernière intervention -
BILLING Messages postés 162 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai enregistré cette petite macro:

'
Et j'aimerai qu'elle se répète jusqu'à la dernière ligne qui ne sera jamais la même d'une feuille à l'autre.
J'ai lu sur le site d'autres cas similaires au mien mais je n'y comprend rien. J'ai besoin d'aide.
Voici un échantillon avec lequel travailler.
https://www.cjoint.com/c/FBsnRlvDABE
Merci
eLise
J'ai enregistré cette petite macro:

Et j'aimerai qu'elle se répète jusqu'à la dernière ligne qui ne sera jamais la même d'une feuille à l'autre.
J'ai lu sur le site d'autres cas similaires au mien mais je n'y comprend rien. J'ai besoin d'aide.
Voici un échantillon avec lequel travailler.
https://www.cjoint.com/c/FBsnRlvDABE
Merci
eLise
8 réponses
-
Bonjour,
Tu rajoute au début dim a,b as integer
a = Cells.SpecialCells(xlCellTypeLastCell).Row
puis
au dessus de ton if : for b = 1 to a
et next b au dessus de end sub
b=1 c'est pour la ligne N°1, si ça commence à la 5, mets 5.
a +
-
Désolée Pierre mais je ne suis pas certaine de comprendre.
Il n'y a pas de "if" dans ma macro.
J'ai aussi besoin de précision quand à la disposition. Quand tu dis "au début", Est-ce juste avant "ActiveCell.FormulaR1C1" ?
Si possible, peux-tu ajouter une image de la macro entière avec tes modifications?
Un gros merci.
eLise -
Oui effectivement tu n'as pas de if autant pour moi, colle ici ton code avec la balise code s'il te plait, je préfère éviter les fichiers cijoint :)
- Voilà !
Sub LEMOIS()
'
' LEMOIS Macro
'
'
ActiveCell.FormulaR1C1 = _
"=CONCATENATE(MID(RC[-18],1,4),""-"",MID(RC[-18],5,2),""-"",MID(RC[-18],7,2))"
Range("AK2").Select
Selection.Copy
Range("AL2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "4/3/2015"
Range("AL3").Select
End Sub
Sub LEMOIS()
'
' LEMOIS Macro
'
dim a,b as integer
a = Cells.SpecialCells(xlCellTypeLastCell).Row
for b = 1 to a
ActiveCell.FormulaR1C1 = _
"=CONCATENATE(MID(RC[-18],1,4),""-"",MID(RC[-18],5,2),""-"",MID(RC[-18],7,2))"
Range("AK2").Select
Selection.Copy
Range("AL2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "4/3/2015"
Range("AL3").Select
Next b
End Sub
Essayez ça devrai marcher.
-
-
Bonjour
J'au du mal comprendre mais....
sans macro
tu écris ta formule =concatener(...etc dans B1
et tu fais un double clic sur le carré noir en bas et à droite de la cellule
-
Merci pour le truc, mais ma macro ne s'arrête pas là. C'était la première partie.
La deuxième partie consiste à copier coller le résultat de la cellule concaténée dans la cellule suivante à droite et de cliquer à l'intérieur de cette cellule pour qu'elle devienne un nombre. Ce nombre se transforme en date (mois).
S'il existe une façon plus simple de transformer une donnée de texte comme celle-ci: 20150403 en date (mois), alors j'aimerais apprendre.
Merci
eLise -
-
-
-
Bonjour
peux être comme çaSub Test() Nlig = Cells(Rows.Count, 16).End(xlUp).Row Range("C2:C" & Nlig).FormulaLocal = "=CONCATENER(STXT(A2;1;4);""-"";STXT(A2;5;2);""-"";STXT(A2;7;2))" End Sub
A+
Maurice-
Bonjour,
J'ai testé votre scripte et comme résultat j'ai obtenu une première cellule concaténée. Ça ne continue pas jusqu'à la dernière ligne (ligne 25 dans mon échantillon)
https://www.cjoint.com/c/FBsnRlvDABE
De plus, après la fonction de concatener, le résultat doit se copier dans la cellule adjacente et se transformer en nombre.
-
-
Bonjour
désoler j'ais mis 16 au lieux de 1
voila avec les MoisSub Test() Nlig = Cells(Rows.Count, 1).End(xlUp).Row Range("C2:C" & Nlig).FormulaLocal = "=CONCATENER(STXT(A2;1;4);""-"";STXT(A2;5;2);""-"";STXT(A2;7;2))" For L = 2 To Nlig Mois = CDbl(Split(Range("C" & L), "-")(1)) Range("D" & L).Value = Format((DateSerial(2016, Mois, 1)), "mmmm") Next End Sub
A+
Maurice-
Merci Maurice, ça semble vouloir fonctionner mais j'aimerais l'ajuster à mon fichier complet. L'échantillon n'avait que 2 colonnes je crois.
J'ai changé la cellule 'A2' pour 'S2' car c'est dans cette colonne que se trouve l'info.
Mais là je me demande quelle est la signification de:For L = 2 To Nlig
Mois = CDbl(Split(Range("C" & L), "-")(1))
Range("D" & L).Value = Format((DateSerial(2016, Mois, 1)), "mmmm")
Next
End Sub
Aussi le "C" devient "AJ" et le "D" devient "AK".
J'ai fait le changement mais ça bog. À quoi sert le 'L' dans ("C" & L) et dans ("D" & L) ?
Je crois que je dois ajuster quelque chose dans cette partie mais je ne suis pas certaine de ce que c'est.
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonsoir
Voila j’espère que tu va comprendreSub Test1() DateEntry = 19 ' 1 egal colonne S For L = 2 To Cells(Rows.Count, DateEntry).End(xlUp).Row Range("AJ" & L).NumberFormat = "@" Range("AJ" & L).Value = Left(Cells(L, DateEntry), 4) & "-" & Mid(Cells(L, DateEntry), 5, 2) & "-" & Right(Cells(L, DateEntry), 2) Range("AK" & L).Value = Application.Proper(Format(DateSerial(Left(Cells(L, DateEntry), 4), Mid(Cells(L, DateEntry), 5, 2), Right(Cells(L, DateEntry), 2)), "mmmm")) Next End Sub
A+
Maurice-
Wow! Ça fonctionne!
Maintenant, je sais qu'il y a une façon de programmer la macro pour qu'elle reconnaisse la dernière ligne de donnée (en "S") et qu'elle s'arrête là.
Est-ce que je me trompe en croyant que la macro que tu as créée cherche jusqu'à la dernière ligne du fichier, peu importe s'il y a des données dans la colonne "S"?
Je crois que Michel_m, plus bas, suggère quelque chose du genre avec:.AutoFill Destination:=.Range("A1:A" & Derlig)
Si c'est le cas, je ne suis pas certaine où l'insérer dans la macro que tu m'offres.
eLise
-
-
Bonjour
S'il existe une façon plus simple de transformer une donnée de texte comme celle-ci: 20150403 en date (mois), alors j'aimerais apprendre.
Pour trouver le mois de la date écrit sous la forme aaaammjjen formule
=TEXTE("1/"&STXT(A1;5;2);"mmmm")
en VBA
Dim Mois As String
Mois = Format("1 /" & Mid(Range("A1"), 5, 2), "mmmm")
Si tu veux le mois sous forme de nombre
Dim Mois as Byte
Mois=Mid(Range("A1"), 5, 2) * 1
pour tes 15000 lignes , je te propose une macro rapide dans la matinée
Michel-
Bonjour,
Cette formule =TEXTE("1/"&STXT(A1;5;2);"mmmm") me donne comme résultat "janvier" plutôt qu'avril. Et ce pour toute les dates d'avril à décembre.
Si j'enlève le ' / ' comme ceci: =TEXTE("1"&STXT(A1;5;2);"mmmm"), j'ai "avril", mais encore une fois pour toutes les dates d'avril à décembre.
Y a quelque chose qui cloche.
eLise
-
-
Re,
le numéro du mois est indiqué en colonne B
macro valable pour toutes tes feuilles
Option Explicit
'-----------------------------
Sub Indiquer_mois()
Dim Derlig As Integer
Application.ScreenUpdating = False
With ActiveSheet
Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
With Range("B1")
.FormulaLocal = "=STXT(A1;5;2)*1"
.AutoFill Destination:=.Range("A1:A" & Derlig)
End With
End With
End Sub
Michel -
Comme ta réponse m'inquiète (ca m'avait fait le coup ce matin...)
à part ça:
test de la macro sur 10000 lignes
durée: env 4 à 5/100 de secondes
http://www.cjoint.com/c/FBtnHNtmllO