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-E]insérer une ligne à un emplacement variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut [VBA-E]insérer une ligne à un emplacement variable
    Bonjour à tous,

    Je débute dans le visual basic et je n'ai pas trouvé la réponse à ma question en cherchant sur les sujets déjà existant.

    Voici ce que je veux faire :

    je copie plusieurs lignes, cellule par cellule, d'une feuille à une autre. Ces lignes sont copié à différents endoits dépendament de la valeur d'une des cellule. Après chaque ligne copié, je doit insérer automatiquement une nouvelle ligne juste après ou avant(peu importe) celle qui vien d'être copié. Je ne veus pas utiliser la fonction suivante (F59 est un exemple):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("F59").Select
    Selection.EntireRow.Insert
    car la cellule à sélectionner dans le Range ne sera jamais la même et je ne peut pas la déterminer à l'avance. À moins que la valeur dans la cellule du Range puisse être une variable, dont j'ignore la syntaxe si cela est possible.

    Merci à l'avance

  2. #2
    Membre habitué Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 134
    Points
    134
    Par défaut
    Tu peux definir une cellule avec cells(N°delaligne, N°Delacolonne) au lieu de range

    Les 2 parametres N°delaligne, N°Delacolonne peuvent etre modifier

    pour F59

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Cells(59, 6).Select
    Selection.EntireRow.Insert

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    ben il est ou ton code de copie ?

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    J'ai essayer avec ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("Compilation").Cells(prochaineligne, 1).Select
    Selection.EntireRow.Insert
    Mais une erreur apparait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur d'exécution '1004':
    La méthode Select de la classe Range à échoué
    Ce qui ma fait penser que je devait utiliser la fonction Range....

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Si au lieux de désigner une cellule tu désignais la ligne, déjà ça te simplifirait la tâche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NoLigne = Range("E59").Row
    Rows(NoLigne).EntireRow.Insert
    où NoLigne peut être ce que tu veux... Pourvu que ce soit un nombre <= 65535
    Si j'ai bien compris

    A+

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    Voici le code de copie :

    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
    toutelaligne = False
           colc = 0
     
           ' Transfert de chaque cellule de l'offre d'emploi
           Do While Not toutelaligne
            If colc < 17 Then
             colc = colc + 1
             Worksheets("Compilation").Cells(lignec, colc).Value = Worksheets("Tableau").Cells(lignet, colc).Value
            Else: toutelaligne = True
            End If
           Loop
           prochaineligne = lignec + 1
     
           ' Insertion d'une nouvelle ligne pour la prochaine offre
           ' d'emploi dans la même tranche de CNP
           Worksheets("Compilation").Cells(prochaineligne, 1).Select
           Selection.EntireRow.Insert

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Pour ça
    Worksheets("Compilation").Cells(prochaineligne, 1).Select
    Tu dois séparer la sélection de la feuille de la sélection de la cellule (en deux lignes)
    Mais tu n'es pas obligé de sélectionner quoi que ce soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NoLigne = Range("E59").Row
    Worksheets("Compilation").Rows(NoLigne).EntireRow.Insert
    A+

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    mon problème est que je doit mettre une variable à la place de "E59" dans ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NoLigne = Range("E59").Row
    car je ne peut pas savoir a quelle ligne le code sera rendu.

    est-ce possible?

    Merci pour votre aide en passant

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par bbil
    ben il est ou ton code de copie ?
    montre nous le on pourra peu être déterminer d'aprés ce code ou la copie est effectuée !

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    est que je peux mettre une variable à la place de "E59" dans ta ligne
    Sans problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LaVar = "E59"
    NoLigne = Range(LaVar).Row
    Rows(NoLigne).EntireRow.Insert
    T'a plus qu'à essayer

    A+

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    bbil, je l'ai poster un peu plus haut le code de la copie.

    Je vais tenter de vous expliquer un peu mieux ce que je doit faire.

    Dans une premiere feuille("Tableau"), il y a une liste de plusieurs offres d'emploi. je dois passer ces offres une par une et les copier dans une autre feuille("Compilation") dépendament de la valeur d'une des colonne de la feuille "Tableau" qui se nomme CNP. Le CNP est un code de 4 chiffres qui va déterminer où va être copié l'offre d'emploi dans la feuille "Compilation". Avant que les offres d'emploi soit copié dans la feuille "Compilation", il y a des ... titres où chaque offre d'emploi doit être copié sous le bon titre dépendament du CNP. Ces titre sont sur des lignes fixes au départ mais avec chaque offre d'emploi copié, ces ligne vont décaler, ce pourquoi je ne peut mettre une valeur fixe dans la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NoLigne = Range("E59").Row
    Ca doit paraitre compliqué comme cela...mais je suis surment plus perdu que vous

    Et quand je dit une variable a la place de E59, je veux dire une variable déja existante qui a pour valeur la ligne où est rendu le copiage, et non la valeur E59

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    désolé j'avais Zappé ton code ..., remplace tes 2 derniéres lignes par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Compilation").Rows(prochaineligne).Insert

  13. #13
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    La ligne à Bbil fonctionne!!!

    Merci les gars et/ou les filles!

    P.S.: je voudrait bien inscrire que le problème est résolu, mais comment faire

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par DomBourti
    La ligne à Bbil fonctionne!!!

    Merci les gars et/ou les filles!

    P.S.: je voudrait bien inscrire que le problème est résolu, mais comment faire
    menu outils de la discussion en haut ...

  15. #15
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    Une autre petite chose...

    lors de la copie d'une cellule, comment fait-on pour garder le lien hypertexte du texte qui se trouve dans la cellule que l'on veut copier?

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

Discussions similaires

  1. [XL-2010] Insérer une ligne de maniere variable dans une liste de données
    Par vis896 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/04/2015, 21h04
  2. [VBA-E]Selectionner puis Insérer une ligne
    Par Xaphyr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/03/2007, 18h43
  3. [VBA-E] insérer une ligne
    Par sebneb dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/01/2007, 09h58
  4. [VBA] insérer une ligne dans un fichier excel
    Par cokinoumasterflash dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/07/2005, 18h52
  5. [VBA][Excel]Insérer une ligne
    Par loverdose dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/02/2005, 16h27

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