XL 2016 Séléction des lignes

eila

XLDnaute Nouveau
heyy .. j'espère que vous allez bien et en bonne santé
As usual, j'ai rencontré des problèmes quant j'ai essayé de copier des ligne (dont la date en comprise entre la date de début et la date de fin choisies dans la feuille 'synthèse') de la feuille 'recap' à la feuille 'données de synthèse' à l'aide du macro 'mettre à jour les diagrammes'.
Pouvez vous m'aider svp ?
J'ai essayé avec le syntaxe suivant mais en vain:
Dim f As Worksheet
Dim R As Worksheet
Set f = Worksheets("Synthèse")

Date_debut = f.Range("e7").Value
Date_fin = f.Range("g8").Value
Set R = Worksheets("Données de synthèse")
LigRecap = Application.WorksheetFunction.CountA(Range("A1:A10000")) + 1 ' +1 car 2 et 3 fusionnées
For ligne = 4 To LigRecap
If Range("B" & n) >= Date_debut Or Range("B" & n) <= Date_fin Then
Sheets("Recap").Select
Range("BP" & ligne & ":" & "CI" & ligne).Select
Selection.Copy
R.Paste
End If
 

Pièces jointes

  • test1.xlsm
    65.2 KB · Affichages: 18

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Eila, bonsoir le forum,

Beaucoup d'incohérences dans ton fichier. À commercer par une date de fin antérieure à celle de début ?!... Puis, dans le code, tu définis la date de fin dans la cellule G8 au lieu de G7 !?... Ensuite, tu utilise une variable ligne qui subitement se transforme en n. Et, d'autres que j'oublie...
Bref, un beau bo***l ! Ton code modifié et fonctionnel :

VB:
Private Sub CommandButton1_Click()
Dim S As Worksheet 'onglet Synthèse
Dim R As Worksheet 'onglet Recal
Dim DS As Worksheet 'onglet Données de synthèse
Dim DD As Long 'Date de Début (en entier long)
Dim DF As Long 'Date de Fin (en entier long)
Dim DR As Long 'Date de Référence (en entier long)
Dim DL As Integer 'Dernière Ligne
Dim I As Integer 'Incrément
Dim PLV As Integer 'Première Ligne Vide

Set S = Worksheets("Synthèse")
Set R = Worksheets("Recap")
Set DS = Worksheets("Données de synthèse")
DD = CLng(DateSerial(Year(S.Range("E7").Value), Month(S.Range("E7").Value), Day(S.Range("E7").Value)))
DF = CLng(DateSerial(Year(S.Range("G7").Value), Month(S.Range("G7").Value), Day(S.Range("G7").Value)))
DL = R.Cells(Application.Rows.Count, "B").End(xlUp).Row
For I = 4 To DL
    DR = CLng(DateSerial(Year(R.Range("B" & I).Value), Month(R.Range("B" & I).Value), Day(R.Range("B" & I).Value)))
    If DR >= DD And DR <= DF Then 'pas Or mais And si tu veux que la date soit comprise
        PLV = DS.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1
        R.Range(R.Cells(I, "BN"), R.Cells(I, "CG")).Copy
        DS.Cells(PLV, "A").PasteSpecial (xlPasteValues)
    End If
Next I
End Sub
 

eila

XLDnaute Nouveau
Merci beaucoup Robert :)
Je m'excuse pour les bêtises c'est parce que j'ai essayé trop de chose et j'étais pas concentrée à la fin de journée.
Si ça ne vous dérange pas je voudrais juste savoir pourquoi le contenu de cellule de 00:23 chage à 0,01597222 lors de copiage ??
Merci d'avance pour votre retour
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

•>Robert
Je me permets cette question: Why? ;)
(parce qu'il y a un truc que je pige pas)
VB:
Sub Tests()
Dim testA&, testB&
[E7] = Date
testA = CLng(DateSerial(Year(Range("E7").Value), Month(Range("E7").Value), Day(Range("E7").Value)))
MsgBox testA
testB = CLng([E7])
MsgBox testB
End Sub
NB: Je n'ai pas ouvert les PJ, mais si E7 contient une date pourquoi tu te compliques la tâche? (ou alors j'ai raté un truc)

Sur ce, bonnes fêtes de Pâques (à ceux qui les fêtent et aux autres ;))
 

jmfmarques

XLDnaute Accro
Bonjour à tous
Je plussoie la remarque on ne peut plus justifiée de Staple1600, que je salue
Et ce : d'autant que si l'on utilise dateserial, c'est que la cellule E7 contient une date (sine qua non).
juste un petit mot pascal à toi, staple : tu n'utilises jamais la propriété Value2 d'un objet range ? ;)
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Heu... Je répondrais bien : passequeu !.... Car vous me les cassez un peu... Mais je vais m'expliquer.
J'ai tellement perdu de temps dans différents fils à cause d'une date dans un format ici dans un autre là voire même en texte que je bétonne pour éviter d'y revenir.
Ça vous va ?
Mais il est clair que vous avez raison et qu'un simple CDate(Range("E7").Value) eût pu suffire... Ça je le fait sur mes fichiers à moi...
 

Discussions similaires

Réponses
7
Affichages
464
Réponses
11
Affichages
642

Statistiques des forums

Discussions
314 022
Messages
2 104 734
Membres
109 116
dernier inscrit
RALAIZANAKA