Hello!
Je bloque actuellement sur un petit programme en VBA.
J'ai créé des fichiers qui sont alimentés tous les jours par des utilisateurs qui renseignent ligne par ligne des informations. La première colonne contient des dates qui sont dans l'ordre. Mais il arrive que certains jours, des fichiers ne soient pas renseignés. Nous pouvons donc avoir plusieurs lignes de suite avec les dates 21/10/2007, puis 22/10/2007, puis ensuite 24/10/2007
J'ai un autre fichier qui rassemble toutes les lignes renseignées par mes collègues. Je souhaite faire une récupération automatique pendant la nuit sur les fichiers de mes collègues. On clique sur un bouton qui ouvre un formulaire. On remplit la date de début de récupération, et la date de fin, puis l'heure à laquelle on souhaite que le fichier opère.
Mon programme fonctionne mais si je mets certaines dates, ça ne fonctionne plus. Mon problème est dans la sélection des cellules.
Je me suis inspiré de ce que j'ai pu voir sur ce site pour faire ce code, mais ça fonctionne que dans certaines conditions.
Imaginons que dans le fichier que je souhaite copier, les données vont du 17/10/2007 au 21/10/2007, si je rentre dans mon formulaire date début: 05/10/2007 et date fin 10/10/2007, alors ça plante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 Sub RecupDonnées() Dim Plage As Range, NoLigne As Long, NoCol As Integer, Adres, Valeur Dim NoLigne2 As Long, NoCol2 As Integer, Adres2, Valeur2 Range("A2:Q65536").Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal Set Plage = Range("A3:A" & Range("A65536").End(xlUp).Row) For Each Cell In Plage If Cell >= vDateDébut Then NoLigne = Cell.Row NoCol = Cell.Column Adres = "A" & NoLigne Exit For Exit Sub End If If Cell > vDateFin Then Exit For Exit Sub End If If Cell < vDateDébut Then NoLigne = Cell.Row NoCol = Cell.Column Adres = "A" & NoLigne + 1 Valeur = Cell End If Next For Each Cell In Plage If Cell <= vDateFin Then NoLigne2 = Cell.Row NoCol2 = Cell.Column Adres2 = "Q" & NoLigne2 Valeur2 = Cell End If Next Range(Adres, Adres2).Select 'Range(Adres, Adres2).Copy 'Windows("consolidé.xls").Activate '[B4].Select 'Selection.End(xlDown).Select 'ActiveCell.Offset(1, 0).Select 'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'Else 'Exit Sub ' End If End Sub
Je suis sûr qu'il y a un moyen plus simple et plus rapide de faire cette sélection...
Merci d'avance pour votre aide!
Partager