Copier_VBA

Le
Jean Berti
Bonjour à tous

En colonne des dates (01/01/2007) triées.
En BAS des valeurs numèriques.
Comment recupérer la ligne du dernier jour du mois de janvier par exemple
( sachant que le dernier jour n'est pas forcemment le 31) et copier cette
ligne sur feuille 2 par exemple.
Merci d'avance

Jean Berti
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #4803571
bonjour Jean,

pour recupérer le no. de ligne :

=SI(ESTERREUR(EQUIV(DATE(2007; 2; 1);A1:A20;0));EQUIV(DATE(2007; 2; 1);A1:A20);EQUIV(DATE(2007; 2; 1);A1:A20;0)-1)

isabelle

Bonjour à tous

En colonne des dates (01/01/2007) triées.
En B...AS des valeurs numèriques.
Comment recupérer la ligne du dernier jour du mois de janvier par exemple
( sachant que le dernier jour n'est pas forcemment le 31) et copier cette
ligne sur feuille 2 par exemple.
Merci d'avance

Jean Berti




Philippe.R
Le #4803541
Bonsoir jean,
En supposant nommée "lemois" une cellule dans laquelle tu entre le numéro du
mois dont tu cherches à copier la dernière ligne :

Sub max_du_mois()
For i = 2 To Range("a6543").End(xlUp).Row
If Month(Cells(i, 1)) = [lemois] + 1 Then
If Day(Cells(i, 1).Value) < Day(Cells(i - 1, 1).Value) Then
Cells(i - 1, 1).EntireRow.Copy
Sheets("Feuil2").Activate
j = Range("a6543").End(xlUp).Row
Rows(j).Select
ActiveSheet.Paste
Sheets("feuil1").Activate
Application.CutCopyMode = False
Exit Sub
End If
End If
Next i
End Sub
--
Avec plaisir
Philippe.R
"Jean Berti" news:
Bonjour à tous

En colonne des dates (01/01/2007) triées.
En B...AS des valeurs numèriques.
Comment recupérer la ligne du dernier jour du mois de janvier par exemple
( sachant que le dernier jour n'est pas forcemment le 31) et copier cette
ligne sur feuille 2 par exemple.
Merci d'avance

Jean Berti



Philippe.R
Le #4803511
Re,
Ce sera mieux comme ci dessous :

Sub max_du_mois()
For i = 2 To Range("a6543").End(xlUp).Row
If Month(Cells(i, 1)) = [lemois] + 1 Then
If Day(Cells(i, 1).Value) < Day(Cells(i - 1, 1).Value) Then
Cells(i - 1, 1).EntireRow.Copy
Sheets("Feuil2").Activate
j = Range("a6543").End(xlUp).Row
Rows(j + 1).Select
ActiveSheet.Paste
Sheets("feuil1").Activate
Application.CutCopyMode = False
Exit Sub
End If
ElseIf Month(Cells(Range("a6543").End(xlUp).Row, 1).Value) = [lemois]
Then
Cells(Range("a6543").End(xlUp).Row, 1).EntireRow.Copy
Sheets("Feuil2").Activate
j = Range("a6543").End(xlUp).Row
Rows(j + 1).Select
ActiveSheet.Paste
Sheets("feuil1").Activate
Application.CutCopyMode = False
Exit Sub
End If
Next i
err:
MsgBox "La valeur que vous avez saisie pour le mois est incorrecte" _
& vbNewLine & "ou n'existe pas dans le tableau", , "M.P.F.E."
End Sub

--
Avec plaisir
Philippe.R
"Jean Berti" news:
Bonjour à tous

En colonne des dates (01/01/2007) triées.
En B...AS des valeurs numèriques.
Comment recupérer la ligne du dernier jour du mois de janvier par exemple
( sachant que le dernier jour n'est pas forcemment le 31) et copier cette
ligne sur feuille 2 par exemple.
Merci d'avance

Jean Berti



isabelle
Le #4803481
en vba,

Sub Macro1()
x = Evaluate("=IF(ISERROR(MATCH(DATE(2007, 2, 1),Feuil1!A:A,0)),MATCH(DATE(2007, 2, 1),Feuil1!A:A),MATCH(DATE(2007, 2, 1),Feuil1!A:A,0)-1)")
Sheets("Feuil1").Rows(x).Copy Sheets("Feuil2").Range("A1")
End Sub


isabelle

bonjour Jean,

pour recupérer le no. de ligne :

=SI(ESTERREUR(EQUIV(DATE(2007; 2; 1);A1:A20;0));EQUIV(DATE(2007; 2;
1);A1:A20);EQUIV(DATE(2007; 2; 1);A1:A20;0)-1)

isabelle


Bonjour à tous

En colonne des dates (01/01/2007) triées.
En B...AS des valeurs numèriques.
Comment recupérer la ligne du dernier jour du mois de janvier par
exemple ( sachant que le dernier jour n'est pas forcemment le 31) et
copier cette ligne sur feuille 2 par exemple.
Merci d'avance

Jean Berti





cousinhub
Le #4663951
Bonsoir, un peu plus simple :

Sub fin_de_mois()
For Each cel In Range("A1:A" & [a65000].End(xlUp).Row)
If Day(cel) > Day(cel.Offset(1, 0)) Then cel.EntireRow.Copy _
Sheets("Feuil2").[a65000].End(xlUp).Offset(1, 0)
Next cel
End Sub

Bonjour à tous

En colonne des dates (01/01/2007) triées.
En B...AS des valeurs numèriques.
Comment recupérer la ligne du dernier jour du mois de janvier par exemple
( sachant que le dernier jour n'est pas forcemment le 31) et copier cette
ligne sur feuille 2 par exemple.
Merci d'avance

Jean Berti




Trirème
Le #4663941
Bonjour à tous,
À mon tour d'envoyer ma prose, car je ne suis pas sûr que tout le monde ait compris la
même chose :

Sub ChercheLigneMaDate()
' Cherche la ligne contenant le dernier jour d'un mois donné
' et le cas échéant la copie dans une autre feuille du même classeur
' à la suite des données déjà présentes
Dim MaDate As Date
Dim Année As Integer
Dim Mois As Integer
Dim LigneACopier As Integer
Dim LigneDest As Double
Dim FeuilleDest As String

' *********** Valeurs d'essais **********************
Année = 2007
Mois = 1
FeuilleDest = "Feuil2"

MaDate = DateSerial(Année, Mois + 1, 0)
On Error Resume Next
LigneACopier = Application.Match(MaDate * 1, [A:A], 0)
If LigneACopier <> 0 Then
Sheets(FeuilleDest).Range("A65536").End(xlUp).Offset(1).EntireRow _
= Rows(LigneACopier).EntireRow.Value
End If
End Sub

Cordialement
Trirème

Bonjour à tous

En colonne des dates (01/01/2007) triées.
En B...AS des valeurs numèriques.
Comment recupérer la ligne du dernier jour du mois de janvier par exemple
( sachant que le dernier jour n'est pas forcemment le 31) et copier cette
ligne sur feuille 2 par exemple.
Merci d'avance

Jean Berti




Jean Berti
Le #4663871
Bonsoir Trirème

Merci de t'être penché sur mon problème.
Cela fonctionne correctement sauf que pour moi les mois ne font pas tous 30
ou 31 jours.
MaDate = DateSerial(Année, Mois + 1, 0)
J'avais par JB récupéré cette formule matricielle
=MAX(SI(MOIS($A$7:$A$1000)=LIGNE();SI(ANNEE($A$7:$A$1000) 07;$A$7:$A$1000;0)))
LIGNE=1 pour Janvier
Comment l'adapter à ta macro?
Merci encore de ta patience
Cordialement

Jean Berti



"Trirème"
Bonjour à tous,
À mon tour d'envoyer ma prose, car je ne suis pas sûr que tout le monde
ait compris la même chose :

Sub ChercheLigneMaDate()
' Cherche la ligne contenant le dernier jour d'un mois donné
' et le cas échéant la copie dans une autre feuille du même classeur
' à la suite des données déjà présentes
Dim MaDate As Date
Dim Année As Integer
Dim Mois As Integer
Dim LigneACopier As Integer
Dim LigneDest As Double
Dim FeuilleDest As String

' *********** Valeurs d'essais **********************
Année = 2007
Mois = 1
FeuilleDest = "Feuil2"

MaDate = DateSerial(Année, Mois + 1, 0)
On Error Resume Next
LigneACopier = Application.Match(MaDate * 1, [A:A], 0)
If LigneACopier <> 0 Then
Sheets(FeuilleDest).Range("A65536").End(xlUp).Offset(1).EntireRow _
= Rows(LigneACopier).EntireRow.Value
End If
End Sub

Cordialement
Trirème

Bonjour à tous

En colonne des dates (01/01/2007) triées.
En B...AS des valeurs numèriques.
Comment recupérer la ligne du dernier jour du mois de janvier par exemple
( sachant que le dernier jour n'est pas forcemment le 31) et copier cette
ligne sur feuille 2 par exemple.
Merci d'avance

Jean Berti




Jean Berti
Le #4663861
Merci à Isabelle, Philippe et cousinhb
Je vais tester et vous tiens au courant

Merci encore
Cordialement
Jean Berti

"Jean Berti"
Bonjour à tous

En colonne des dates (01/01/2007) triées.
En B...AS des valeurs numèriques.
Comment recupérer la ligne du dernier jour du mois de janvier par exemple
( sachant que le dernier jour n'est pas forcemment le 31) et copier cette
ligne sur feuille 2 par exemple.
Merci d'avance

Jean Berti



Trirème
Le #4663701

Cela fonctionne correctement sauf que pour moi les mois ne font pas tous 30
ou 31 jours.
MaDate = DateSerial(Année, Mois + 1, 0)
J'avais par JB récupéré cette formule matricielle
=MAX(SI(MOIS($A$7:$A$1000)=LIGNE();SI(ANNEE($A$7:$A$1000) 07;$A$7:$A$1000;0)))
LIGNE=1 pour Janvier
Comment l'adapter à ta macro?


Pour le coup, c'est moi qui n'ai rien compris. Je pensais que tu cherchais
les lignes correspondant à la date du dernier jour du mois alors que
visiblement tu cherches les lignes avant le passage au mois suivant.
Dans ce cas la macro de cousinhub fonctionne si tu changes :
If Day(cel) > Day(cel.Offset(1, 0)) Then cel.EntireRow.Copy _
Sheets("Feuil2").[a65000].End(xlUp).Offset(1, 0)
par :
If Month(cel) <> Month(cel.Offset(1, 0)) Then cel.EntireRow.Copy _
Sheets("Feuil2").[a65000].End(xlUp).Offset(1, 0)

En effet, la formule initiale aurait oublié la ligne du 12 avril suivie de
la ligne du 15 mai. Ce code suppose comme tu le précisais que les données
soient triées.
Dans les deux cas la dernière ligne est sélectionnée aussi, même si par la
suite tu ajoutes en dessous des données pour le même mois.

Pour le résultat de la copie, précise si tu veux garder les formules ou si
tu veux un collage des valeurs.

Cordialement,
Trirème

cousinhub
Le #4663691
Bonjour tout le monde

En effet, la formule initiale aurait oublié la ligne du 12 avril suivie de
la ligne du 15 mai.


Là, je dois dire que je ne comprends pas du tout :-



Cela fonctionne correctement sauf que pour moi les mois ne font pas tous 30
ou 31 jours.
MaDate = DateSerial(Année, Mois + 1, 0)
J'avais par JB récupéré cette formule matricielle
=MAX(SI(MOIS($A$7:$A$1000)=LIGNE();SI(ANNEE($A$7:$A$1000) 07;$A$7:$A$1000;0)))
LIGNE=1 pour Janvier
Comment l'adapter à ta macro?


Pour le coup, c'est moi qui n'ai rien compris. Je pensais que tu cherchais
les lignes correspondant à la date du dernier jour du mois alors que
visiblement tu cherches les lignes avant le passage au mois suivant.
Dans ce cas la macro de cousinhub fonctionne si tu changes :
If Day(cel) > Day(cel.Offset(1, 0)) Then cel.EntireRow.Copy _
Sheets("Feuil2").[a65000].End(xlUp).Offset(1, 0)
par :
If Month(cel) <> Month(cel.Offset(1, 0)) Then cel.EntireRow.Copy _
Sheets("Feuil2").[a65000].End(xlUp).Offset(1, 0)

En effet, la formule initiale aurait oublié la ligne du 12 avril suivie de
la ligne du 15 mai. Ce code suppose comme tu le précisais que les données
soient triées.
Dans les deux cas la dernière ligne est sélectionnée aussi, même si par la
suite tu ajoutes en dessous des données pour le même mois.

Pour le résultat de la copie, précise si tu veux garder les formules ou si
tu veux un collage des valeurs.

Cordialement,
Trirème



Publicité
Poster une réponse
Anonyme