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

[Résolu]
Signaler
Messages postés
32
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
29 avril 2005
-
Messages postés
91
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
16 mars 2005
-
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

Messages postés
14823
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
9 octobre 2021
156
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
402
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
7 juin 2009
5
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
14823
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
9 octobre 2021
156
G sais pas si "9:00" est entre "8:00" et "11h59" tu compare des strings, compare plutot des As Date....

NH
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
32
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
29 avril 2005

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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
402
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
7 juin 2009
5
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
32
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
29 avril 2005

ok ça marche impeccablement bien.
merci beaucoup vous m'avez bien aidé surtout toi, mrdep1978.
encore merci.
@+, Cédric
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
32
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
29 avril 2005

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.
Messages postés
32
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
29 avril 2005

ok ça marche impeccablement bien.
merci beaucoup vous m'avez bien aidé surtout toi, mrdep1978.
encore merci.
@+, Cédric
Messages postés
91
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
16 mars 2005

Slt sobeit,

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

merci d'avance
Messages postés
32
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
29 avril 2005

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, @+.
Messages postés
91
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
16 mars 2005

Ok merci bien!