Répéter une macro jusqu'à la dernière ligne(changeante)

Résolu/Fermé
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 - 18 févr. 2016 à 14:46
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 - 19 févr. 2016 à 15:36
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
A voir également:

8 réponses

Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 649
18 févr. 2016 à 14:54
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 +
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
18 févr. 2016 à 17:02
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
0
Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 649
18 févr. 2016 à 17:05
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 :)
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48 > Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020
18 févr. 2016 à 17:20
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
0
Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 649 > BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021
18 févr. 2016 à 17:30

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.
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48 > Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020
18 févr. 2016 à 18:12
Ça ne fonctionne pas :-(

J'ai copier/coller ton script en remplaçant le mien et lorsque je l'active dans Visual Basic en utilisant la fonction pas-à-pas, ça bloque à:
For b = 1 To a


Je reçois ce message: Erreur d'exécution '6': Dépassement de capacité
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
18 févr. 2016 à 17:26
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
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
18 févr. 2016 à 17:38
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
0
Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 649
18 févr. 2016 à 17:44
Pour la cellule, Clic droit et format date il me semble.$
La macro ne s'arrête pas car il doit répéter un traitement long.
Vous avez combien de lignes?
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48 > Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020
18 févr. 2016 à 17:57
Le nombre de lignes sera variable. Pourrait être entre 5000 et 15000.
0
Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 649
18 févr. 2016 à 19:23
Cela explique que ça prenne du temps mais ça marche ne vous inquiétez pas.
0
Bonjour
peux être comme ça
Sub 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
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
18 févr. 2016 à 19:13
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.
0
Bonjour
désoler j'ais mis 16 au lieux de 1
voila avec les Mois
Sub 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
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
18 févr. 2016 à 21:35
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.
0

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

Posez votre question
Bonsoir

Voila j’espère que tu va comprendre
Sub 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
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
19 févr. 2016 à 14:05
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 19/02/2016 à 08:53
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 aaaammjj
en 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
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
19 févr. 2016 à 13:44
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 19/02/2016 à 09:25
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
19 févr. 2016 à 14:18
RE,

pourtant....
http://www.cjoint.com/c/FBtnrecKlWO

as tu essayé la macro ?

je repasse dans env. 2 heures
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
19 févr. 2016 à 14:34
Je viens de télécharger le fichier cjoint et le mois de janvier est inscrit pour chaque date. :-/

Je me demande si nos paramètres Excel sont différents et causent des résultats différents.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
19 févr. 2016 à 14:34
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

0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
19 févr. 2016 à 15:10
Ça bog encore :-(

Ça bog à :
.FormulaLocal = "=STXT(A1;5;2)*1"


Ce message s'affiche:
"Erreur d'exécution '1004':
Erreur définie pas l'application ou par l'objet"
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
19 févr. 2016 à 15:16
Eureka! J'ai compris ce qu'il n'allait pas.

Je devais changer les points virgules de la macro par des virgules.

Maintenant ta macro fonctionne très bien et rapidement.

Un gros merci! :-)

eLise
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
19 févr. 2016 à 15:36
Non, finalement je me suis trompée. Je n'obtiens pas les bons mois. Pourtant j'aurais juré avoir vu les bons mois s'afficher en premier.

Maintenant tout ce que j'obtiens comme mois sont: janvier, février, mars, avril puis janvier encore, peu importe les chiffres dans A.
0