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

  1. #1
    Nouveau Candidat au Club
    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 : 38
    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
    Points : 0
    Points
    0
    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 sénior
    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
    Points : 18 677
    Points
    18 677
    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, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Nouveau Candidat au Club
    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 : 38
    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
    Points : 0
    Points
    0
    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
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    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
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Nouveau Candidat au Club
    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 : 38
    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
    Points : 0
    Points
    0
    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 : 772
Taille : 146,9 Ko
    Nom : carte.png
Affichages : 760
Taille : 780,4 Ko
    Merci à ceux qui pourront aider.

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    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
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Nouveau Candidat au Club
    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 : 38
    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
    Points : 0
    Points
    0
    Par défaut
    Super merci beaucoup pour tes précisions utiles. Aurais-tu un exemple de code avec cette fonction ontime ? Que je puisse comprendre avec un exemple en application?

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Aurais-tu un exemple de code avec cette fonction ontime
    tu en trouveras beaucoup sur ce forum (qui dispose d'un moteur de recherche à utiliser sans parcimonie). Mot clef : Ontime ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  9. #9
    Nouveau Candidat au Club
    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 : 38
    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
    Points : 0
    Points
    0
    Par défaut
    Cool, merci je reviens une fois un bout de code sorti

    Bon pas encore de code. Comment tu vois le truc avec OnTime? j'ai bien compris que je pouvais exécuter des actions à une heure précise cependant je ne vois pas comment faire bouger les images simultanément de part mon code plutôt mauvais.

  10. #10
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut




    Sinon bouger les objets dans la même itération juste avant les instructions DoEvents et Next
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Nouveau Candidat au Club
    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 : 38
    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
    Points : 0
    Points
    0
    Par défaut
    La en mettant en application ce que tu m'as dis j'arrive à faire bouger un image mais je ne vois pas comment faire bouger les 4 dans le même code

    Je ne doute pas de ta capacité de compréhension loin de là. Pour être sur de bien m'être exprimé, une image ira d'un point a à un point b, et pendant ce temps les autres feront de même, avec des départs différés et des points de départ/arrivée différent. Ce qui de mon point de vue de "noob" revient à interpénétrer dans la boucle 1 pour en rajouter 3 et là bah moi je suis perdu !

  12. #12
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    Chaque objet à un vecteur de déplacement sur l'axe vertical ou / et horizontal,
    en positif ou en négatif selon le sens de la progression,
    un peu comme dans le post #3 même si dans cette démonstration sous Excel il s'agit d'une rotation …

    Squelette du code :

    Début de boucle (peu importe For, While ou Do …)
    Déplacement objet 1 (par modification de sa propriété Left ou / et de sa propriété Top).
    Déplacement objet 2 (idem ci-dessus)
    Déplacement objet 3
    Déplacement objet 4
    DoEvents
    Fin de boucle

    Ce n'est donc vraiment pas compliqué !
    N'évoquant même pas une temporisation car dans le cas de déplacement de plusieurs objets
    l'instruction DoEvents seule peut déjà suffire, la vitesse de déplacement dépendant aussi du vecteur lui-même
    comme on peut aussi le constater dans la démonstration sous Excel du post #3 …

    Évidemment si les objets n'ont pas le même nombre d'actions de déplacement il faut alors conditionner chaque déplacement;
    la sortie ou l'arrêt de la boucle devant être effectuée une fois chaque objet arrivé à destination …

    Bref de la simple logique à coucher d'abord sur papier avant d'écrire ne serait-ce la première ligne de code !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Nouveau Candidat au Club
    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 : 38
    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
    Points : 0
    Points
    0
    Par défaut
    Merci pour ton squelette. Avec mes maigres connaissances et après mon échec de la double macro j'étais donc repartit sur un code toujours aussi moisi mais avec une architecture similaire à la tienne. Les 2 images bougeaient ensemble selon 2 axes bien définis. Certes pas avec une équation comme tu me l'as suggéré. Je me suis retrouvé bloqué au moment de devoir lancer les départs un par un. Je pense donc avec tes explications que se sont les entrées sorties de boucles qui me posent problème.

  14. #14
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut




    Si déjà on pouvait voir au moins la tentative du code entrepris …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  15. #15
    Nouveau Candidat au Club
    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 : 38
    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
    Points : 0
    Points
    0
    Par défaut
    Mais est ce que je dois obligatoirement attendre qu'un objet arrive à destination pour passer à un autre départ ?

    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
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    Sub Transal1()
    '
    ' Transal1 Macro
    '
    ville_dep = Application.InputBox("Ville de départ A60 ?", Type:=2)
    Sheets("Tableau").Range("A1").Value = ville_dep
    ville_arr = Application.InputBox("Ville d'arrivée A60?", Type:=2)
    Sheets("Tableau").Range("A2").Value = ville_arr
    ville_dep1 = Application.InputBox("Ville de départ A61 ?", Type:=2)
    Sheets("Tableau").Range("B1").Value = ville_dep1
    ville_arr1 = Application.InputBox("Ville d'arrivée A61 ?", Type:=2)
    Sheets("Tableau").Range("B2").Value = ville_arr1
     
        Sheets("Carte").Shapes("Image 2").Left = Sheets("Tableau").Range("B11")
        Sheets("Carte").Shapes("Image 2").Top = Sheets("Tableau").Range("C11")
        Sheets("Carte").Shapes("Image 3").Left = Sheets("Tableau").Range("D11")
        Sheets("Carte").Shapes("Image 3").Top = Sheets("Tableau").Range("E11")
     
        t = Sheets("Tableau").Range("D20")
        t1 = Sheets("Tableau").Range("E20")
     
        If Sheets("Tableau").Range("B14") < 0 And Sheets("tableau").Range("D14") < 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
            secondes1 = t1
            j = 1
            j1 = 1
            k = Sheets("Tableau").Range("B17")
            k1 = Sheets("Tableau").Range("D17")
            For i = 1 To Sheets("Tableau").Range("B15")
                timer_avant = Timer
                ActiveSheet.Shapes.Range(Array("Picture 2")).Select
                Selection.ShapeRange.Rotate 180
                    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
                    Sheets("Carte").Shapes("Image 3").Left = Sheets("Tableau").Range("B11") + i
                    Sheets("Carte").Shapes("Image 3").Top = Sheets("Tableau").Range("C11") - j1
                    j = j + k
                    j1 = j1 + k1
            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.ThreeD.IncrementRotationX -180
            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
    à partir de la ligne 43

    Bon j'arrive à lancer une macro à une heure précise, pour cela ok avec le ontime.
    J'aurai besoin d'aide sur les sorties de boucles du coup je pense pour pouvoir faire les transitions sous conditions entre les avions.
    merci d'avance

  16. #16
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    Comme déjà proposé, il y a besoin d'une seule et unique boucle servant à la répétition des itérations,
    c'est à dire aux déplacements !   Sinon je ne te suis pas et dans ce cas, vaudrait mieux exposer ta logique …

    C'est globalement niveau débutant :   avancer du départ jusqu'à l'arrivée !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  17. #17
    Nouveau Candidat au Club
    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 : 38
    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
    Points : 0
    Points
    0
    Par défaut
    je suis entrain de réécrire le code en suivant vos instructions. Après si je ne suis pas assez clair dites le moi je rééxplique

    Qu'avez vous compris d'ailleurs ? ça permettra de voir si c 'est bien ce que je tente de vous expliquer et demander
    edit : une seule boucle ?? comment j’incrémente i pour 4 avions en une seule boucle ?

  18. #18
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    ça permettra de voir si c 'est bien ce que je tente de vous expliquer et demander
    Tu juges de la qualité de ta question à son efficacité ?
    Ah !
    Tu as ensuite l'intention de la "rectifier" et compléter comment, ta question, pour qu'elle soit compréhensible et ne laisse aucun doute ?
    Fais-le donc directement : expose sans laisser de doute. Cela permettre d'éviter le genre :
    " et si je le dis ainsi, vous comprenez ?"
    Non ?
    " et si je le dis ainsi,, maintenant, vous comprenez ?"
    Etc .... etc ...
    Si les choses sont claires, elle peuvent être exprimées d'emblée clairement et techniquement, sans nécessité de tels "échanges" ...
    Y parviendras-tu ? -->> tu es bien le seul à pouvoir en juger ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  19. #19
    Nouveau Candidat au Club
    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 : 38
    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
    Points : 0
    Points
    0
    Par défaut
    Pour moi la demande est claire. Il faudrait que les 4 avions progressent simultanément selon leurs heures de décollage / atterrissage et en fonction de leurs destinations. j'arrive à le faire pour un mais pas pour 4 du fait que je ne savais pas qu'excel ne pouvait gérer qu'une macro à la fois.

  20. #20
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    Effectivement peut-être ai-je mal compris !
    S'il s'agit juste d'une animation, mon squelette est suffisant (déjà pour s'entraîner).

    Si par contre il s'agit de positionner un avion en temps réel par rapport à l'heure système,
    là c'est plutôt du côté de la voie présentée par unparia (salut !) avec l'instruction OnTime

    Dans le cas d'une animation selon une plage horaire du premier décollage au dernier atterrissage
    mon squelette est valable, il suffit pour chaque vol de comparer avec l'heure de la boucle
    afin de décider d'une action ou pas …

    Autre démonstration niveau débutant pour s'entrainer juste avec le squelette :


    Commencer juste à coder un seul objet, c'est plus facile pour comprendre le mécanisme du déplacement,
    selon la position de départ le sens du déplacement n'est donc pas le même.
    La rotation est un plus pour agrémenter l'animation mais est accessoire dans ce mécanisme de déplacement …

    Une fois le code réussi pour le premier objet, créer le deuxième objet à l'opposé du premier
    puis adapter le code initial en conséquence, juste ajouter la partie déplaçant le second objet avant DoEvents.

    Le tout ne devant pas prendre plus de quinze lignes de code et quatre variables
    mais peu importe le nombre de lignes du moment que le résultat est atteint …

    Une fois ce simple exercice de niveau débutant achevé, bouger deux objets de plus étant du même niveau de difficulté …
    Il faudra juste réfléchir à ce que représente une itération de la boucle dans le projet final
    et si besoin, conditionner le déplacement de chaque objet …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

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