[Catégorie modifiée VBS -> VBA] Coller une ligne à la derniere ligne d'un autre [Résolu]

Signaler
Messages postés
47
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
7 décembre 2014
-
Messages postés
47
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
7 décembre 2014
-
Bonjour à tous,

J'ai un petit problème concernant le copier coller entre 2 classeurs. Je souhaite coller la ligne 2 du classeur code.xls à la fin du tableau base.xls

J'avais écris ce code ci :

Option Explicit
Function Ajout_Base()

Dim Plage As Range
Dim Cellule As Range

'Ouverture du classeur base.xls
Workbooks.Open Filename:= _
"C:\ptc_config\config_perso_wf2\Macros_Articles\code_xls\base.xls"

'Insertion d'une nouvelle ligne
Workbooks("base.xls").Worksheets("Feuil1").Rows("3:3").Insert Shift:=xlDown
    
'Copier de la ligne 2 du classeur code.xls vers la ligne 3 de base.xls
Workbooks("code.xls").Worksheets("Feuil1").Range("A2:H2").Copy Destination:=Workbooks("base.xls").Worksheets("Feuil1").Range("A3")

'Effacer les A du format
Set Plage = Range("D3:D200")
  For Each Cellule In Plage
    Cellule.Value = Replace(Cellule.Value, "A", "")
  Next Cellule
  
'Effacer les espaces de base.xls.
Call SupprEspaces 'Module 4

'Effacer les caractères (ï>>¿) BOM (UTF_8)
Call SupprimerCar 'Module 5


End Function



Ce code permettait d'insérer une nouvelle ligne à la ligne 3 du tableau. Le problème c'est que le classeur excel dispose d'une mise en forme conditionnelle, à chaque insertion de ligne cette mise en forme est donc perdu.

Donc 2 possibilités s'offre à moi:
- Soit je trouve une solution pour insérer une ligne en début de tableau en gardant le format.
- Soit je détecte la dernière ligne du tableau et je colle cette fameuse ligne.

Je préférerai quand même la première solution mais je ne sais pas si c'est possible de faire cela.

Merci d'avance !

9 réponses

Messages postés
47
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
7 décembre 2014

Bon je m'en suis sorti,

Voila le programme :

    Sub Ajout_Base()
      Dim Plage As Range
      Dim Cellule As Range
      
      'Ouverture du classeur base.xls
     Workbooks.Open Filename:= _
                     "C:\ptc_config\config_perso_wf2\Macros_Articles\code_xls\base.xls"
                     
      'Insertion d'une nouvelle ligne sans MFC
     Workbooks("base.xls").Worksheets("Feuil1").Rows("3:3").Insert Shift:=xlDown
     
      ' Copier coller la MFC de la ligne du dessous
     Workbooks("base.xls").Worksheets("Feuil1").Range("A5").Copy
      Workbooks("base.xls").Worksheets("Feuil1").Range("A3").PasteSpecial Paste:=xlPasteFormats
      
       'Copier de la ligne 2 du classeur code.xls vers la ligne 3 de base.xls
     Workbooks("code.xls").Worksheets("Feuil1").Range("A2:H2").Copy
     Workbooks("base.xls").Worksheets("Feuil1").Range("A3").PasteSpecial Paste:=xlPasteValues

      
      'Effacer les A du format
     Set Plage = Range("D3:D200")
      For Each Cellule In Plage
        Cellule.Value = Replace(Cellule.Value, "A", "")
      Next Cellule
      
      'Effacer les espaces de base.xls.
     Call SupprEspaces  'Module 4
     
     'Effacer les caractères (ï>>¿) BOM (UTF_8)
     Call SupprimerCar  'Module 5
    End Sub


Je ne sais pas si c'est la meilleure solution mais ça fonctionne.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour,
Peux-tu préciser plus nettement ce que tu appelles "tableau", dans ton appli ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut

Pour la catégorie de la question, tu n'étais pas loin : Pas du VBS mais du VBA

Au lieu d'insérer une ligne vierge, pourquoi n'essayerais-tu pas de copier une ligne sans data mais avec ta mise en forme conditionnelle, puis d'insérer cette ligne copier en ligne 3.
Au pire, tu dupliques la ligne 4 qui contient peut être des données, puis tu vide le contenu des cellules (ClearContent) avant de les remplacer par celles de ton 'import'.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour, jack

La solution existe. Mais ce qui ne va pas, c'est l'utilisation de la méthode copy, dans ce cas.

Il faudrait par ailleurs savoir ce qu'il entend exactement par "tableau" car :
- si la feuille, c'est une solution
- si une plage nommée (ou une plage non encore nommée mais délimitée), c'en est une autre.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
47
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
7 décembre 2014

Salut Ucfoutu !

En fait les fichiers sont disposés ainsi :

Pour le fichier code.xls http://hpics.li/538a13e
Pour le fichier base.xls http://hpics.li/95cf2b1

Ce n'est pas un tableau proprement dit mais pour moi s'en est un.
Messages postés
47
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
7 décembre 2014

Salut Jack, je n'avais pas pensé a ta solution, c'est vrai qu'elle peut-être intéressante mais, si je copie une ligne vide, le problème c'est que la suite du contenu ne descendra pas si ?

Exemple.
Le tableau base.xls est completement vide a partir de la ligne 3. Je lance le fichier code.xls qui va coller son contenue a la ligne 3 du classeur base.xls

J'enregistre je sauvegarde.

Je relance code.xls, qui envoie une nouvelle donné au classeur base.xls, pour cela j'insère une ligne entre 2 et 3 pour venir coller celle nouvelle ligne. La donnée collée à la première étape descend donc a la 4 ème ligne. Puis un autre article vient se greffer, il descend a la ligne 5 me retrouvant avec 3 articles dans le classeur.

Si je copie une ligne vide avec son format entre la ligne 2 et 3 ca ne va pas incrémenter le fichier si ?
Messages postés
47
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
7 décembre 2014

Donc oui en effet, les tableaux ne sont pas délimité, ils font partie intégrante de la feuille, il n'y a rien d'autres que ces infos la dans les classeurs.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Il s'agit donc finalement de deux feuilles.
Ouvre ton aide en ligne sur la propriété Resize (Range.Resize). Tu y verras comment redimensionner une plage (et cela te sera peut-être utile pour ta mise en forme conditionnelle sur une plage nommée agrandie)
En lieu et place de la méthode copy (après avoir ajouté ta ligne) ===>>
regarde ce que fait ce petit test (exemple) :
toto = Sheets("Feuil2").Range("B9:E9")
  Sheets("Feuil1").Range("C11:F11") =  toto

ce qui se trouve sur feuil2 en B9:C9 est recopié sans mise en forme sur Feuil1 en C11:F11

Cela devrait te donner quelques idées.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
47
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
7 décembre 2014

J'ai du forcer la copie des valeurs uniquement entre le code.xls et le base.xls, si ça se trouve mon code fonctionnait parfaitement, il me suffisait juste de faire un PasteSpecial Paste:=X1PasteValues.