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 :

blocage dans une routine for [XL-2000]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 421
    Par défaut blocage dans une routine for
    Salut à tous, je viens de pondre quelques lignes qui sont sencées me simplifier la vie...cela fonction jusqu'à un certain point et apres ça plante, j'ai lancé la macro en mode pas à pas, et je ne voie pas ou est le probleme.

    j'ai un tableau contenant une liste complete de nature d'intervention

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    111 Feu E.R.P. sans local à sommeil
    112 Feu E.R.P. avec local à  sommeil
    116 Feu Locaux d´habitations ou bureaux
    121 Feu Locaux industriels
    122 Feu Locaux agricoles
    etc...
    dans une autre partie de ma feuille, j'ai un autre listing issu d'un requeteur,
    il contient le meme type listing + 3 colonnes

    je souhaite prendre chaque ligne de mon tableau n°2 et la placée sur la meme ligne que celle portant le même nom dans mon tableau n°1

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Sub tri_par_nature()
     
    ' I) copier "manuellement" / collage_spécial le résultat du tableau croisé "nature par groupement" dans la
    ' cellule rouge (sans les titres en haut ni les sommes à droite)
     
    ' II) définir le nombre de ligne du tableau collé en 1)
     
    Dim nbligne As Integer
    nbligne = Range("bk12").CurrentRegion.Rows.Count
     
    ' III) pour chaque ligne du tableau collé:
    Dim numero_ligne_destination As Integer
    Dim valeur_test As String
    Dim plage_origine As Range
    Dim ligne_origine As Integer
    Dim plage_destination As Range
     
    With Worksheets("TC GLOBAL inter par grp")
    Dim i As Integer
    For i = 0 To nbligne
     
    '   a) definir la valeur de la "cellule_source" de la colonne BK
        valeur_test = Range("bk" & 12 + i).Value
     
    '   b) rechercher dans la plage (A12,A300), la ligne qui contient la même valeur
        numero_ligne_destination = Range(.Cells(12, 1), .Cells(300, 1)).Find(valeur_test).Row
     
    '   c) définir la plage de cellule à copier qui correspond à "cellule_source" + les 3 cellules de droite
        ligne_origine = Range("bk" & 12 + i).Row
     
        Set plage_origine = Range(.Cells(ligne_origine, 63), .Cells(ligne_origine, 66))
     
     
    '   d) Copier ce range dans la cellule AZ sur la même ligne
     
        plage_origine.Select
        Selection.Copy
        Range("AZ" & numero_ligne_destination).Select
        ActiveSheet.Paste
     
     
    Next
     
    End With
     
    End Sub
    à l'éxécution des premieres lignes, tout va bien mais arrivé à la ligne n° 20 de ma feuille excel j'ai un arret de la macro et le message suivant:

    "variable objet ou variable de bloc with non definie"
    j'ai l'impression que le blocage se fait dans mon code à la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        numero_ligne_destination = Range(.Cells(12, 1), .Cells(300, 1)).Find(valeur_test).Row
    je vois pas pourquoi, car les premieres lignes sont bien analysées et copier au bon endroit...merci de vos réponses...a+

  2. #2
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonjour,
    Il faudrait tester si la valeur existe avant de récupérer la ligne de destinatin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set v = Range(.Cells(12, 1), .Cells(300, 1)).Find(valeur_test)
    if not v is nothing then
     numero_ligne_destination = v.row
     ....
    endif

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

Discussions similaires

  1. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22
  2. [batch] incrémentation dans une boucle for
    Par bart64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/09/2004, 20h05
  3. Réponses: 3
    Dernier message: 06/07/2004, 10h21
  4. Réponses: 2
    Dernier message: 24/06/2004, 09h13
  5. Réponses: 3
    Dernier message: 11/03/2004, 10h58

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