Probléme de copie de données entre tableau sous VBA excel

Résolu
sobeit1 Messages postés 32 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 29 avril 2005 - 1 févr. 2005 à 10:57
adn28 Messages postés 91 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 16 mars 2005 - 16 févr. 2005 à 16:48
Salut, j'ai créé un programme sur VBA excel qui, en fonction d'un tableau feuil 3, réécrit des infos dans un second tableau feuil 2.
Certains données y sont écrite correctement mais d'autres, notament celles qui sont comprise de 8h à midi, sont totalement ignorées.
si qlqu'un peut m'aider à comprendre merci.

Dim h, l As Integer
Dim vard5, vard6, vard7 As Date
Dim var1, var2 As String


Sheets("feuil3").Select


For h = 2 To 20
Sheets("feuil3").Select
vard5 = Range("feuil3!b" & h).Value
vard6 = Range("feuil3!c" & h).Value
vard7 = Range("feuil3!d" & h).Value

'selection du jour et création de variable pour le début de semaine


Dim HeureArr, HeureDep As Date


jour = Format$(vard5, "dddd")
HeureArr = Format$(vard6, "hh:mm")
HeureDep = Format$(vard7, "hh:mm")

'Si la salle est identique dans les 2 tableaux alors copie des valeurs
For l = 2 To 30
var1 = Range("feuil2!b" & l).Value
var2 = Range("feuil3!i" & h).Value
If var1 = var2 Then

Select Case jour

Case "lundi"
Select Case HeureArr
Case "7:59" To "11:59"
Range("feuil2!c" & l) = Range("feuil3!g" & h)
Select Case HeureDep
Case "12:01" To "18:00"
Range("feuil2!d" & l) = Range("feuil3!g" & h)
Case "18:01" To "21:00"
Range("feuil2!e" & l) = Range("feuil3!g" & h)
End Select
Case "12:00" To "17:59"
Range("feuil2!d" & l) = Range("feuil3!g" & h)
Select Case HeureDep
Case "18:01" To "21:00"
Range("feuil2!e" & l) = Range("feuil3!g" & h)
End Select
Case "18:00" To "21:00"
Range("feuil2!e" & l) = Range("feuil3!g" & h)
End Select


Case "mardi"
Select Case HeureArr
Case "8:00" To "11:59"
Range("feuil2!f" & l) = Range("feuil3!g" & h)
Select Case HeureDep
Case "12:01" To "18:00"
Range("feuil2!g" & l) = Range("feuil3!g" & h)
Case "18:01" To "21:00"
Range("feuil2!g" & l) = Range("feuil3!g" & h)
Range("feuil2!h" & l) = Range("feuil3!g" & h)
End Select
Case "12:00" To "17:59"
Range("feuil2!g" & l) = Range("feuil3!g" & h)
Select Case HeureDep
Case "18:01" To "21:00"
Range("feuil2!h" & l) = Range("feuil3!g" & h)
End Select
Case "18:00" To "21:00"
Range("feuil2!h" & l) = Range("feuil3!g" & h)
End Select

Case "mercredi"
Select Case HeureArr
Case "8:00" To "11:59"
Range("feuil2!i" & l) = Range("feuil3!g" & h)
Select Case HeureDep
Case "12:01" To "18:00"
Range("feuil2!j" & l) = Range("feuil3!g" & h)
Case "18:01" To "21:00"
Range("feuil2!j" & l) = Range("feuil3!g" & h)
Range("feuil2!k" & l) = Range("feuil3!g" & h)
End Select
Case "12:00" To "17:59"
Range("feuil2!j" & l) = Range("feuil3!g" & h)
Select Case HeureDep
Case "18:01" To "21:00"
Range("feuil2!k" & l) = Range("feuil3!g" & h)
End Select
Case "18:00" To "21:00"
Range("feuil2!k" & l) = Range("feuil3!g" & h)
End Select

Case "jeudi"
Select Case HeureArr
Case "8:00" To "11:59"
Range("feuil2!l" & l) = Range("feuil3!g" & h)
Select Case HeureDep
Case "12:01" To "18:00"
Range("feuil2!m" & l) = Range("feuil3!g" & h)
Case "18:01" To "21:00"
Range("feuil2!m" & l) = Range("feuil3!g" & h)
Range("feuil2!n" & l) = Range("feuil3!g" & h)
End Select
Case "12:00" To "17:59"
Range("feuil2!m" & l) = Range("feuil3!g" & h)
Select Case HeureDep
Case "18:01" To "21:00"
Range("feuil2!n" & l) = Range("feuil3!g" & h)
End Select
Case "18:00" To "21:00"
Range("feuil2!n" & l) = Range("feuil3!g" & h)
End Select

Case "vendredi"
Select Case heure
Case "8:00" To "11:59"
Range("feuil2!o" & l) = Range("feuil3!g" & h)
Select Case HeureDep
Case "12:01" To "18:00"
Range("feuil2!p" & l) = Range("feuil3!g" & h)
Case "18:01" To "21:00"
Range("feuil2!p" & l) = Range("feuil3!g" & h)
Range("feuil2!q" & l) = Range("feuil3!g" & h)
End Select
Case "12:00" To "17:59"
Range("feuil2!p" & l) = Range("feuil3!g" & h)
Select Case HeureDep
Case "18:01" To "21:00"
Range("feuil2!q" & l) = Range("feuil3!g" & h)
End Select
Case "18:00" To "21:00"
Range("feuil2!q" & l) = Range("feuil3!g" & h)
End Select

Case "else"
MsgBox "La date indiquée tombe un Week-end" & Chr(10) & "veuillez modifier" & Chr(10) & "Merci"
Exit Sub

End Select
Sheets("feuil2").Select
h = h
End If
Next l
Next h
....

11 réponses

NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
1 févr. 2005 à 13:11
Les select case imbriqués c'est pa top.

G pa trop compris le code suivant

Case "8:00" To "11:59"

Range("feuil2!f" & l) = Range("feuil3!g" & h)

Select Case HeureDep

Case "12:01" To "18:00"

Range("feuil2!g" & l) = Range("feuil3!g" & h)

Case "18:01" To "21:00"

Range("feuil2!g" & l) = Range("feuil3!g" & h)

Range("feuil2!h" & l) = Range("feuil3!g" & h)

End Select

Si l'heure est comprise entre 8h et 11h59, elle ne peut pas etre comprise entre 12h01 et 18h00 !!!!!






NH
3
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 6
1 févr. 2005 à 15:06
Case "vendredi"
Select Case heure
Case "8:00" To "11:59"
Range("feuil2!o" & l) = Range("feuil3!g" & h)

Au lieu de heure, ce ne serait pas HeureArr ?

Tu devrais mettre un Option Explicit en haut du module, afin d'obliger la déclaration des variables, ce qui éviterait ce genre d'erreurs.

De plus il y a un petit pb dans la déclaration de tes variables. En faisant ceci :
Dim h, l As Integer
Dim vard5, vard6, vard7 As Date
Dim var1, var2 As String
la seule variable définie en tant qu'Integer est l, la seule en Date est vard7 et la seule en String () est var2. Toutes les autres adoptent le type Variant (c'est à dire un type dans lequel tu peux stocker tout et n'importe quoi)
Il faut les déclarer comme ceci :
Dim h As Integer, l As Integer
Dim vard5 As Date, vard6 As Date, vard7 As Date
Dim var1 As String, var2 As String
3
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
1 févr. 2005 à 16:11
G sais pas si "9:00" est entre "8:00" et "11h59" tu compare des strings, compare plutot des As Date....

NH
3
sobeit1 Messages postés 32 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 29 avril 2005
2 févr. 2005 à 09:10
je comprends bien mais il faut bien comprendre que ce systéme marche pour l'aprés midi et le soir.
"14:00" est bien compris entre "13:00" et "18:00" alors pourquoi ça ne marcherait pas pour "9:00" compris entre "8:00" et "12:00"????
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 6
2 févr. 2005 à 09:49
Parce qu'en alphanumérique, il trie et compare caractère par caractère.
"8:00" : 1e caractère : 8
"9:00" : 1e caractère : 9
"12:00" : 1e caractère : 1
> 1< 8 < 9 > "12:00" < "8:00" < "9:00"
CQFD
Dans ces cas là, j'ai plutôt tendance à prendre des Integer.
HeureArr = CInt(Format$(vard6, "hhmm"))
HeureDep = CInt(Format$(vard7, "hhmm"))

Et ensuite :
Select Case HeureArr
Case 800 To 1159
Range("feuil2!l" & l) = Range("feuil3!g" & h)
Select Case HeureDep
Case 1201 To 1800
Range("feuil2!m" & l) = Range("feuil3!g" & h)
Case 1801 To 2100
Range("feuil2!m" & l) = Range("feuil3!g" & h)
Range("feuil2!n" & l) = Range("feuil3!g" & h)
End Select
Case 1200 To 1759
Range("feuil2!m" & l) = Range("feuil3!g" & h)
Select Case HeureDep
Case 1801 To 2100
Range("feuil2!n" & l) = Range("feuil3!g" & h)
End Select
Case 1800 To 2100
Range("feuil2!n" & l) = Range("feuil3!g" & h)
End Select
3
sobeit1 Messages postés 32 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 29 avril 2005
2 févr. 2005 à 14:49
ok ça marche impeccablement bien.
merci beaucoup vous m'avez bien aidé surtout toi, mrdep1978.
encore merci.
@+, Cédric
3
sobeit1 Messages postés 32 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 29 avril 2005
1 févr. 2005 à 15:44
Merci mais ça ne change pas grand chose à la donne, ça ne marche tjrs pas.

Pour Nhenry, il y a en faite 2 périodes: l'une concerne "l'arrivée" de la personne
l'autre le départ
mon programme doit controler si la personne arrive le matin et ne repart que le soir (par exemple), si elle est présente toute la journnée alors j'écris dans un tableau son nom pour le matin l'aprés-midi et le soir, mais si elle ne vient que de 18h30 à 19h30, je ne l'inscris que dans le soir.

Le véritable probléme du programme c'est que chez moi, si la personne arrive de 8H à 12H, je n'arrive rien à inscrire, ni le matin, ni l'aprés midi, ni même le soir.

Je ne sais pas d'où vient le probléme.

ps: merci pour le select case heure, c'est parce que j'ai essayé 2, 3 truc avant de venir pleurer sur le site. Merci bcp. Toutefois je ne sais pas ce que c'est qu'un option Explicit.
0
sobeit1 Messages postés 32 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 29 avril 2005
2 févr. 2005 à 14:49
ok ça marche impeccablement bien.
merci beaucoup vous m'avez bien aidé surtout toi, mrdep1978.
encore merci.
@+, Cédric
0
adn28 Messages postés 91 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 16 mars 2005
15 févr. 2005 à 13:49
Slt sobeit,

je voudrais savoir comment faire le lien entre excel et vba ?

merci d'avance
0
sobeit1 Messages postés 32 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 29 avril 2005
16 févr. 2005 à 12:33
salut,
tu aimerais savoir comment faire le lien entre excel et VBA,
en faite, il y a plusieur moyen, une fois que tu es dans excel et que tu as lancé VBA par le menu outil/macros/visual basic editor
tu saisie tes codes VBA directement dans les feuilles (en haut à gauche das vba), en définissant une fonction sub du style :
sub feuil1_open()
...code...
end sub
de la même façon, tu peux le faire à l'ouverture du fichier en inserant ton code sous thisworkbook
sub thisworkbook_open()
....code...
end sub
ou tu peux créer un userform, pratique si tu veux inserrer les données dans ton code comme une date ou un nom quelconque.
le seul truc c'est que si tu veux qu'il se lance à l'ouverture du dossier excel
tu dois inscrire dans thisworkbook la commande:
sub thisworkbook_open()
userform.show
end sub
Tu dois aussi terminer ton programme par unload.me
si je n'ai pas su répondre à ta question dsl, mais ta question est un peu vague....
Repose la moi en étant un peu plus précis si tu n'y arrive pas.
Bon courage, @+.
0
adn28 Messages postés 91 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 16 mars 2005
16 févr. 2005 à 16:48
Ok merci bien!
0