IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Exporter des données selon une fourchette horaire


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Exporter des données selon une fourchette horaire
    Bonjour tout le monde


    Ayant un projet a rendre qui doit être fait sur VBA, j'ai un blocage sur mon code qui concerne de multiples incompatibilités (principalement de type: erreur 13).

    Mon projet consiste a sélectionner des données suivant l'heure qui est désignée par trois tranches horaires dans un fichier source (n1 et n2 pour le matin,..). Puis les copier si elles sont dans la tranche horaire concernée grâce a trois IF puis de les coller dans un autre fichier sur une feuille.

    J'ai conçu ce code mais j'ai l'impression que ça foire au niveau du sub:

    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
    Sub Brigades()
     
    Dim M As String
    Dim AM As String
    Dim N As String
    Dim nbre As String
    Dim ExportQuantitesContenants As Variant
    Dim Choix As Integer
     
    Dim n1 As Double
    Dim n2 As Variant
    Dim n3 As Variant
    Dim n4 As Variant
    Dim n5 As Variant
    Dim n6 As Variant
     
     
    nbre = Application.WorksheetFunction.CountA(Sheets("choix").Range("2:80"))
     
    n1 = MsgBox("05:30", "Matin", "")
    n2 = MsgBox("13:30", "Matin", "")
    n3 = MsgBox("13:31", "AM", "")
    n4 = MsgBox("20:30", "AM", "")
    n5 = MsgBox("22.15", "Nuit", "")
    n6 = MsgBox("06:15", "Nuit", "")
     
     
    M = ActiveSheet("Matin").Value
    AM = Worksheets("AM").Value
    N = Worksheets("Nuit").Value
     
    ActiveSheet:  Activate
    Worksheets: Activate
     
    Worksheets("Choix").Columns(A).ActiveCell.End(xlDown).Value = "M"
    If "M" >= n1 And "M" <= n2 Then
        Worksheets("Choix").Columns(A).Copy
    Else: ActiveSheet("Matin").Columns("G").Paste
     
    End If
    Si quelqu'un aurait une quelconque hypothèse pour m'aider dans mon projet

    Merci

    PS: je tiens a dire que j'ai cherché dans les anciens sujets mais les formules sont difficiles a re-traiter pour ma situation, étant encore novice.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Il y a tellement d'incohérences dans ton code que je ne sais pas par où commencer.
    On dirait que tu as mis pèle-mèle des éléments trouvés ici et là sans chercher à savoir à quoi ils correspondaient.

    Donc premier conseil : revois les bases http://bidou.developpez.com/article/VBA/

    Dans tes déclarations (Dim), tu déclares des variables qui ne sont pas utilisées dans ton code.

    Tu déclares n1 comme Double et les autres nx comme Variant alors qu'ils semblent avoir la même fonction.

    Ces 6 variables sont renseignée mais ne sont pas ensuite utilisées.

    Idem pour la variable nbre qui est renseignée (je ne parviens d'ailleurs pas à comprendre ce que tu calcules comme valeur) qui n'est pas utilisée dans la suite du code.

    Tu renseignes les variables nx avec des MsgBox alors que tu dis dans ton énoncé que ces valeurs sont à tirer de la feuille de calcul.
    Les paramètres des MsgBox sont d'ailleurs complètement incohérents. Par exemple le second argument doit définir les types de boutons, c'est une valeur numérique et ça ne peut pas être un String.
    Je me demande si tu as pris la peine de te renseigner sur ce qu'est cette fonction.

    ActiveSheet ne peut pas avoir d'indice. Cet objet désigne la feuille active (comme son nom l'indique), on ne peut donc pas lui assigner un nom.

    Une Worksheet ne peut pas avoir de membre Value. Une feuille de calcul n'a pas de valeur en elle-même, ce sont ses cellules qui contiennent des valeurs.

    La méthode Activate doit être reliée à son parent par un ".".
    Le ":" sert à séparer deux instructions sur la même ligne.

    Worksheets en tant que collection ne peut pas être Activée. On ne peut activer qu'une feuille à la fois.

    Tu définis l'indice de colonne comme A. Sans guillemets, VBE traduit cette lettre comme une variable. Comme elle n'est ni définie, ni renseignée, il interprète ça (au mieux) comme un 0, ce qui est un indice impossible pour une colonne.

    Tu fais une inégalité > sur une chaine de caractère "M" ce qui n'a pas de sens.
    Tout comme n'a pas de sens de comparer un caractère ("M") et une variable numérique (n1).

    Tu mets le Copy dans le Then de la structure If et le Paste dans le Else, ce qui veut dire qu'ils ont aucune chance de s'enchainer.
    Donc tu fais soit un copier sans coller, soit un coller sans copier.


    Ca, ce sont juste les erreurs de syntaxe.
    Mais sur le fond, il est évident que ce code n'a été construit sur aucun algorithme et qu'il est totalement incohérent.


    Voilà mes "hypothèses" pour t'aider sur ce projet.
    Il semble évident qu'il est nécessaire de tout reprendre à 0, à commencer, comme je l'ai dit au début de ce message, par l'apprentissage des bases.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo