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 :

VBA boucle 720points [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut VBA boucle 720points
    bonjour,
    j'ai un petit probléme
    alors je n'arrive pas a faire ma boucle
    alors je dois selectionner les 720 premier points de ma liste pour les mettre dans la colonne 1 de ma deuxieme feuilles
    puis les 720 autres points pour les coller dans la colonne 2
    et tout cela 8fois et bien sur a l'aide d'une boucle
    si quelqu'un peut m'aider

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Bonsoir,

    tu as oublié de nous dire comment ce présenté ta liste ... de toutes façons avec deux boucles Imbriqué cela devrait se faire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    iLigneSource =1
    POUR iColonne = 1 a 8
      Pour iLigne = 1 a 720 
             Pose élément de la ligne iLigneSource vers colonne : iColonne , Ligne iLigne 
         Ajoute 1 à iLigneSource
      FIN Pour iLigne
    FIN POUR iCOLONNE

  3. #3
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    bonjour

    je n'ai pas tout compris, un petit code en fonction de ce que j'ai compris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    pnt = 0
    col = 1
    ligne = 0
    for i = 1 to xxxx ' xxxx ta valeur
         pnt = pnt + lavaleur
         ligne = ligne + 1
         cells(ligne, col) = lavaleuràmettre
         if pnt = 720 then
               pnt = 0
               ligne = 0
               col = col +1
         end if
    next

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    alors j'ai une liste de point sur une seul colonne
    et sur mon autre feuille j'ai 8colonne
    en gros je dois selectionner les 720 premier point les coller dans la colonne un puis les 720autres et les coller dans la colonne 2

    j'ai commencer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For i=1 to nbcycle
    sheets("donner brut""").Select
    Range("A5:A724").select <----c'est la que sa coince , j'arrive pas a faire comme je veux
    selection.copy
    sheets("donner preparer""").select
    cells(2,i).select
    activesheet.paste
    next

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Juste pour savoir, c'est un exo ou c'est perso/boulo? Je pense que je suis pas le seul a me poser la question au vu de la 1ere réponse

    Si tu veux mettre une variable nbcycle, le mieux serait de trouver cette valeur en fonction du nombre de ligne contenu dans ta colonne de départ.
    Cherche sur le forum y'a plein d'exemple à base de .End(xlup)... qui te permet de déterminer la dernière cellule non vide. Ensuite tu divises par 720.

    Ce qui faut éviter c'est d'utiliser les Select, il n'est pas utile de sélectionner une feuille ou une cellule pour la modifier. Tu peux utiliser des variables par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'Declaration
    Dim FeuilleBase as Worksheet
     
    'Initialisation, en faisant référence au classeur et a la feuille
    Set FeuilleBase = Thisworkbook.sheets("donner brut")
     
    'Utilisation
    FeuilleBase.Range("A1") = "Bonjour"
    Pour l'utilisation de Copy, regarde l'aide, il est possible de passer directement en paramètre la destination.

    Si tu veux sélectionner une plage "variable" tu peux utiliser des variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'Declaration
    Dim LigneDepart as integer, LigneFin as Integer
     
    '...
    For i=0 to nbcycle-1
       'Dans ta boucle tu dois faire en sorte de définir LigneDepart et LigneFin
       'Par exemple
       LigneDepart = i * 720 + 5 
       LigneFin = LigneDepart + 720
     
       'Par la suite tu pointes la plage de cellules qui correspond
       With FeuilleBase 'Voir l'aide pour With
          .range(.cells(LigneDepart,"A"),.Cells(LigneFin,"A"))
       End With
    Je n'ai bien sur pas tester le code, a toi de le pofiner et ça n'est qu'une approche, tu peux en imaginer d'autre, on t'en a d’ailleurs donné d'autre, mais je trouver intéressant de partir du code que tu proposais.

    ++
    Qwaz

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    c'est pour un exo , je suis en bts mci et on fais des macros enregistrer pour nos relever de point dans les cycle moteur
    et meme si l'exo n'est pas obligatoir j'aimerais bien comprendre et reussir celui ci

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    j'ai un léger probléme , je débute
    quand je rentre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .range(.cells(LigneDepart,"A"),.Cells(LigneFin,"A"))
    j'ai une erreur de compilation: erreur syntaxe

  8. #8
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Ok pour l'exo.

    En ce qui concerne l'enregistreur de macro, perso je pense que l'approche est surtout intéressante pour obtenir des éléments de syntaxe.
    Mais attention à deux choses, l'enregistreur crée des codes très verbeux et il faut absolument les retravailler, et la 2ème chose porte sur le fait qu'il ne connait pas toutes les méthodes et fonctions que peuvent contenir les différents objets et a fortiori, les fonction propre au langage VB.

    [Edit]
    Donne le code complet, cette partie du code sorti de son contexte ne peut par fonctionner.
    As-tu regardé l'aide concernant With? (clique sur le mot With dans VBA et touche F1)
    [/Edit]
    ++
    Qwaz

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    alors j'ai fais mon nouveau code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim LigneDepart as integer, LigneFin as Integer
     LigneDepart = i * 720 + 5 
     LigneFin = LigneDepart + 720
    '...
    For i=0 to nbcycle-1
    sheets("donner brut""").Select
    range(cells(LigneDepart,5),Cells(LigneFin,724)).select
    selection.copy
    sheets("donner preparer""").select
    cells(2,i).select
    activesheet.paste
    next
    et la je n'ai pas d'erreur

  10. #10
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Pour t'aider dans la relecture de ton code, je te conseille d'utiliser les indentations, c'est l'ajout de tabulation pour organiser ton code. Utilise également les commentaires sans retenu, c'est un bon moyen de te souvenir de pourquoi tu as fait telle ou telle chose.


    Pour ce qui est du code
    Regarde l'aide sur With et aussi sur Copy

    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
    Dim LigneDepart As Integer, LigneFin As Integer
    'Si tu laisses ces 2 lignes ici les valeur de LigneDepart et LigneFin resteront toujours les même durant toute les boucles
     LigneDepart = i * 720 + 5
     LigneFin = LigneDepart + 720
    '...
    For i = 0 To nbcycle - 1
    'Ajout d'une indentation
        'Sheets("donner brut""").Select '""" inutile " suffit. le select est inutil, relit mon précédent post
        With ThisWorkbook.Sheets("donner brut")
            .Range(.Cells(LigneDepart, 5), .Cells(LigneFin, 724)).Copy 'ici ensuite tu spécifi la destination (regarde l'aide)
            'Selection.Copy
            'Sheets("donner preparer""").Select
            'Cells(2, i).Select
            'ActiveSheet.Paste
        End With
    Next
    J'ai mis des commentaires dans le code

    ++
    Qwaz (à demain)

  11. #11
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    re à tous

    Plusieurs points, à la vue des réponses je crois pas comprendre plus

    mettre ligneDepart devant le for alors ce le calcul avec i dit le contraire
    prendre un bloc de 720 * 720 pour le copier colonne à colonne on va avoir des pertes de données ou des copie inutiles
    copier le bloc pour la première occurence de i dans une cellule(2,0) provoque une erreur.
    personnellement je verrais plutot ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim LigneDepart As Integer, LigneFin As Integer
    For i = 0 To nbcycle - 1
        LigneDepart = i * 720 + 5
        With ThisWorkbook.Sheets("donner brut")
            .Range(.Cells(LigneDepart, 1), .Cells(LigneDepart + 719, 1)).Copy destination:= Sheets("donner preparer").Cells(2, i+1)
        End With
    Next i

  12. #12
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    En fait je ne cherche pas a donner un code fonctionnel, le but est d’amener Revans à développer une solution, étant donné que j'ai cru comprendre qu'il souhaiter faire évoluer ses connaissances en VBA.

    Pour une fois que quelqu'un a cette démarche et pas juste, "Je veux un code qui fait ceci cela", je pense qu'il est important qu'il puisse comprendre la démarche qui l’amène à créer son code de telle ou telle façon.

    Bien sur, si c'est juste d'avoir un code fonctionnel dont il est question, y'en a pas pour long à le faire.

    As-tu avancé dans la construction de ton code Revans?

    ++
    Qwaz

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA]Boucle et Pièces Jointes sur mailing list
    Par delcroixf dans le forum VBA Access
    Réponses: 7
    Dernier message: 23/03/2007, 11h11
  2. [Excel/VBA] Boucle et test cellule
    Par Myogtha dans le forum Access
    Réponses: 9
    Dernier message: 19/02/2007, 12h35
  3. [VBA] Boucle do while
    Par Pitou5464 dans le forum Access
    Réponses: 8
    Dernier message: 23/08/2006, 11h17
  4. aide vba boucle for each paramétrée en range
    Par gotlieb dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/07/2006, 09h55
  5. [VBA] Boucle Do While
    Par jmde dans le forum Access
    Réponses: 4
    Dernier message: 16/10/2005, 21h23

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