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 :

Boucle For Next avec 2 variables


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 53
    Points : 34
    Points
    34
    Par défaut Boucle For Next avec 2 variables
    Bonjour, je voudrais faire 1 boucle For Next avec 2 variables qui s'incrémentent simultanément.

    Ex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i = 1 to n
    For j = 1 to m
     
    Sheets ("Feuil1").range ("A"& i) = Sheets ("Feuil2").range ("A"& j)
    Next j
    Next i
    Ce type de boucle n'incrémente pas i et j en même temps sur la même ligne

    Comment faire ???

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 469
    Points : 16 349
    Points
    16 349
    Par défaut
    Bonjour

    Oui c'est normal : quel est le but ?

    Si i et j doivent être identiques alors une seule boucle suffit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 1 to m
     
    Sheets ("Feuil1").range ("A"& i) = Sheets ("Feuil2").range ("A"& i)
     
    Next i
    Mais si le but est de recopier les valeurs, ce serait plus simple ainsi, sans boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets ("Feuil1").range ("A1:A" & m) = Sheets ("Feuil2").range (("A1:A" & m)
    Sinon explique ...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 53
    Points : 34
    Points
    34
    Par défaut Re
    Non i et je ne s'incrémente de la même façon et n'ont pas les mêmes valeurs

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Dans deux boucles imbriquées, la boucle interne tournera de 1 à m pour chaque tour de la boucle externe (boucle principale) de 1 à n.
    Dans ton exemple ça revient à faire 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
     
    Sub Boucle()
     
        Dim I As Long
        Dim n As Long
        Dim m As Long
     
        n = 10
        m = 10
     
        For I = 1 To n
     
            Sheets("Feuil1").Range("A" & I) = Sheets("Feuil2").Range("A" & m)
     
        Next I
     
    End Sub
    c'est à dire attribuer la valeur de A10 de la feuille 2 aux cellules A1 à A10 de la feuille 1 car la boucle interne finira toujours à 10.
    Donc, comme le dis 78chris, il faut plus de précisions sur la marche à suivre.

    Hervé.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 53
    Points : 34
    Points
    34
    Par défaut Re
    je veux écrire automatiquement à l'activation dans la feuille "synthèse" toutes les données des autres feuilles.

    Si la feuille 1 a 5 lignes remplies
    Si la feuille 2 a 8 lignes remplies
    .. la feuille 3 a 10 lignes remplies

    la feuille Synthèse a 23 lignes remplies en suivant la chronilogie feuille 1 feuille 2 feuille 3

    Donc la feuille synthèse est comme suit
    A1..... valeurs A1 feuille 1
    A2..... valeurs A2 feuille 1
    A3..... valeurs A3 feuille 1
    A4..... valeurs A4 feuille 1
    A5..... valeurs A5 feuille 1
    A6..... valeurs A1 feuille 2
    A7..... valeurs A2 feuille 2

    etc....

  6. #6
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Re,

    Adapte les noms des feuilles et faire un test sur une copie de ton classeur :
    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 Boucle()
     
        Dim Fe As Worksheet
        Dim TblFeuilles
        Dim I As Long
        Dim J As Long
        Dim DerLig As Long
     
        'ici, les noms des feuilles où récupérer les valeurs
        TblFeuilles = Array("Feuil2", "Feuil3", "Feuil4")
     
        'affecte à la varaible FE la feuille où seront inscritent les valeurs
        Set Fe = Worksheets("Feuil1")
     
        'boucle sur les feuilles
        For I = 0 To UBound(TblFeuilles)
     
            'recherche la dernière ligne non vide de la colonne A de la feuille en cours
            With Worksheets(TblFeuilles(I))
     
                DerLig = .Cells(.Rows.Count, 1).End(xlUp).Row
     
            End With
     
            'boucle sur les valeurs à récupérer et les affecte à Fe en colonne A
            'à partir de A2 et les unes à la suite des autres
            With Fe
     
                For J = 1 To DerLig
     
                   .Range("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1) = Worksheets(TblFeuilles(I)).Range("A" & J)
     
                Next J
     
            End With
     
        Next I
     
    End Sub
    Hervé.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2019
    Messages : 13
    Points : 7
    Points
    7
    Par défaut probleme similaire en relation avec extraction de donnees vers signets word
    Bonjour a tous,

    Je me permets de relancer cette discussion car j'ai remarque qu'elle etait similaire a mon probleme actuel et que quelqu'un pourrait y apporter une petite contribution.

    Je vous decris le probleme :

    J'aimerai que chacun de mes signets (Signet1,2,3,4,5 etc jusqu'a 11) presents dans mon document Word (se touvant dans la partie "Findings") soient respectivement "remplaces" par les textes contenus dans les cellules C21,22,23,24 etc jusqu'a 32 de la feuille "Finding report".

    Afin de preciser, je ne veux pas que le Signet1 soit remplace par la valeur des cellules C21 jusqu'a 32 mais seulement celle de la cellule 21 puis ainsi de suite en incrementant pour le signet 2,3,4 etc.

    J'ai voulu creer une 2 boucle For mais cela doit etre 2 conditions simultanees ... cependant je ne sais pas comment m'y prendre.

    Etant novice sur VBA toute aide sera la bienvenue

    Merci d'avance, model Finding Seats VersAide.xlsmSIN-ENG-P04-F02_maintenance_work_sheet_ANNEX Revision 1.docx

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Bonjour

    En passant par les nombres de lignes à copier et le 'CodeName' de chaque feuille source, à l’activation de l’onglet cible donc dans sa fenêtre de codes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim R As Range, L1 As Byte, L2 As Byte 'Byte ou Integer ou Long selon le cas
    Private Sub Worksheet_Activate()
        Set R = Cells(Rows.Count, 1).End(xlUp)(2) 'première cellule visée
        L1 = Feuil1.Cells(Rows.Count, 1).End(xlUp).Row  'nombre de lignes à y copier
        Feuil1.[A1].Resize(L1).Copy R  'copie de ces lignes
        L2 = Feuil2.Cells(Rows.Count, 1).End(xlUp).Row  'nombre de lignes à copier en dessous
        Feuil2.[A1].Resize(L2).Copy Cells(Rows.Count, 1).End(xlUp)(2) 'copie de ces lignes
    End Sub
    'pour éviter des ajouts à chaque ouverture
    Private Sub Worksheet_Deactivate()
        R.Resize(L1 + L2).EntireRow.Delete
    End Sub
    Remarque : la copie cellule par cellule par des boucles peut pénaliser la durée d’exécution en cas d’un grand nombre de celles-ci.

    nemms, tu devrais ouvrir ta discussion dans le forum réservé à Word.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2019
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Je te remercie OrDonc cela a l'air de marcher je vais essayer de décortiquer le code de mon côté afin de le comprendre moi-même maintenant !
    Je vais cependant creer une discussion car cela ne refletant pas en totalite tout mon travail j'ai rencontre d'autres problemes sur d'autres parties du code.

    Merci encore,

Discussions similaires

  1. [XL-2003] Pb avec une boucle For - Next
    Par cynoq dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/12/2011, 11h29
  2. Prob boucle for next avec recherche chaine
    Par papajn dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 11/08/2011, 18h44
  3. [AC-2007] ouvrir plusieurs états avec boucle FOR...NEXT
    Par sylv20 dans le forum IHM
    Réponses: 5
    Dernier message: 30/06/2011, 10h58
  4. [VB.net] Boucle for next avec un tableau
    Par grand_prophete dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 11h08
  5. Réponses: 3
    Dernier message: 03/11/2005, 19h22

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