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 Ajout ligne en fin de plage nommée et copie de formules


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
    Chef de projet informatique
    Inscrit en
    Juin 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projet informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2018
    Messages : 22
    Par défaut VBA Ajout ligne en fin de plage nommée et copie de formules
    Bonjour,
    Tout d'abord, désolé, je me lance en VBA et ne suis pas très performant... J'ai fait des recherches mais après beaucoup d'essais, je n'ai toujours pas réussi à faire ce que je veux.

    J'ai une table nommée "Tableaucomplet" à laquelle je voudrais ajouter deux lignes (en fin) et copier l'ex-dernière ligne dans ces deux nouvelles lignes.
    Pour compliquer un peu, j'ai des données et lignes vides avant et après ma table.
    J'ai fait ce code qui marche (en quelque sorte), sauf que ma formule des colonnes A B et C foire. Par exemple si ma dernière ligne est la 29, la formule de A29 est =SI(A28<>"..";"..";""). Ma macro m'insère des lignes mais fait qu'après ajout des lignes, la formule de la cellule A29 est devenue =SI(A26<>"..";"..";"").
    J'ai testé d'insérer la formule après, au lieu de copier, mais insérer une formule avec un IF et une variable dedans est largement au-dessus de mes compétences, et je pense qu'il y a bcp plus simple.
    Merci de votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub AjoutLignesTest()
    Dim NbLignes As Integer
    Range("Tableaucomplet").Select
    NbLignes = Selection.Rows.Count
        Rows(NbLignes + 8 & ":" & NbLignes + 8).Select
        Selection.Copy
        Selection.Insert Shift:=xlUp
        ActiveSheet.Paste
        Selection.Copy
        Selection.Insert Shift:=xlUp
        ActiveSheet.Paste
        ActiveSheet.Calculate
    End Sub

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour DGA, bonjour le forum,

    Essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub AjoutLignesTest2()
    Dim NbLignes As Integer
    NbLignes = Range("Tableaucomplet").Rows.Count
    Rows(NbLignes).Copy Rows(NbLignes + 1)
    Rows(NbLignes).Copy Rows(NbLignes + 2)
    Range("Tableaucomplet").Resize(NbLignes + 2).Name = "Tableaucomplet"
    ActiveSheet.Calculate
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet informatique
    Inscrit en
    Juin 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projet informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2018
    Messages : 22
    Par défaut
    Merci pour cette réponse rapide.
    J'ai dû adapté les +1 et +2 en +9 et +10 parce que j'ai 8 lignes avant ma table, et ça fonctionne.
    Par contre, l'agrandissement de la plage vient m'effacer les lignes qui sont situées en-dessous. Du coup, j'ai ajouté trois lignes pour insérer des lignes pour éviter ce problème.
    Tout fonctionne, sauf bizarrement, mes formules des colonnes A à C qui ne sont pas copiées. à la place, ce sont les valeurs qui sont copiées dans les lignes ajoutées. Ca pourrait venir du fait que la formule n'existe que dans la dernière ligne et pas dans l'avant-dernière (effacée par une donnée entrée à la main). Une idée pour corriger cela?

    (La fin de mon tableau ressemble à ça : (les ".." sont entrés automatiquement par la formule une ligne sur deux pour des questions de lisibilité)

    .. .. .. données données données... formules de calcul des données
    04/07 M. XXX Ville Z données données données... formules de calcul des données
    .. .. .. données données données... formules de calcul des données

    Mes modifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub AjoutLignes()
    Dim NbLignes As Integer
    NbLignes = Range("Tableaucomplet").Rows.Count
    Rows(NbLignes + 9 & ":" & NbLignes + 9).Select
    Selection.Insert Shift:=xlDown
    Selection.Insert Shift:=xlDown
    Rows(NbLignes).Copy Rows(NbLignes + 9)
    Rows(NbLignes).Copy Rows(NbLignes + 10)
    Range("Tableaucomplet").Resize(NbLignes + 2).Name = "Tableaucomplet"
    ActiveSheet.Calculate
     
    End Sub

  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Si tu mettais ton fichier on perdrait moins de temps...
    Peut-être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub AjoutLignes()
    Dim NbLignes As Integer
     
    NbLignes = Range("Tableaucomplet").Rows.Count
    Rows(NbLignes + 9).Insert Shift:=xlDown
    Rows(NbLignes + 9).Insert Shift:=xlDown
    Rows(NbLignes + 8).Copy Rows(NbLignes + 9)
    Rows(NbLignes + 8).Copy Rows(NbLignes + 10)
    Range("Tableaucomplet").Resize(NbLignes + 2).Name = "Tableaucomplet"
    ActiveSheet.Calculate
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Chef de projet informatique
    Inscrit en
    Juin 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projet informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2018
    Messages : 22
    Par défaut
    A partir de ta solution, j'ai réussi à bidouiller un code qui marche. Merci. J'imagine que ma solution n'est pas très élégante, mais ça marche.
    Merci pour ton aide salutaire.

    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
    Sub AjoutLignes()
    Dim NbLignes As Integer
    NbLignes = Range("Tableaucomplet").Rows.Count
    Rows(NbLignes + 9 & ":" & NbLignes + 9).Select
    Selection.Insert Shift:=xlDown
    Selection.Insert Shift:=xlDown
    Rows(NbLignes).Copy Rows(NbLignes + 9)
    Rows(NbLignes).Copy Rows(NbLignes + 10)
    Range("Tableaucomplet").Resize(NbLignes + 2).Name = "Tableaucomplet"
    Range("A" & NbLignes + 1).Select
        ActiveCell.FormulaR1C1 = "=IF(R[-1]C<>"".."","".."","""")"
        Selection.Copy
        Range("A" & NbLignes + 9 & ":C" & NbLignes + 10).PasteSpecial
    ActiveSheet.Calculate
    End Sub

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

Discussions similaires

  1. [XL-2016] Ajouter une ligne en fin de tableau excel avec une vba
    Par Karkan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/01/2017, 15h06
  2. Macro VBA ajout zéro en fin de colonne
    Par CDGESTION dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 25/11/2016, 07h49
  3. [XL-2013] Ajout ligne en fin de tableau avec condition
    Par julie22 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/09/2016, 12h17
  4. [Toutes versions] Créer une ligne en fin de plage dynamique faisant la somme des cellules de la colonne
    Par joe.levrai dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/08/2012, 20h56
  5. [XL-2003] VBA - Ajoute ligne Nouveau tableau
    Par Maiden002 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/07/2009, 14h53

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