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 :

Plantage code suite à rows.insert [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
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Par défaut Plantage code suite à rows.insert
    Bonjour.

    Au sujet de la discussion : ROWS.INSERT probléme macro plante

    J'ai actuellement le même genre de problème sur un programme vba excel 2010 sur lequel je travail.
    Je fais une boucle pour lire un tableau sur la feuille 1, puis en fonction de ce que contient la ligne lu, je vais copier une ligne de la feuille 2 puis insérer cette dernière à la fin de la feuille.
    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
     
        For i = 12 To derniere_ligne
            If Worksheets("Referentiel").Range("J" & i) = "Oui" And Worksheets("Referentiel").Range("A" & i) <> "" Then
                Debug.Print Worksheets("Referentiel").Range("C" & i)
                If InStr(Worksheets("Referentiel").Range("A" & i), "/") <> 0 Then
                    Worksheets("Cartographie").Rows(18).Copy
                Else
                    Worksheets("Cartographie").Rows(17).Copy
                End If
                Debug.Print "Avant Insert row " & current_row_index
                Worksheets("Cartographie").Rows(current_row_index).Insert
                Debug.Print "Apres Insert row " & current_row_index
                Worksheets("Cartographie").Range("A" & current_row_index) = Worksheets("Referentiel").Range("A" & i)
                Worksheets("Cartographie").Range("B" & current_row_index) = Worksheets("Referentiel").Range("C" & i)
                Worksheets("Cartographie").Range("C" & current_row_index) = Worksheets("Referentiel").Range("E" & i)
                current_row_index = current_row_index + 1
                Worksheets("Cartographie").Application.CutCopyMode = False
            End If
        Next i
    Ce code plante parfois à la ligne où je fais le Insert et je n'arrive pas à savoir pourquoi.
    Avez vous trouvé une solution ?

  2. #2
    Membre éprouvé Avatar de LawNasK
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2015
    Messages : 144
    Par défaut
    A tout hasard, un message d'erreur quand ça plante ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Par défaut
    J'ai ce message :
    "La méthode 'Insert' de l'objet 'Range' a échoué."
    Ainsi que :
    "Erreur système &H80010180 (-2147417848). L'objet invoqué s'est déconnecté de ses clients".

    Ce que je trouve étrange c'est que le code fonctionne très bien la plupart du temps et parfois il tombe en erreur. Je n'ai pas encore réussi à identifier la cause. Tout ce que je sais c'est que ça provient de la ligne :
    "Worksheets("Cartographie").Rows(current_row_index).Insert"

    En cherchant sur google j'ai trouvé plein d'erreurs similaires mais je n'ai pas trouvé de solution.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Par défaut
    Je pense avoir trouvé une solution en m'inspirant de cette article :
    http://excelribbon.tips.net/T010917_...ying_Rows.html

    Dans le dernier exemple, je vois qu'il insert d'abord une ligne vide puis après il copie le contenu de la ligne d'origine vers la nouvelle ligne.
    Du coup plutôt que de copier puis insérer, je viens de tenter d'insérer puis copier et je n'ai pas eu d'erreur.

    Je vais faire quelques tests en espérant ne plus avoir de message dans aucun cas de test.

    EDIT :
    Après quelques essais je n'ai plus eu la moindre erreur.

    Voilà le code corrigé :
    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
     
        For i = 12 To derniere_ligne
            If Worksheets("Referentiel").Range("J" & i) = "Val" And Worksheets("Referentiel").Range("A" & i) <> "" Then
                Debug.Print Worksheets("Referentiel").Range("C" & i)
                Worksheets("Cartographie").Rows(current_row_index).Insert
     
                If InStr(Worksheets("Referentiel").Range("A" & i), "/") <> 0 Then
                    Worksheets("Cartographie").Rows(18).Copy Worksheets("Cartographie").Rows(current_row_index)
                Else
                    Worksheets("Cartographie").Rows(17).Copy Worksheets("Cartographie").Rows(current_row_index)
                End If
     
                Worksheets("Cartographie").Range("A" & current_row_index) = Worksheets("Referentiel").Range("A" & i)
                Worksheets("Cartographie").Range("B" & current_row_index) = Worksheets("Referentiel").Range("C" & i)
                Worksheets("Cartographie").Range("C" & current_row_index) = Worksheets("Referentiel").Range("E" & i)
                current_row_index = current_row_index + 1
            End If
        Next i

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

Discussions similaires

  1. [CKEditor] Probleme pour afficher le code html apres insertion dans bdd
    Par Pepito2030 dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 28/12/2006, 21h52
  2. [Tableaux] Code ascii et insertion en db Mysql
    Par TraxX dans le forum Langage
    Réponses: 1
    Dernier message: 02/10/2006, 16h21
  3. Réponses: 4
    Dernier message: 30/06/2006, 21h48
  4. Simplification de code (suite)
    Par Jeffboj dans le forum Access
    Réponses: 1
    Dernier message: 12/04/2006, 22h34
  5. trigger suite a insert
    Par DaxTaz dans le forum Développement
    Réponses: 4
    Dernier message: 07/07/2004, 11h27

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