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 :

Problème de boucle [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 11
    Par défaut Problème de boucle
    Bonjour à tous,

    je suis débutant en VBA, je vais essayer de vous expliquer mon problème,

    j'ai besoin d'une macro en vba pour excel qui :

    - (scan chaque lignes jusqu'à la 175ème de la colonne K) et SI elle trouve une case vide dans la colonne K, elle doit copier toute la ligne vers une nouvelle feuille (sheet), ensuite le script doit continuer son scan, jusqu'à trouver une prochaine case vide, ou il devra de nouveau sélectionner toute la ligne et la coller à la suite dans la nouvelle feuille.

    je vais vous donner quelques exemples qui ne marche pas chez moi, mais peut être que ce la vous aidera à mieux comprendre.

    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
     
    Sub extractvisiteurs()
     
    Dim ligne As Integer
    ligne = 1
    Dim sourcecell As String
     
    Sheets(Visiteurs).Select
        Range("K2").Select
        sourcecell = ActiveCell.Address
        If (ligne < 175) Then
                       If IsEmpty(sourcecell) Then
                           ActiveCell.EntireRow.Select
                           Selection.Copy
                           Sheets("RESTE").Select
                           Range("B2").Select
                           Cells(Rows.Count, 1).End(xlUp)(2).Select
                           ActiveSheet.Paste
                        End If
                    Sheets(Visiteurs).Select
                    Range(sourcecell).Select
                    ActiveCell.Offset(0, 1).Select
                    sourcecell = ActiveCell.Value
                    ligne = ligne + 1
            End If
    end sub
    OU encore une autre exmple que j'ai testé :

    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 extractvisiteurs()
    Dim cell As Range
    Dim lastline As Integer
    lastline = Sheets("RESTE").Range("A65536").End(xlUp).Row + 1
    Sheets("Visiteurs").Select
    For Each cell In Range("K2:K175")
     
                       If cellvalue = "" Then
     Sheets("Visiteurs").Cells(4, 1).EntireRow.Copy
     Sheets("RESTE").Select
     Sheets("RESTE").Cells(lastline, 1).EntireRow.Select
     ActiveSheet.Paste
                    Else
    End If
    Next cell
    End Sub
    J'ai aussi essayé ce code qui scanne toute la colonne K mais qui ne copie colle rien dans la feuille RESTE...

    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
     
    Sub extractvisiteurs()
    Dim sourcecell As Integer
    Range("K2").Select
    sourcecell = ActiveCell.Value
    Celloffset = ActiveCell.Offset
    Dim cell As Range
    Dim lastline As Integer
    lastline = Sheets("RESTE").Range("A65536").End(xlUp).Row + 1
    Sheets("Visiteurs").Select
    For Each cell In Range("K2:K175")
     
                       If sourcecell = 0 Then
     Sheets("Visiteurs").Cells(sourcecell).EntireRow.Copy
     Sheets("RESTE").Select
     Sheets("RESTE").Cells(lastline, 1).EntireRow.Select
     ActiveSheet.Paste
     Range(sourcecell).Select
     ActiveCell.Offset(ActiveCell.Offset, 1).Select
     sourcecell = ActiveCell.Value
    Else
    cell.Offset(sourcecell, 0).Select
    ActiveCell.Offset(1, 0).Select
    Celloffset = ActiveCell.Offset
    End If
    Next cell
    End Sub
    aucun de ces codes ne marche bien
    SVP aidez moi je suis débutant et je galère depuis des jours sur ce truc :'( !

    Merci d'avance ! @ bientôt !

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le plus simple est l'utilisation de la méthode AdvancedFilter de l'objet Range soit l'outil Filtre avancé d'excel. Cette méthode permet ainsi d'exporter toutes les lignes d'une liste de données qui répondent aux critères en une seule ligne de code (hormis la déclaration et l'affectation des variables).
    Dans ton cas et en imaginant qu'il y ait 5 colonnes dans cette liste et que les premières données commencent en ligne 2 avec les titres en ligne 1
    La formule à placer dans les critères sera
    ou
    Pour en savoir plus Les filtres avancés ou élaborés dans Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonsoir,

    Pas trop le temps de regarder en détail votre code, mais une fonction de filtre va vous rendre la vie bien plus simple

    Vous pouvez regarder sous http://philippetulliez.developpez.co...dvancedfilter/

    Voir aussi pour progresser avec un bout de script comme (non testé, à adpater)

    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
    Sub Test_AutoFilter 
     
        Dim DataRng As Range, Cl As Range
     
     
    'Initialisation
        Set DataRng = ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion  'A adapter
     
    'On Filtre d'abord sur la colonne 11 (à adapter), les valeurs vides
        With DataRng
     
            If .Parent.FilterMode = True Then .AutoFilter
             .AutoFilter Field:=11, Criteria1:="="
     
        End With
     
        Set DataRng = DataRng..Cells.SpecialCells(xlVisible)
        Debug.Print DataRng.AddressLocal
     
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 11
    Par défaut
    excellente idée ! je n'y avais même pas pensé au filtre, et ensuite je copierais mon résultats dans la nouvelle feuille xls.

    je vais tester tout ca et je vous tiens au courant demain merci déjà pour votre aide.

    Cordialement,

  5. #5
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 11
    Par défaut
    Merci encore pour cette idée avec les filtres, ca fonctionne niquel, j'ai pu me renseigner sur les filtres en vba et régler mon problème.

    je marque en résolu ! merci!

    Cordialement,

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

Discussions similaires

  1. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  2. [Tableaux] Problème avec boucle
    Par MYster dans le forum Langage
    Réponses: 6
    Dernier message: 11/11/2005, 18h39
  3. Problème de boucle
    Par TheUltimaSephiroth dans le forum C
    Réponses: 8
    Dernier message: 10/10/2005, 13h58
  4. Problème de boucle
    Par Louis-Guillaume Morand dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/09/2005, 09h10
  5. Problème de boucle
    Par basclln dans le forum C++
    Réponses: 19
    Dernier message: 02/04/2005, 09h13

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