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. #41
    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
    Hum, tu dis afficher par rapport à i. Je ne vois pas comment faire ? Pour les formules pas de soucis ça roule

  2. #42
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu sais calculer la position Xt et Yt de l'objet volant à l'instant i connaissant les données initiales Xi, Yi, Xf, Yf, V et ti?

    Il suffit de remplacer dans les équations donnant Xt et Yt t par i
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #43
    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 la formule j'essaye ceci (vitesse réelle pour le moment)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Xt = Sheets("Tableau").Range("B11") + 83.3 * (i - Ti) * k
    Yt = Sheets("Tableau").Range("C11") + 83.3 * (i - Ti) * k
    Quand je soumets la formule adaptée en cellule excel me donne quelque chose de cohérent je pense

  4. #44
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Bon je vais te proposer une piste pas du tout optimisée mais un premier pas pour appréhender la logique

    Données:

    Dans la feuille Feuil1:
    Colonne 2: Avion 1: Shape en Feuil2 appelée plane1
    En B2: sa position de départ Xi
    En B3: sa position de départ Yi
    En B4: sa position d'arrivée Xf
    En B5: sa position d'arrivée Yf
    En B6: sa vitesse moyenne V
    En B7: son instant de décollage ti

    Colonne 3: Avion 2: Shape en Feuil2 appelée Plane2

    idem ....


    Code générique pour positionner un objet Plane à l'instant t en prenant les données en colonne Col

    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
    'Plane: l'objet à déplacer
    'Col: colonne des données
    't: l'instant de photographie de la position de l'objet Plane
    Private Function PositionPlane(ByVal Plane As Shape, ByVal Col As Integer, ByVal t As Long) As Boolean
    Dim Xi As Double, Yi As Double, Xf As Double, Yf As Double, Xt As Double, Yt As Double, V As Double, D As Double
    Dim ti As Long
    Dim c As Range
     
    With Feuil1
        Set c = .Cells(1, Col)            'Nom avion e ligne 1
        ti = c.Offset(6)                'Ti en ligne 7
        If t >= ti Then
            Xi = c.Offset(1)            'Xi en ligne 2
            Yi = c.Offset(2)            'Yi en ligne 3
            Xf = c.Offset(3)            'Xf en ligne 4
            Yf = c.Offset(4)            'Yf en ligne 5
            V = c.Offset(5)             'Vitesse en ligne 6
            D = Sqr((Yf - Yi) ^ 2 + (Xf - Xi) ^ 2)     'Distance totale sur le plan
            Xt = Xi + V * (t - ti) * (Xf - Xi) / D     'Xt à l'instant t
            Yt = Yi + V * (t - ti) * (Yf - Yi) / D     'Yt à l'instant t
            If t <= ti + D / V Then    'Tant qu'on est pas encore arrivé à destination on fait bouger l'avion
                Plane.Left = Xt
                Plane.Top = Yt
            Else
                PositionPlane = True
            End If
        End If
    End With
    End Function
    Pour lancer le code sur 3 avions les 1001 premiers pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Lancement()
    Dim TheEnd As Integer, j As Integer, m As Integer
    Dim i As Long
     
    m = 3
    For i = 0 To 1000
        For j = 1 To m
            TheEnd = PositionPlane(Feuil2.Shapes("plane" & j), j + 1, i)
            DoEvents
        Next j
    Next i
    End Sub
    Bien sûr ces codes sont là uniquement à titre indicatif pour te montrer la possibilité de boucler sur une fonction paramétrée
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #45
    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 beaucoup pour ces précieuses indications. C'est comme cela que tu as procédé pour ton premier exemple ?

  6. #46
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Autrement mais avec la même logique.

    1. Calculer la position Xt et Yt à l'instant t
    2. Afficher l'objet à cet instant
    3. Recommencer pour t+1
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #47
    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
    Avec ce genre de boucle es tu limité en nombre d'avion?

  8. #48
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    A ton avis?
    j'ai mis exprès le nombre total d'avions (précisément de vols) dans une variable m
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #49
    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 préfère passer pour un âne à demander mais être sur a 100%

    Bon bah super merci beaucoup pour ce code, aurais tu une piste pour que je cherche à l'améliorer ? mine de rien cela me fait bien chercher de moi même et me permet d'apprendre

    voire me guider sur ton exemple premier qui est vraiment sympa

    Bon après avoir tourné en rond je crois que soit j'ai fait de la merde soit je suis idiot. J'ai décortiqué ton code et la ligne à l'air de merder. Je rentre mes valeurs en colonne 2 car col = 2, puis après avoir reçu une erreur, col = 3 et du coup mes valeurs = 0 et la division est impossible.

    EDIT : je pense que cela me sors une erreur vu que la col 3 n'est pas remplie. Ce qui me pose donc la question de "et si il n'y a que 2 avions qui doivent bouger dois je modifier le code ou bien on peut faire une sortie erreur pour continuer la boucle ?"

    c'était bien la 2ieme condition qui est remplie je suis idiot. Après remplissage des 3 colonnes cela fonctionne au poil

    tu peux me confirmer que la variable ti s'exprime bien en secondes ? j'ai l'impression que c'est plus le nombre d'itération, soit i

  10. #50
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour

    Oui pour cet exemple illustratif ti est le nombre d'itérations et non le temps en s.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  11. #51
    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
    D'accord. J'ai essayé de temporiser la boucle à 1s mais sans succès, avec un application wait, aurais tu une astuce ?

  12. #52
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    vire la boucle et utilise Application.ontime
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  13. #53
    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
    comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub testtime()
    Dim temps
    ThisWorkbook.Sheets("tab").[A1] = Now
    temps = Now + TimeValue("00:00:01")
    Application.OnTime temps, "lancement", , True
    End Sub

  14. #54
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu es perdu et j'en suis la cause.

    Je t'avais proposé un code et avais mentionné que c'était pédagogique et loin de répondre à ton problème.
    C'était pour pouvoir te montrer qu'on peut à l'aide d'une boucle faire bouger un ensemble d'objets sans pour autant demander autant de lignes de codes que d'objets à traiter.

    L'exemple donné ne répondrait guère à ton problème. Pas la peine de le considérer tel pour arriver à tes fins.

    Toujours à titre d'illustration comment utiliser OnTime avec le pseudo code que je t'avais donné:

    fais ces 2 déclarations en tête de module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Cpt As Long
    Dim Temps As Double
    La procédure Lancement sera modifiée comme ceci
    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
    Sub Lancement()
    Dim TheEnd As Integer, j As Integer, m As Integer
    Dim i As Long
     
    m = 3 'nombre
    Temps = Now + TimeValue("00:00:1")
    Cpt = Cpt + 1
    Feuil2.[A1] = Cpt
    For j = 1 To m
        TheEnd = PositionPlane(Feuil2.Shapes("plane" & j), j + 1, Cpt)
        DoEvents
    Next j
     
    Application.OnTime Temps, "Lancement"
     
    'ici à titre indicatif
    If Cpt = 60 Then Fin
    End Sub
    Remarque, lancement appelle elle même avec ontime

    ATTENTION il faudra impérativement ajouter la procédure Fin pour arrêter le processus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Fin()
     
    On Error Resume Next
    Application.OnTime Temps, Procedure:="Lancement", Schedule:=False
    Cpt = 0
    End Sub
    Je répète: Ces codes sont pour ton apprentissage et ta compréhension et non une solution à ton problème. (Qui nécessite un petit plus)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  15. #55
    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
    Ah oui bien l'appel tout seul. La procédure fin afin de ne pas tomber dans une boucle infinie je suppose. Non non tu n'en es pas la cause loin de là, j'ai pas mal appris en 3 jours sur le fait de pouvoir réduire un code avec la boucle d'hier. Le VB était inconnu jusqu'il y a peu donc merci. Peut être ce projet est il trop gros pour commencer mais je vais pas renoncer avec vos aides je vais y arriver.

  16. #56
    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 furye01

    Beaucoup de temps perdu au lieu de t'entraîner comme je t'ai invité à le faire à l'utilisation la plus simple de la méthode OnTime (avancement d'un seul compteur)
    Ce ne sera que lorsque tu l'auras parfaitement maîtrisée (pas avant) que nous parlerons de la "vitesse" du compteur.
    Cette vitesse peut s'exprimer de deux manières :
    - par un "pas" d'avancement proportionnel à la vitesse voulue
    - par une fréquence de "battement" du "timer/ontime" inversement proportionnelle à la vitesse voulue. Ontime utilisée "basiquement" est limitée à un "battement" par seconde. Couplée à une variable, on atteint des fréquences allant jusqu'au 3 centièmes de seconde.
    Voilà.
    Je ne reviendrai plus dans la présente discussion tant que j'y verrai d'autres "tentatives, approches, etc ..." sans qu'ait été totalement maîtrisée cette étape/exercice essentielle à mes yeux.
    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.

  17. #57
    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
    pas de soucis. Merci de ton aide !

  18. #58
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    @unparia +1 (comme toujours)

    A ma charge, j'avais fait perdre à furye01 2 journées après mon exemple d'illustration ( Quand même je lui avais signalé).

    Sans retour valable de sa part, je me retire dans l'attente de la visibilité de la démarche de l’intéressé.

    @furye01: Ne brûle pas les étapes dans ton apprentissage.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  19. #59
    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 n'ai rien perdu, merci de votre coup de main !

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