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


Sujet :

Macros et VBA Excel

  1. #1
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut Boucle For Next
    Comment faire une boucle for next permettant de venir tester toutes les cellules d'une colonne?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour,

    un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub colonne()
    Dim cel As Range
    For Each cel In Range("b:b")
    If cel.Value = 12 Then MsgBox "ok"
    Next
    End Sub

  3. #3
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    OK pour ton exemple sa marche!

    Je voulais juste savoir, quand il affiche la msgBox il l'affiche quand il passe devant la cellule qui est égale à 12? et non à la fin de la macro?

    Parce que moi l'idée, c'est que je test si les cellules de la colonne "H" sont égales à la date. J'utilise donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub colonne()
    Dim cel As Range
    For Each cel In Range("h:h")
    If cel.Value = Date Then MsgBox "ok"
    Next
    End Sub
    Moi je ne voudrai pas que se soit une msgBox qui s'affiche, mais que sa copie les cellules des colonnes A, B, C, D, E, F, G, et H et que sa les colle dans un autre classeur.

    C'est possible avec cette méthode du for each cellule in selection?

    Merci à toi

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut
    Essais comme ca
    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
     
    Sub colonne()
    Dim cel As Range
    For Each cel In Sheets("Feuil3").Range("h:h")
    If cel.Value = Date Then
        'On copi les cellules dans une autre feuil
        'Je concidere que la ligne 1 de la feuil2 contient des entete de colonne (nom, date,prenom, .....)
        'ici je ne sais pas si A est toujours rempli
        With Sheets("Feuil2").Range("H1").End(xlDown).Offset(0, -7) 'si A toujours rempli mettre With Sheets("Feuil2").Range("A1").End(xlDown) à la place de cette ligne
            Sheets("Feuil3").Range(Cells(cel.Row, "A"), cel).Copy .Address
        End With
     
    End If
    Next
    End Sub
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Salut et merci pour ton aide mais j'ai une erreur avec ta méthode!

    J'avais pensé à faire comme ça:
    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
    Sub colonne()
    Dim cel As Range
    For Each cel In Range("h:h")
     
    If cel.Value = Date Then
    ActiveCell.Select
    ActiveCell.Offset(0, -1).Select
    ActiveCell.Offset(0, -2).Select
    ActiveCell.Offset(0, -3).Select
    ActiveCell.Offset(0, -4).Select
    ActiveCell.Offset(0, -5).Select
    ActiveCell.Offset(0, -6).Select
    ActiveCell.Offset(0, -7).Select
     
    Selection.Copy
     
    Set cellule = Sheets("Feuil1").Range("a1")
    Do Until IsEmpty(cellule)
    Set cellule = cellule.Offset(1, 0)
    Loop
     
    Sheets("Feuil1").Select
    cellule.Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    End If
    Next
     
    End Sub
    Mais j'ai un problème aussi

    En fait l'élément qui me manque c'est comment une fois que j'ai détecté une cellule avec la date système lui dire de faire la celection de cette ligne de A à H

    J'ai peut-être mal exprimé ce que je voulais faire dite moi si c'est le cas!

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Re

    Cette fois c'est testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub colonne()
    Dim cel As Range
    For Each cel In Worksheets("Feuil3").Range(Worksheets("Feuil3").Range("H2"), Worksheets("Feuil3").Cells(Rows.Count, "H").End(xlUp))
    If cel.Value = CDate("01/06/1980") Then
           Worksheets("Feuil3").Range("A" & cel.Row & ":H" & cel.Row).Copy Sheets("Feuil2").Cells(Rows.Count, "H").End(xlUp).Offset(1, -7)
    End If
    Next
    End Sub
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re j'ai essayé se que tu ma fait! cette fois j'ai plus de message d'erreur, mais y se passe rien et j'ai un peu de mal a comprendre ton code!

    Tu colles dans l'autre feuille nn?
    parce que j'ai vu feuille 2 et feuille 3 donc je suppose que tu colles dans l'une des 2 mais j'ai vu que copy et j'ai pas vu paste.

    Tu peut essayé de me commenter un peu ton code que j'essaye de le comprendre

    Moi mes 2 feuilles s'appellent : -PMP (Feuille ou j'ai mes données)
    -Feuille1( celle ou on colle les données)

    Si tu regarde comment j'ai adapté sa correspond bien à ce que tu voulais faire?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub colonne1()
    Dim cel As Range
    For Each cel In Worksheets("PMP").Range(Worksheets("PMP").Range("H2"), Worksheets("PMP").Cells(Rows.Count, "H").End(xlUp))
    If cel.Value = CDate("01/06/1980") Then
           Worksheets("PMP").Range("A" & cel.Row & ":H" & cel.Row).Copy Sheets("Feuil1").Cells(Rows.Count, "H").End(xlUp).Offset(1, -7)
    End If
    Next
    End Sub
    Merci

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Re
    peut etre a cause de CDate("01/05/80") ? fallait remettre date, j'avais mis ca pour faire des testes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub colonne1()
    Dim cel As Range
    'Ici on boucle de la case H2 a la derniere case contenant des données (ca evite de boucler sur les 65000 ligne)
    For Each cel In Worksheets("PMP").Range(Worksheets("PMP").Range("H2"), Worksheets("PMP").Cells(Rows.Count, "H").End(xlUp))
    If cel.Value = Date Then 'ici fallait remettre date (j'avais lmis une autre date pour faire des essais
        'ici on selectionne de la case A à la case H cel.Row representant la ligne que l'on est en train de tester
        'F1 sur copy t'aurait indiquer ceci
        'Source.copy Destination
        'on copie donc de A à H et on envoie les données sur la derniere ligne pleine + 1 pour avoir la premiere vide et on pointe en meme temps sur la colonne A (H - 7 = A)
        Worksheets("PMP").Range("A" & cel.Row & ":H" & cel.Row).Copy Sheets("Feuil1").Cells(Rows.Count, "H").End(xlUp).Offset(1, -7)
    End If
    Next
    End Sub
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Bonjour
    voici un autre exemple à tester
    tu colle ce code dans un module standard dans le classeur qui contient les données à tester classeur active ici c'est classeur 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub testeDate()
    Dim cell As Range
    Set TBt = ThisWorkbook.Worksheets("Feuil1").Range("A1:A500") 'classeur,feuille,plage qui contienne les données à tester
    Set TWa = Workbooks("Classeur3").Worksheets("Feuil1") ' feuille qui recoit les données à adapter
        For Each cell In TBt
           If CDate(cell.Value) = Date Then
              TWa.Range("A65536").End(xlUp)(2).Resize(1, 10) = cell.Resize(1, 10).Value
          End If
        Next
      Set TBt = Nothing: Set TWa = Nothing
    End Sub
    Abed_H

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

Discussions similaires

  1. les boucles for..next
    Par dispa dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/06/2007, 14h23
  2. boucle for next ? peut être mais comment
    Par caro2552 dans le forum VBA Access
    Réponses: 11
    Dernier message: 07/02/2007, 20h26
  3. [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
  4. [VB6] Problème contrôle Timer et boucle For-Next ...
    Par Stéphane BEHMENBURG dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/12/2005, 17h36
  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