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

Résolu
azertym Messages postés 47 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 7 décembre 2014 - 15 mars 2012 à 10:34
azertym Messages postés 47 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 7 décembre 2014 - 15 mars 2012 à 11:54
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

azertym Messages postés 47 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 7 décembre 2014
15 mars 2012 à 11:52
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.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 mars 2012 à 10:40
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 mars 2012 à 10:41
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)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 mars 2012 à 10:45
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
azertym Messages postés 47 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 7 décembre 2014
15 mars 2012 à 10:52
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.
0
azertym Messages postés 47 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 7 décembre 2014
15 mars 2012 à 10:59
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 ?
0
azertym Messages postés 47 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 7 décembre 2014
15 mars 2012 à 11:11
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 mars 2012 à 11:14
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
0
azertym Messages postés 47 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 7 décembre 2014
15 mars 2012 à 11:54
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.
0
Rejoignez-nous