Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Copier_VBA

18 réponses
Avatar
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

10 réponses

1 2
Avatar
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




Avatar
Philippe.R
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" a écrit dans le message de
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



Avatar
Philippe.R
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" a écrit dans le message de
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



Avatar
isabelle
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





Avatar
cousinhub
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




Avatar
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




Avatar
Jean Berti
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" a écrit dans le message de news:

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




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

Merci encore
Cordialement
Jean Berti

"Jean Berti" a écrit dans le message de 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



Avatar
Trirè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?


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

Avatar
cousinhub
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



1 2