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 :

Bouger plusieurs images en même temps


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 27
    Par défaut
    Bonjour à tous,
    étant novice en VBA je viens vers vous afin de demander de l'aide.
    Je suis entrain (d'essayer) de réaliser une carte avec des aéronefs qui évoluent dessus.
    N'ayant pas encore conscience qu'excel ne pouvait gérer plusieurs macro simultanément j'ai donc réaliser plusieurs modules et tout content ai essayé de faire fonctionner le tout. Échec. Une macro par une macro. Y aurait-il une solution afin de pouvoir soit faire fonctionner les modules simultanément soit de compiler les modules pour n'en faire qu'un seul ? Si il n'y a aucun moyen de faire fonctionner les modules ensembles il faudra donc que je repense mon projet différemment. Le but ultime final (countdown) de la mort qui tue serait que tel avion partent à une heure dite tout en faisant évoluer les autres de la même manière.
    Pardon pour les GoTo dans mon code pas taper pas taper. Si jamais vous optimisez les modules merci de m'expliquer le pourquoi du comment afin que je puisse le reproduire seul ! oui je pense aux GoTo qui vont en embêter plus d'un, mais sur le moment je ne voyais pas comment faire plus simple.
    Merci d'avance !

    Oups je n'avais pas vu pour le fichier joint, si jamais il faut absolument l'enlever je l’enlève
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    le déplacement d'un objet graphique devant être temporisé au centième de seconde
    afin de laisser l’œil humain s'apercevoir d'un déplacement relatif dans l'espace de la fenêtre de la feuille de calculs,
    rien n'empêche alors de déplacer plusieurs objets en même temps dans le même centième …


    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre averti
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 27
    Par défaut
    Bonsoir.
    Oui en effet ceci paraît parfaitement logique. Cependant comme précisé en haut de ma requête je suis novice. Avez vous regardé mon ébauche pour savoir de quoi retourne la question précisement ?
    Merci de votre aide.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Avez vous regardé mon ébauche pour savoir de quoi retourne la question précisement ?
    Pas moi, en tout état de cause (et je ne prendrai jamais ce risque). Lis la deuxième phrase de ma signature.
    Il t'appartient d'isoler et d'exposer techniquement, accompagnée du code tenté pour la résoudre, la difficulté rencontrée

  5. #5
    Membre averti
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 27
    Par défaut
    Bonjour ! voici le code en question
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    Sub Transal1()
    '
    ' Transal1 Macro
    '
    ville_dep = Application.InputBox("Ville de départ ?", Type:=2)
    Sheets("Tableau").Range("A1").Value = ville_dep
    ville_arr = Application.InputBox("Ville d'arrivée ?", Type:=2)
    Sheets("Tableau").Range("A2").Value = ville_arr
     
     
        Sheets("Carte").Shapes("Image 2").Left = Sheets("Tableau").Range("B11")
        Sheets("Carte").Shapes("Image 2").Top = Sheets("Tableau").Range("C11")
     
        t = Sheets("Tableau").Range("D20")
     
        If Sheets("Tableau").Range("B14") < 0 Then
        GoTo negat
        Else
        If Sheets("Tableau").Range("C14") < 0 Then
        GoTo negat1
        Else
                secondes = t
                j = 1
                k = Sheets("Tableau").Range("B17")
            For i = 1 To Sheets("Tableau").Range("B14")
                timer_avant = Timer
                    Do While Timer < timer_avant + secondes
                    DoEvents
                    Loop
                    Sheets("Carte").Shapes("Image 2").Left = Sheets("Tableau").Range("B11") - i
                    Sheets("Carte").Shapes("Image 2").Top = Sheets("Tableau").Range("C11") - j
                    j = j + k
     
           Next
          GoTo fin
    '---------------------------------------------------------------------------------
    negat:
     
            If Sheets("Tableau").Range("C14") < 0 Then
            GoTo negat2
            Else
            secondes = t
            ActiveSheet.Shapes.Range(Array("Picture 2")).Select
            Selection.ShapeRange.Flip msoFlipHorizontal
            j = 1
            k = Sheets("Tableau").Range("B17")
            For i = 1 To Sheets("Tableau").Range("B15")
                timer_avant = Timer
                    Do While Timer < timer_avant + secondes
                    DoEvents
                    Loop
                    Sheets("Carte").Shapes("Image 2").Left = Sheets("Tableau").Range("B11") + i
                    Sheets("Carte").Shapes("Image 2").Top = Sheets("Tableau").Range("C11") - j
                    j = j + k
            Next
     
            GoTo fin
            End If
          End If
        End If
    '-------------------------------------------------------------------------------------
    negat1:
     
            If Sheets("Tableau").Range("B14") < 0 Then
            GoTo negat2
            Else
            secondes = t
            j = 1
            k = Sheets("Tableau").Range("B17")
            For i = 1 To Sheets("Tableau").Range("B15")
                timer_avant = Timer
                    Do While Timer < timer_avant + secondes
                    DoEvents
                    Loop
                    Sheets("Carte").Shapes("Image 2").Left = Sheets("Tableau").Range("B11") - i
                    Sheets("Carte").Shapes("Image 2").Top = Sheets("Tableau").Range("C11") + j
                    j = j + k
            Next
            End If
            GoTo fin
    '-----------------------------------------------------------------------------------------
    negat2:
            secondes = t
            ActiveSheet.Shapes.Range(Array("Picture 2")).Select
            Selection.ShapeRange.Flip msoFlipHorizontal
            j = 1
            k = Sheets("Tableau").Range("B17")
            For i = 1 To Sheets("Tableau").Range("B15")
                timer_avant = Timer
                    Do While Timer < timer_avant + secondes
                    DoEvents
                    Loop
                    Sheets("Carte").Shapes("Image 2").Left = Sheets("Tableau").Range("B11") + i
                    Sheets("Carte").Shapes("Image 2").Top = Sheets("Tableau").Range("C11") + j
                    j = j + k
            Next
            GoTo fin
     
     
    fin:
    End Sub
     
    Naïvement j'avais écris ce code 4 fois pour faire bouger les 4 images. Mais ça c'était avant d'apprendre qu'excel ne pouvait gérer qu'une macro à la fois.
    Nom : tableau.png
Affichages : 860
Taille : 146,9 Ko
    Nom : carte.png
Affichages : 845
Taille : 780,4 Ko
    Merci à ceux qui pourront aider.

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    "petites" choses qui devraient de conduire à tout reconsidérer :
    1) le déplacement d'un point (x0,y0) à un point (x1,y1) nécessite :
    -- l'établissement de l'équation linéaire (de type y = ax + b) de la droite passant par (x0,y0) et (x1,y1),
    -- puis de l'évolution point par point dans cette équation.
    Je ne vois rien de semblable (qui relève de l'algèbre) dans ton code.
    2) tes boucles while avec la fonction Timer sont à proscrire --->>
    ---- elles font souffrir le processeur
    ---- une boucle de cette nature "mobilise" et ne permet donc pas une seconde boucle de l'espèce pendant la durée de la première.

    Première recommandation : ouvrir ton aide interne VBA et commencer par t'intéresser de très près à l'utilisation de Application.Ontine (rubrique Application.OnTime, méthode de ton aide interne VBA). Il y a mieux à faire (en utilisant des fonctions de l'Api de Windows), mais dans un premier temps, le débutant que tu es manifestement devrait à mon sens débuter et le faire donc sur la seule base de ce que lui offre son outil (VBA) de développement.

    Bonne lecture, bonne étude et bon courage

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Avec ou sans forum, la méthode préconisée par unparia est la seule valide à mon sens, et on nous l'apprend depuis qu'on est tout petit: Mettre un pied devant l'autre.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre averti
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 27
    Par défaut
    Super merci beaucoup ! je vais suivre tes instructions, je n'avais pas vu le problème sous cet angle. Un grand merci unparia, et bien sur à tout ceux qui ont contribué! je code et je viens poster mon essais

  9. #9
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    En considérant le problème autrement avec comme données (pour chaque aéronef): un point de départ (Xi, Yi), un point d'arrivée (Xf, Yf), un temps de départ ti, une vitesse de vol constante V on peux déduire la position de l’aéronef (Xt, Yt) à l'instant t par: Xt=Xi+V.(t-Ti).Cos(phi) et Yt=Yi+V.(t-ti).Sin(Phi). Avec Tan(Phi)=(Yf-Yi)/(Xf-Xi).

    Si c'est pour la pédagogie qui ne prend pas en compte l'évolution en temps réel sur la journée, une simple boucle permet de "photographier" la position des différents aéronefs sur chaque pas de temps.

    Tant que NonArrivé
    Calcul de la position des aéronefs
    Affiche la position des aéronefs à l'instant i
    i=i+1
    Loop
    Exemple à titre pédagogique

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Salut mercatog !

    Oui que ce soit via un pas ou par calcul de position temporelle   une simple boucle suffit …

    Si les objets ont les mêmes principes - le cas de nos démonstrations - leurs caractéristiques peuvent être chargées
    dans une variable tableau utilisée alors dans une seconde boucle interne à la principale, avant DoEvents,
    afin d'éviter une redondance d'instructions pour chaque objet …

  11. #11
    Membre averti
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 27
    Par défaut
    Salut Mercatog.
    Je n'avais envisagé cela comme tu l'as fait. Mais c'est exactement ça le but de mon résultat final


    merci Marc pour l'indication de la variable tableau je creuse de ce côté comme tu me l'as suggéré

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/05/2016, 04h28
  2. Upload de plusieurs images en même temps
    Par cedrus dans le forum Langage
    Réponses: 5
    Dernier message: 17/03/2014, 12h13
  3. [Upload] Télécharger plusieurs images en même temps
    Par tarzanjane dans le forum Langage
    Réponses: 3
    Dernier message: 14/04/2009, 12h32
  4. télécharger plusieurs images en même temps
    Par batama dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 27/04/2006, 15h24
  5. Réponses: 9
    Dernier message: 17/04/2004, 16h32

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