Report automatique de certaines colonnes

Oudy

XLDnaute Nouveau
Bonjour,

Vous trouverez en pièce jointe un fichier Excel ("planning transport"). L'idéal serait que certaines colonnes se reportent automatiquement sur un autre classeur Excel (à savoir : "jour RDV", "nom patient", "prénom patient", "secteur", "nom et prénom de l'AcFT", "conditions de transport", "accompagnement", "si accompagnant, qui est l'accompagnant ?", "heure RDV", "destination", "service", "médecin", "médecin CHS demandeur" et "observations").
J'ai essayé plusieurs formules qui n'ont pas l'air de fonctionner... une formule fonctionne à condition que ce soit un nombre restreint de cellules à reporter (or, dans ce cas, ce sont des colonnes entières à reporter).

De plus, j'aimerais conserver le système de filtres sur les deux fichiers.

J'ai également essayé de reporter les colonnes à l'aide d'un "collage avec liaison" mais c'est comme si ça me transformait les colonnes en image. Impossible alors d'avoir un système de filtres sur le fichier où les données sont reportées...

J'aimerais également que la colonne "si accompagnant, qui est l'accompagnant" soit saisie uniquement si on répond "oui" à la colonne "accompagnement".

Comment puis-je faire?

Vous remerciant
 

Pièces jointes

  • PLANNINGTRANSPORT.xlsx
    19.7 KB · Affichages: 35
  • PLANNINGTRANSPORT.xlsx
    19.7 KB · Affichages: 34
  • PLANNINGTRANSPORT.xlsx
    19.7 KB · Affichages: 42

job75

XLDnaute Barbatruc
Re : Report automatique de certaines colonnes

Bonjour Oudy, salut st007,

1ère remarque.

De plus, j'aimerais conserver le système de filtres sur les deux fichiers.

C'est extrêmement contraignant, car si l'on veut conserver les filtrages il faut copier les valeurs de chaque cellule source vers chaque cellule de destination : ce sera très long sur un grand tableau, mais c'est possible et c'est même élémentaire, il y a de nombreux exemples sur le forum.

2ème remarque.

Votre liste de colonnes n'est guère utile car les textes ne correspondent pas au contenu des cellules.

Donnez-nous plutôt la liste des numéros de colonnes que vous voulez copier.

Il faut aussi donner la liste des numéros de colonnes correspondants du fichier destination, si elle est différente.

A+
 
Dernière édition:

Oudy

XLDnaute Nouveau
Re : Report automatique de certaines colonnes

Vous trouverez en pièce jointe un nouveau fichier (merci de ne pas tenir compte de l'ancien).

Les colonnes dont les données sont à reporter sont les suivantes : A, B, C, D, E, F, G, H, I, J, K, L, M, N et O

Ci-contre, la correspondances des colonnes entre le fichier en pièce jointe et avec le fichier de destination :
- Fichier joint : colonne A --> colonne A pour fichier de destination
- Fichier joint : colonne B --> colonne B pour fichier de destination
- Fichier joint : colonne C --> colonne C pour fichier de destination
- Fichier joint : colonne D --> colonne D pour fichier de destination
- Fichier joint : colonne E --> colonne F pour fichier de destination
- Fichier joint : colonne F --> colonne G pour fichier de destination
- Fichier joint : colonne G --> colonne H pour fichier de destination
- Fichier joint : colonne H --> colonne I pour fichier de destination
- Fichier joint : colonne I --> colonne J pour fichier de destination
- Fichier joint : colonne J --> colonne K pour fichier de destination
- Fichier joint : colonne K --> colonne L pour fichier de destination
- Fichier joint : colonne L --> colonne M pour fichier de destination
- Fichier joint : colonne M --> colonne N pour fichier de destination
- Fichier joint : colonne N --> colonne O pour fichier de destination
- Fichier joint : colonne O --> colonne P pour fichier de destination

Pour résumer, une seule colonne vient s'ajouter au fichier de destination (colonne E).

Merci
 

Pièces jointes

  • PLANNING PR FORUM.xlsx
    14.9 KB · Affichages: 40

job75

XLDnaute Barbatruc
Re : Report automatique de certaines colonnes

Re,

1) Enregistrez le fichier source en .xlsm (acceptant les macros).

2) Placez cette macro dans un module standard (Alt+F11) de ce fichier :

Code:
Sub Transfert()
Dim F As Worksheet, tablo, i&, j%, k%
Set F = Workbooks("PLANNING PR FORUM.xlsm").Sheets("JANVIER14") 'à adapter
tablo = F.UsedRange
For i = 2 To UBound(tablo) 'titres en ligne 1
  For j = 1 To 15 'colonnes A à O
    k = IIf(i < 5, j, j + 1)
    Cells(i, k) = tablo(i, j)
  Next
Next
End Sub
3) Adaptez-la au besoin avec le nom du fichier et de la feuille sources.

4) Activez le classeur et la feuille de destination et lancez la macro (Alt+F8)

A+
 
Dernière édition:

Oudy

XLDnaute Nouveau
Re : Report automatique de certaines colonnes

Un grand merci !

Je pense avoir suivi les différentes étapes et rien ne se passe au niveau du fichier de destination. Il y a sans doute une manipulation que je n'ai pas réalisée mais je ne vois pas laquelle.
 

job75

XLDnaute Barbatruc
Re : Report automatique de certaines colonnes

Re,

Ah la barbe, un i s'était glissé où il ne fallait pas, voici la bonne macro :

Code:
Sub Transfert()
Dim F As Worksheet, tablo, i&, j%, k%
Set F = Workbooks("PLANNING PR FORUM.xlsm").Sheets("JANVIER14") 'à adapter
tablo = F.UsedRange
For i = 2 To UBound(tablo) 'titres en ligne 1
  For j = 1 To 15 'colonnes A à O
    k = IIf(j < 5, j, j + 1)
    Cells(i, k) = tablo(i, j)
  Next
Next
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Report automatique de certaines colonnes

Re,

Dans la feuille destination, il faut sans doute effacer les valeurs sous celles qui ont été transférées :

Code:
Sub Transfert()
Dim F As Worksheet, tablo, us&, ud&, j%, k%, i&
Set F = Workbooks("PLANNING PR FORUM.xlsm").Sheets("JANVIER14") 'à adapter
tablo = F.UsedRange
us = UBound(tablo)
ud = ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count
For j = 1 To 15 'colonnes A à O
  k = IIf(j < 5, j, j + 1)
  For i = 2 To us 'titres en 1ère ligne
    Cells(i, k) = tablo(i, j) 'transfert
  Next
  For i = i To ud
    Cells(i, k) = "" 'effacement
  Next
Next
End Sub

Nota
: si la feuille source est vide, bien entendu la feuille destination le sera...

A+
 

Oudy

XLDnaute Nouveau
Re : Report automatique de certaines colonnes

J'ai rentré ce nouveau code, ça fonctionne. En revanche, les données ne se mettent pas à jour toutes seules. Pour que les données s'actualisent, je fais "alt+F8". Est-ce normal ?

Encore merci
 

job75

XLDnaute Barbatruc
Re : Report automatique de certaines colonnes

Re,
En revanche, les données ne se mettent pas à jour toutes seules. Pour que les données s'actualisent, je fais "alt+F8". Est-ce normal ?

Alt+F8 est un des moyens pour lancer une macro, on peut aussi l'affecter à un bouton.

Et on peut aussi la lancer à l'aide d'une macro événementielle, très nombreux exemples sur le forum.

Bonne fin de soirée.

A+
 

job75

XLDnaute Barbatruc
Re : Report automatique de certaines colonnes

Bonjour Oudy, le forum,

Voici une une solution par macro événementielle.

Elle doit être placée dans le ThisWorkbook du fichier destination.

Si le fichier source n'a plus de macro il peut être enregistré en .xlsx.

Les 2 fichiers doivent être dans le même répertoire.

La macro se lance quand on ouvre ou active le fichier destination :

Code:
Private Sub Workbook_Activate()
Dim chemin$, nomfich$, nomfeuille$, wb As Workbook
Dim F As Worksheet, tablo, j%, k%, i&
chemin = ThisWorkbook.Path & "\" 'à adapter
nomfich = "PLANNING PR FORUM.xlsx" 'nom et extension à adapter
nomfeuille = "JANVIER14" 'à adapter
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
On Error Resume Next
Set wb = Workbooks(nomfich)
If wb Is Nothing Then Set wb = Workbooks.Open(chemin & nomfich)
If wb Is Nothing Then MsgBox "Fichier source introuvable": GoTo 1
Set F = wb.Sheets(nomfeuille)
If F Is Nothing Then MsgBox "Feuille source introuvable": GoTo 1
Me.Activate: Sheets(1).Activate '1ère feuille, à adapter
tablo = F.UsedRange
For j = 1 To 15 'colonnes A à O
  k = IIf(j < 5, j, j + 1)
  For i = 2 To UBound(tablo) 'titres en 1ère ligne
    Cells(i, k) = tablo(i, j) 'transfert
  Next
  For i = i To ActiveSheet.UsedRange.Rows.Count
    Cells(i, k) = "" 'effacement
  Next
Next
1 Application.EnableEvents = True 'réactive les évènements
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Report automatique de certaines colonnes

Re,

Voici une autre solution, beaucoup plus rapide sur de grands tableaux.

Elle est utilisable si l'on accepte ces 2 conditions :

- les colonnes A: D et F:p de la feuille destination seront identiques aux colonnes A:O de la feuille source

- toutes les lignes de la feuille destination seront affichées si cette feuille est filtrée.

Voici la macro, toujours dans le ThisWorkbook du fichier destination :

Code:
Private Sub Workbook_Activate()
Dim chemin$, nomfich$, nomfeuille$, wb As Workbook
Dim F As Worksheet, FA As Worksheet
chemin = ThisWorkbook.Path & "\" 'à adapter
nomfich = "PLANNING PR FORUM.xlsx" 'nom et extension à adapter
nomfeuille = "JANVIER14" 'à adapter
Application.ScreenUpdating = False 'fige l'écran
Application.EnableEvents = False 'désactive les évènements
On Error Resume Next
Set wb = Workbooks(nomfich)
If wb Is Nothing Then Set wb = Workbooks.Open(chemin & nomfich)
If wb Is Nothing Then MsgBox "Fichier introuvable": GoTo 1
Set F = wb.Sheets(nomfeuille)
If F Is Nothing Then MsgBox "Feuille introuvable": GoTo 1
F.Copy 'document auxiliaire
Set FA = ActiveWorkbook.Sheets(1)
Me.Activate: Sheets(1).Activate '1ère feuille, à adapter
ActiveSheet.ShowAllData 'affiche toutes les lignes
FA.ShowAllData 'affiche toutes les lignes
FA.[A:D].Copy [A1]
FA.[E:O].Copy [F1]
FA.Parent.Close False 'ferme le document auxiliaire
1 Application.EnableEvents = True 'réactive les évènements
End Sub
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Report automatique de certaines colonnes

Re,

On peut tout de même ne copier que les valeurs et ne pas copier les titres :

Code:
Private Sub Workbook_Activate()
Dim chemin$, nomfich$, nomfeuille$, wb As Workbook
Dim F As Worksheet, FA As Worksheet, derlig&
chemin = ThisWorkbook.Path & "\" 'à adapter
nomfich = "PLANNING PR FORUM.xlsx" 'nom et extension à adapter
nomfeuille = "JANVIER14" 'à adapter
Application.ScreenUpdating = False 'fige l'écran
Application.EnableEvents = False 'désactive les évènements
On Error Resume Next
Set wb = Workbooks(nomfich)
If wb Is Nothing Then Set wb = Workbooks.Open(chemin & nomfich)
If wb Is Nothing Then MsgBox "Fichier introuvable": GoTo 1
Set F = wb.Sheets(nomfeuille)
If F Is Nothing Then MsgBox "Feuille introuvable": GoTo 1
F.Copy 'document auxiliaire
Set FA = ActiveWorkbook.Sheets(1)
Me.Activate: Sheets(1).Activate '1ère feuille, à adapter
ActiveSheet.ShowAllData 'affiche toutes les lignes
FA.ShowAllData 'affiche toutes les lignes
Intersect([A:D,F:P], Range("A2:P" & Rows.Count)) = "" 'RAZ
derlig = FA.[A:O].Find("*", , xlValues, , xlByRows, xlPrevious).Row + 1
Range("A2:D" & derlig) = FA.Range("A2:D" & derlig).Value
Range("F2:P" & derlig) = FA.Range("E2:O" & derlig).Value
FA.Parent.Close False 'ferme le document auxiliaire
1 Application.EnableEvents = True 'réactive les évènements
End Sub
A+
 
Dernière édition:

Discussions similaires

Réponses
10
Affichages
299

Statistiques des forums

Discussions
312 450
Messages
2 088 515
Membres
103 873
dernier inscrit
Sabin