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 problème avec la une boucle for range.end(xlup).row après suppression de lignes [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Par défaut VBA problème avec la une boucle for range.end(xlup).row après suppression de lignes
    Bonjour à tous
    Débutant en VBA et nouveau sur ce forum, je sollicite votre aide

    Dans le cadre d'un programme, je veux importer les valeurs de certaines cellules se trouvant sur différentes feuilles du classeur dans une même feuille.

    Le souci se pose après la réinitialisation de cette feuille: avant de faire l'importation, je supprime toutes les lignes non vides et lors de mon test, le programme ne prend en compte que les 4 premières lignes.

    Merci d'avance de votre aide

    Cordialement

    voici mon code:

    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
    Option explicit
    'déclaration des variables
    Dim i As Integer, j As Integer, k As Integer, nbf As Integer
    Dim nomAPS As String, codeAPS As String
     
    Private Sub CommandButton1_Click()
     
    'initialisation de la fiche
    For i = Range("A65536").End(xlUp).Row To 5 Step -1
        If Range("A" & i).Value <> "" Then
        Range("A" & i).EntireRow.Delete
        End If
    Next i
     
    'test et création de la fiche
    nbf = ThisWorkbook.Sheets.Count
     
    For i = nbf To 11 Step -1
        For j = ThisWorkbook.Sheets(i).Range("H65536").End(xlUp).Row To 4 Step -1
            nomAPS = ThisWorkbook.Sheets(i).Range("H" & j).Value
            codeAPS = ThisWorkbook.Sheets(i).Range("F" & j).Value
     
            For k = Range("A65536").End(xlUp).Row To 5 Step -1 '<-- le soucis vient de là !!! car il m'indique que k = 4 or je veux tester toutes les lignes
     
             If codeAPS <> Range("A" & k).Value And Range("A" & k - 1).Value <> "" Then
                Range("B" & k).Value = nomAPS
                Range("A" & k).Value = codeAPS
                End If
            Next k
        Next j
    Next i
     
    End Sub

  2. #2
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Bonjour,
    ici k = forcément 4 car avant tu effaces toutes les lignes non vides :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton1_Click()
     
    'initialisation de la fiche
    For i = Range("A65536").End(xlUp).Row To 5 Step -1
    If Range("A" & i).Value <> "" Then
    Range("A" & i).EntireRow.Delete
    End If
    Next i
    donc a la fin de cette boucle la seule cellule pleine de la colonne A est A4, ce qui fait que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For k = Range("A65536").End(xlUp).Row To 5 Step -1 'le soucis vient de là !!! car il m'indique que k = 4 or je veux tester toutes les lignes
    donc cette ligne de code donne a k le numero de la derniere cellule utilisée de la colonne A c'est a dire 4

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 120
    Par défaut
    Salut et bienvenu
    A mon avis tu te mélanges les pinceaux entre tes différentes feuilles.
    Tu devrais nommer explicitement sur quel classeur et feuille tu travailles

    Dans ton code tu as des thisworkbook. et d'autre fois tu ne le précises pas, pareil pour sheets(x). Dans un première temps, même si ça charge ton code, défini comme il faut sur quelle feuille tu travailles a chaque fois, viendra ensuite la simplification de l'écriture.

    Ps: lorsque tu postes du code, pense a utiliser la balise code (sélectionne ton code + bouton # dans le menu de l’éditeur)

    ++
    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

  4. #4
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Par défaut
    Tout d'abord merci de vos réponses rapides (ça fait plaisir de ne pas se sentir abandonné ^^)

    pourriez m'éclairer sur ce que renvoie la fonction range.end(xlup).row ?

    @ rvtoulon
    Merci pour ton explication, mais aurais tu une solution pour effacer toutes les données et mise en page de cellules avant d'importer les nouvelles données ?

    @Qwazerty
    Merci pour tes remarques.
    Je vais essayer de m'organiser un peu mieux pour que cela devienne plus comprehensible :p
    Pour ce qui est de la simplification, je ne suis pas sûr d'y arriver tout de suite, n'étant absolument pas spécialisé dans la programmation et n'étant que ponctuellement sur mon projet.

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 120
    Par défaut
    Alors le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("Dernière cellule de la colonne A").end(xlup).row
    te renvoie le numéro de la dernière cellule non vide de ta colonne A (la colonne dépend bien sur de ce que tu mets dans range(...) )
    Pour avoir ce genre d'information n’hésite pas a utiliser l'aide Excel, même si je trouve que la version 2007 est moins bien qu'avant, tu y trouveras des infos.

    Pour ce qui est de simplifier le code, ça n'est pas un soucis, fait d'abords un code qui fonctionne, nous t'aiderons a le simplifier (enfin si tu sais simplifier certaines écritures fait le bien sur ^^)

    Pour une aide plus efficace, un petit classeur exemple serait bien
    ++
    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

  6. #6
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Par défaut
    Merci encore pour ta rapidité de réponse

    je joins le classeur qui me pose tant de soucis

    à l'ouverture il faut répondre non à la userform car elle appelle d'autres classeurs ^^

    ensuite c'est le code de la feuille materiel qu'il faut que j'adapte

    en fait ce que je veux faire c'est importer les noms et code des APS qui se trouve dans mes fiches de zones (feuilles à partir de la 11 inclue) en évitant les doublons et les cases vides
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [Débutant] Gros problème avec ma deuxième boucle for
    Par djobadi dans le forum MATLAB
    Réponses: 4
    Dernier message: 15/01/2014, 23h54
  2. Problème avec iconv et boucle for
    Par Invité dans le forum Débuter
    Réponses: 5
    Dernier message: 10/03/2013, 19h47
  3. [VBA-E]PB sur une boucle for each next
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2006, 15h47
  4. Problème avec une boucle for
    Par cisse18 dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 29/03/2006, 16h50
  5. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22

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