XL 2013 Insérer un texte spécifique dans une nouvelle cellule

Packers#12

XLDnaute Nouveau
Bonjour à tous,

La question est un peu plus complexe que ne le laisse paraître le titre.

Pour situer le contexte : J'ai réalisé un fichier de suivi de projets utilisé par différentes personnes.
Chacun d'entre eux a son propre fichier indépendant.

Je suis à présent en train de réaliser un fichier global qui me permettra de récupérer une plage de données bien définie (correspondant à leur liste de projet) dans chacun de leur fichier de suivi.
Cela me permettra de dérouler tous les projets en cours sans avoir à ouvrir à chaque fois leur fichier de suivi perso.

J'ai commencé à rédiger un bout de code qui me permet de récupérer une plage de données d'une feuille "Ongoing" (feuille pour les projets en cours) d'un classeur A vers mon fichier globalisateur.

Par contre, étant donné que les projets de 5 personnes différentes vont être réunis sur une même feuille, je souhaiterais ajouter une nouvelle colonne (colonne A) reprenant leurs initiales pour les différencier facilement.

C'est la que je coince...
Je pensais réutiliser les initiale de chaque personne présente dans leur titre de document (dans le bout de code ci-dessous => Initiale : MV), mais je ne sais même pas si c'est possible et encore moins comment faire.

Mon bout de code :

Sub Macro3()
'
' Macro3 Macro
'
Workbooks.Open Filename:= _
"\\00_Project Leader Guidelines\Order Book Model\Gestionnaire de projet MV.xlsm"
Range("A4:Z65536").Select
Selection.Copy
Windows("Report Project Leaders.xlsm").Activate
Range("A4").Select
ActiveSheet.Paste
Columns(1).Insert

Range("A4:A65536").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub

Avez-vous une idée ?

Merci d'avance pour votre aide.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

@Packer#12
Test OK sur mon PC
VB:
Sub Test_OK()
Dim nFich$, wB As Workbook, NomA$, lig&
nFich = "\\00_Project Leader Guidelines\Order Book Model\Gestionnaire de projet MV.xlsm"
Set wB = Workbooks.Open(nFich)
NomA = wB.BuiltinDocumentProperties.Item(3)
With wB.Sheets(1)
Set Plg = .Range("A4", .Cells(Rows.Count, "Z").End(3))
End With
With ThisWorkbook.Sheets(1)
    lig = .Cells(Rows.Count, "B").End(3)(2).Row
    Plg.Copy .Cells(lig, "B")
    .Cells(lig, "A") = NomA
End With
wB.Close False
End Sub
Je te laisse tester/adapter
(Si tu as des questions sur le code, poste-les)
 

Packers#12

XLDnaute Nouveau
Bonjour Staple1600 et merci pour ta réponse !

On y est presque.
Cela fonctionne plutôt bien, j'ai juste un petit soucis, ton code me copie uniquement les 4 premières lignes de la feuille.
Le truc c'est que mes 3 premières lignes correspondent aux cellules de mises en pages de mon tableau (voir image jointe).

J'ai trifouillé un peu et j'ai réussi à étendre ma plage de cellule pour prendre toutes mes données en compte mais les 3 premières lignes restent présentes. :(
T'aurais une idée pour pallier ce problème ?
 

Pièces jointes

  • Capture Tableau.JPG
    Capture Tableau.JPG
    54.8 KB · Affichages: 23

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@Packers#12
Tu es sur que tu arrives à ouvrir tes classeurs ?
Car on peut lire dans ton code
nFich = "Nom du dossier NM-CS.xlsm"
Où est le chemin du dossier (compare avec mon code du message#2)

Et si on fait ce simple test, le MsgBox affiche 9
Code:
Sub test()
With ThisWorkbook.Sheets(1)
    lig = .Cells(Rows.Count, "B").End(3)(2).Row
    MsgBox lig
End With
C'est donc en B9 que se fera la première copie
 

Staple1600

XLDnaute Barbatruc
Re

Au vu de ton code dans ton classeur, je te propose de simplifier (en passant la macro en macro avec paramétres)
VB:
Sub traitements()
Dim Chemin$
Application.ScreenUpdating = False
'ici mettre le chemin et le nom du dossier contenant les classeurs à copier
Chemin = "C:\Users\STAPLE\"
Update_RPL Chemin, "test1.xlsx"
Update_RPL Chemin, "test2.xlsx"
Update_RPL Chemin, "test3.xlsx"
End Sub

Private Sub Update_RPL(strPath$, nFich)
Dim wB As Workbook, NomA$, lig&
Set wB = Workbooks.Open(strPath & nFich)
NomA = wB.BuiltinDocumentProperties.Item(3)
With wB.Sheets(1)
Set Plg = .Range("A500", .Cells(Rows.Count, "Z").End(3))
End With
With ThisWorkbook.Sheets(1)
    lig = .Cells(Rows.Count, "B").End(3)(2).Row
    Plg.Copy .Cells(lig, "B")
    .Cells(lig, "A") = NomA
End With
wB.Close False
Set wB = Nothing
End Sub
J'ai testé sur mon PC et la copie se fait sur la feuille nommée:Report Project Leaders dont les lignes 1 à 5 ne sont absolument pas altérées par la recopie.
C'est dans la macro traitements que tu renseignes les classeurs à copier.
 

Packers#12

XLDnaute Nouveau
Ca marche bien !
Par contre comment je fait justement pour ne pas prendre en comptes dans la macro les lignes 3 à 5 qui correspondent à une copie de l'entête de mon tableau ?
Je voudrais garder seulement l'entête de 2 lignes déjà présent sur la feuille d'origine de mon "Report Project Leaders" et copier mes données à la suite de ces 2 lignes.
Est-ce que tu peux aussi annuler l'ajout du "nom prénom" en colonne A stp, ça n'est finalement plus très utile vu que j'ai directement ajouté la colonne avec les initiales des Project Managers dans les fichiers initiaux ?

J'ai bien essayé de le modifier moi-même à plusieurs reprises, mais j'ai rien obtenu hormis des bug...
Je t'avoue que ma compréhension dans ta macro est devenue très limitée. Ca dépasse mes compétences ce que t'écris là o_O
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@Packers#12
[(A)]=>Je voudrais garder seulement l'entête de 2 lignes déjà présent sur la feuille d'origine de mon "Report Project Leaders" et copier mes données à la suite de ces 2 lignes.
[(B)]=>Est-ce que tu peux aussi annuler l'ajout du "nom prénom" en colonne A stp, ça n'est finalement plus très utile vu que j'ai directement ajouté la colonne avec les initiales des Project Managers dans les fichiers initiaux ?
[(A)] C'est déjà ce que fait la macro:
La recopie se fait dans la première cellule vide de la colonne B
Si par exemple, la dernière cellule non vide en colonne B est B5, alors recopie en B6
Si par exemple, la dernière cellule non vide en colonne B est B2, alors recopie en B3
Donc si la dernière cellule non vide en colonne B est BX*, alors recopie en BX*+1
*:X=numéro de ligne

[(B)] Do it your self! ;)
C'est point compliqué
Il est facile d'identifier la ligne de code qui ajoute le Nom
Tu n'en veux plus?
Bah supprime la ligne de code idoine, camarade ;)
 

Packers#12

XLDnaute Nouveau
Bonjour Staple1600,

C'est bon j'ai eu un peu plus de temps pour me plonger pleinement dans ta macro.
Je l'ai un peu revu et ajouté des choses en plus de dernière minute.
Tout marche nickel à présent.

Merci beaucoup pour ton aide. :)

Cordialement.
 

Discussions similaires

Statistiques des forums

Discussions
312 160
Messages
2 085 838
Membres
103 000
dernier inscrit
Nath13