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   -
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   Statut Membre Dernière intervention   651
 
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   Statut Membre Dernière intervention   48
 
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   Statut Membre Dernière intervention   651
 
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   Statut Membre Dernière intervention   48 > Pierre1310 Messages postés 8564 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   651 > BILLING Messages postés 162 Date d'inscription   Statut Membre Dernière intervention  
 

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   Statut Membre Dernière intervention   48 > Pierre1310 Messages postés 8564 Date d'inscription   Statut Membre Dernière intervention  
 
Ç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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Membre Dernière intervention   48
 
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   Statut Membre Dernière intervention   651
 
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   Statut Membre Dernière intervention   48 > Pierre1310 Messages postés 8564 Date d'inscription   Statut Membre Dernière intervention  
 
Le nombre de lignes sera variable. Pourrait être entre 5000 et 15000.
0
Pierre1310 Messages postés 8564 Date d'inscription   Statut Membre Dernière intervention   651
 
Cela explique que ça prenne du temps mais ça marche ne vous inquiétez pas.
0
Maurice
 
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   Statut Membre Dernière intervention   48
 
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
Maurice
 
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   Statut Membre Dernière intervention   48
 
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
Maurice
 
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   Statut Membre Dernière intervention   48
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Membre Dernière intervention   48
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Membre Dernière intervention   48 > michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Membre Dernière intervention   48
 
Ç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   Statut Membre Dernière intervention   48
 
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   Statut Membre Dernière intervention   48
 
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