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][Excel] Comment faire pour faire une boucle?


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut [VBA][Excel] Comment faire pour faire une boucle?
    Bonjour je suis débutant en VBA et je dois faire des macro afin d'automatisé un certain nombre de chose
    DOnc je fais un code qui fais plusieur fois la meme chose et j'aimerais savoir comment faire pour faire une boucle ?
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    'recherche de la derniere case non vide correspondant à la zone "semaine1"
        Selection.FormulaArray = _
            "=INDEX(semaine1,MAX(ROW(semaine1)*NOT(ISBLANK(semaine1)))-ROW(semaine1)+1)"
     
    'range le résultat de la derniere case non vide correspondant à la zone "semaine2" en A3
        Range("A3").Select
     
    'recherche de la derniere case non vide correspondant à la zone "semaine2"
        Selection.FormulaArray = _
            "=INDEX(semaine2,MAX(ROW(semaine2)*NOT(ISBLANK(semaine2)))-ROW(semaine2)+1)"
    bien sur les 2 zones qui s'appelent semaine1 et semaine2 ont déjà été défini
    Le savoir est une arme alors soyons armés

  2. #2
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    une boucle se fait avec la méthode For ... To ... Next
    Exemple:
    La variable Chaine va prendre succesivement
    -"Bonjour"
    -"Ca va?"
    -"Très bien"
    Puis affiche cette chaine dans une boite de message.

    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 Chaine As String
    Dim Compteur As Integer
     
    For Compteur = 1 To 3
      Select Case Compteur
        Case 1
          Chaine =  "Bonjour"
        Case 2
          Chaine =  "Ca va?"
        Case 3
          Chaine =  "Très bien"
      End Select
     
      MsgBox Chaine
     
    Next Compteur
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  3. #3
    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 038
    Points
    20 038
    Par défaut Re: Comment faire une boucle de ce code au lieu de l'ecrire
    Citation Envoyé par Nom
    Bonjour je suis débutant en VBA et je dois faire des macro afin d'automatisé un certain nombre de chose
    DOnc je fais un code qui fais plusieur fois la meme chose et j'aimerais savoir comment faire pour faire une boucle ?
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    'recherche de la derniere case non vide correspondant à la zone "semaine1"
        Selection.FormulaArray = _
            "=INDEX(semaine1,MAX(ROW(semaine1)*NOT(ISBLANK(semaine1)))-ROW(semaine1)+1)"
     
    'range le résultat de la derniere case non vide correspondant à la zone "semaine2" en A3
        Range("A3").Select
     
    'recherche de la derniere case non vide correspondant à la zone "semaine2"
        Selection.FormulaArray = _
            "=INDEX(semaine2,MAX(ROW(semaine2)*NOT(ISBLANK(semaine2)))-ROW(semaine2)+1)"
    bien sur les 2 zones qui s'appelent semaine1 et semaine2 ont déjà été défini
    J'ai pas bien compris la question ...que ve tu que fasse ta boucle ...

    tu est sur que tu ne ve pas plutot une fonction ...?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function MaFormule (st as string) as string
    Maformule = "=INDEX(" & st & ",MAX(ROW(" & st & ")*NOT(ISBLANK(" & st & ")))-ROW(" & st & ")+1)"
    end function
    et ensuite tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.FormulaArray = Maformule("Semaine1")

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    Je réexplique:
    j'ai un tableau sur la feuille 1 qui comporte la production de l'entreprise sur un mois
    j'aimerai automatiquement remplir un autre tableau qui lui ne comporte que la production journaliere c'est pourquoi je dois connaitre la derniere case non null par semaine (il y en + une case qui fait le total de la production par mois donc je peux pas prendre la derniere case du tableaux général). Bref tout ca j'y arrive seulement a chaque fois je réutilise le code que j'ai montré avant et j'aimerais faire une boucle pour ne pas retapper du code pour rien surtout que je vais faire ca assez souvent
    donc ma boucle devra faire la recherche de la derniere case non vide par semaine (en sachant que auparavant j'ai deja definit mes zones semaine1 semaine2...) et aussi ranger le résultat au bon endroi (ex résultat de la zone semaine 1 en A2, résultat de la semaine2 en A3... )
    c'est plus clair???
    Le savoir est une arme alors soyons armés

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    j'ai déjà fait ca si ca peut etre plus clair
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    For i = 1 To 2
    'range le résultat de la derniere case non vide correspondant à la zone "semaineX" en A(x+1)  ex semaine1 en A2
        Range("A" & (i + 1)).Select
     
    'recherche de la derniere case non vide correspondant à la zone "semaineX"
        Selection.FormulaArray = _
            "=INDEX(semaine &i,MAX(ROW(semaine &i)*NOT(ISBLANK(semaine &i)))-ROW(semaine &i )+1)"
     
    Next i
    le probleme c'est ce bout de code ne marche pas. Que dois je changer ?
    Le savoir est une arme alors soyons armés

  6. #6
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Il y a un tutoriel sur les structures de contrôles, autrement dit: les boucles et les conditionnelles, sur le site de Développez. Il serait long de t'expliquer tout ça par messages. Regarde plutôt le tutoriel et ensuite on pourra t'éclairer s'il reste encore des points que tu n'auras pas compris.

    Bonne lecture!

    et @+

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    Mon probleme ne se situe pas vraiment dans l'ecriture de la boucle mais dans ma fonctiion index et range :
    lorsque je marque range ("A2").Select et Selection.FormulaArray = _
    "=INDEX(semaine1,Max ...
    ca marche tres bien mais si je veux faire
    Range("A" & (i + 1)).Select
    election.FormulaArray = _
    "=INDEX(semaine &ii,MAX...
    ca marche pas je pense que ca doit etre un probleme de guillemet mais depuis ce matin je cherche sans résultat
    Le savoir est une arme alors soyons armés

  8. #8
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Haaa! Il me semblait aussi!

    C'est bien de spécifier! Malheureusement, là, je suis aussi embroullée que toi. Alors, je vous laisse entre vous.

    Bonn chance.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    merci quand même
    Bon ba Je vais m'y remettre
    Le savoir est une arme alors soyons armés

  10. #10
    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 038
    Points
    20 038
    Par défaut
    sans tous rè-écrire tu peu utiliser ma fonction + haut :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    For i = 1 To 2
    'range le résultat de la derniere case non vide correspondant à la zone "semaineX" en A(x+1)  ex semaine1 en A2
        Range("A" & (i + 1)).Select
     
    'recherche de la derniere case non vide correspondant à la zone "semaineX"
        Selection.FormulaArray = Maformule("Semaine" & i)
     
    Next i

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    CA MARCHE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Merci encor à tous de votre aide et surtout a bbil qui a trouver la solution

    MERCI MERCI MERCI

    désolé j'suis EUPHORIQUE, ca fais depuis ce matin que je butte sur ca donc forcement j'suis trop content
    Le savoir est une arme alors soyons armés

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut comment faire une boucle au lieu de tout réécrir?
    Bonjour je viens d'arriver au bureau et la apres avoir voulu integrer d'autre chose à ma macro j'me suis dis il vaut mieux retester si tout marche bien et la vous avez devinez ca marche plus
    je comprend pas j'ai même fais un nouveau classeur avec juste la macro mais ca marche plus
    pourtant j'ai rien changer ! enfin je crois pas
    bref je vous explique mon probleme actuel :
    lorsque j'ai des info au niveau de la semaine 1 et 2 tout marche bien mais si les cases sont vides ca me retourne #valeur#
    Avant ca le faisait pas ! si c'etait vide ca me renvoyai rien
    la vraiment je comprend pas
    je sais pas trop ou se situe l'erreur donc je remet tout le code
    si quelqu'un peut m'aider
    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 Macro1()
    Dim i As Integer
     
    'definition de la zone correspondant à la semaine1
        ActiveWorkbook.Names.Add Name:="semaine1", RefersToR1C1:= _
            "=Feuil1!R3C2:R6C2"
     
    'definition de la zone correspondant à la semaine 2
        ActiveWorkbook.Names.Add Name:="semaine2", RefersToR1C1:= _
            "=Feuil1!R9C2:R13C2"
    'changement de feuille
        Sheets("Feuil2").Select
     
    For i = 1 To 2
    'range le résultat de la derniere case non vide correspondant à la zone "semaineX" en A(x+1)  ex semaine1 en A2
        Range("A" & (i + 1)).Select
     
    'recherche de la derniere case non vide correspondant à la zone "semaineX"
        Selection.FormulaArray = MaFormule("Semaine" & i)
     
    Next i
    'definition de la zone correspondant à dernier_vide
        ActiveWorkbook.Names.Add Name:="dernier_vide", RefersToR1C1:= _
            "=Feuil2!R2C1:R9C1"
     
    'range le résultat de la derniere case non vide correspondant à la zone "dernier_vide" en B2
        Range("B2").Select
     
    'recherche de la derniere case non vide correspondant à la zone "dernier_vide"
        Selection.FormulaArray = _
            "=INDEX(dernier_vide,MAX(ROW(dernier_vide)*NOT(ISBLANK(dernier_vide)))-ROW(dernier_vide)+1)"
    'changement de feuille
        Sheets("Feuil1").Select
    End Sub
     
     
    Function MaFormule(st As String) As String
    MaFormule = "=INDEX(" & st & ",MAX(ROW(" & st & ")*NOT(ISBLANK(" & st & ")))-ROW(" & st & ")+1)"
    End Function
    Le savoir est une arme alors soyons armés

  13. #13
    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 038
    Points
    20 038
    Par défaut
    sa te retourne #valeurr# ou ?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    oui ca retourne #valeur# dans la case A3 de la feuille 2 autrement dis celle ou se range le résultat de la fonction index pour la zone "semaine2" mais avant ca le faisait pas !!
    Le savoir est une arme alors soyons armés

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    je crois que ca viens de ma fonction index
    quan je fais ce code (sous exel pas en visual basic)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =INDEX(semaine2;MAX(LIGNE(semaine2)*NON(ESTVIDE(semaine2)))-LIGNE(semaine2)+1)
    ca m'affiche #valeur# si les cases sont vides
    Le savoir est une arme alors soyons armés

  16. #16
    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 038
    Points
    20 038
    Par défaut
    pas facile à comprendre ta formule .. index sans savoir ce qu'il y as dans semaine2...

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    semaine2 est une zone défini sous exel (Insertion/Nom/Définir)
    et si il y a rien dans cette zone ca m'affiche #valeur# dans la case ou je range ma fonction index. ca parait logique mais avant ca m'afichais rien or je veux que ca m'affiche rien
    Le savoir est une arme alors soyons armés

  18. #18
    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 038
    Points
    20 038
    Par défaut
    tu est sur que tu n'as pas changer de formule ?
    j'avais compris que semaine1 et semaine2 été des champs nommés.. mais je connais toujours pas les données qu'ils contiennent...

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    je crois qu'il clarifier les choses
    j'ai une feuille avec la production mensuel de mon entreprise
    celui était rempli tout les jours il se peut qu'il est des semaine vides (par exemple pour le mois de décembre la semaine du 26 n'est pas encore rempli)
    de plus à la place de chaque week end il y a une fonction somme qui fait la somme de la production de la semaine et une autre fonction somme qui fait celle du mois entier
    moi il me fallais la derniere case renseigner (ici celle su 19/12)
    donc j'ai été contraind de faire différentes zones correspondant à une semaine car sinon la derniere non vide était le total du mois

    j'ai donc défini mes zones en visual basic pour ne pas refaire la définission des zones chaque mois

    le code correspondant à ma définition de zone est celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    'definition de la zone correspondant à la semaine 2
        ActiveWorkbook.Names.Add Name:="semaine2", RefersToR1C1:= _
            "=Feuil1!R9C2:R13C2"

    c'est un peu plus clair??
    Le savoir est une arme alors soyons armés

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    : pas de réponse?
    Le savoir est une arme alors soyons armés

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 15
    Dernier message: 10/06/2010, 16h06
  2. Comment faire pour créer une boucle ?
    Par Arko76 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 02/04/2007, 17h14
  3. Réponses: 5
    Dernier message: 06/10/2006, 17h55
  4. Comment puis je faire pour que'une page soir rechargees....
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/12/2005, 10h46
  5. vba excel - Comment saisir une cellule sans faire entrer
    Par brethomeau dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/11/2005, 17h50

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