Coller uniquement sur cellules non masquées

TraceFinder

XLDnaute Nouveau
Bonjour,

J'ai un problème avec mes tableaux que je n'arrive pas à résoudre. Je vais tenter de faire simple pour l'expliquer.

Je dispose de trois tableaux de résultats obtenus en 2011, 2012 et 2013. J'aimerais réunir les données en un seul tableau, et donc pour cela effectuer un copier-coller des trois tableaux par année. En images, voilà ce que ça donne :

Les tableaux par année se présentent sous cette forme :
Tableau1.jpg

Je souhaite mettre les données dans un tableau de cette forme :
Tableau2.jpg

Pour cela, je pensais copier les données d'abord de 2011 en masquant toutes les colonnes de 2012 et 2013, puis en allant copier les cellules du tableau de 2011 et en les collant dans le tableau général. Cependant, Excel copie également dans les cellules masquées, ce qui fait que mon tableau général ne se remplit pas correctement.

Quelqu'un a-t-il une aide à me proposer ? (les tableaux que j'ai donnés sont des exemples, les véritables tableaux de 2011, 2012 et 2013 contiennent chacun environ 700 colonnes et 60 lignes, ce qui rend l'opération colonne par colonne absolument inconcevable en terme de temps).
 

Pièces jointes

  • Tableau2.jpg
    Tableau2.jpg
    18.4 KB · Affichages: 78
  • Tableau2.jpg
    Tableau2.jpg
    18.4 KB · Affichages: 73

camarchepas

XLDnaute Barbatruc
Re : Coller uniquement sur cellules non masquées

Bonjour Claude , Trace Finder ,

Et oui , une solution à te proposer ,

Nous mettre un fichier à disposition reprennant la structure de ton fichier, mais avec des données fictives .

Car comme Claude, je trouve les copies écrans inexploitables .

Je pense qu'une solution par vba serait le top ,

faut-il encore avoir tous les éléments pour construire cette routine .

un exemple avant / aprés est toujours un plus .

La connaissance du problème est du domaine de la personne qui a le problème .
 

TraceFinder

XLDnaute Nouveau
Re : Coller uniquement sur cellules non masquées

Bonjour,

Merci à tous les deux pour vos réponses.

Voici en pièce jointe un fichier Excel contenant, de manière simplifiée, le tableau que je souhaite construire.

Le but est de copier les données de chaque tableau "Résultats 2011", "Résultats 2012" et "Résultats 2013" dans le "Tableau général".

Ma méthode, par exemple pour les données de 2011, était la suivante :
1) Dans le tableau général, masquer les colonnes ne relevant pas de 2011 (C, D, F, G, I, J, L, M, O et P)
2) Dans le tableau "Résultats 2011", copier les résultats
3) Coller ces données dans le tableau général
4) Réafficher les colonnes masquées

Cependant, en procédant ainsi, Excel colle également dans les colonnes masquées. Ainsi, toujours avec l'exemple de 2011, au lieu de remplir les colonnes B, E, H, K et N, je remplis les colonnes B à F.

J'ai bien essayé, avant d'effectuer le collage, de sélectionner les cellules de destination après avoir masqué les colonnes en utilisant l'outil de sélection des cellules visibles uniquement. Néanmoins, le collage ne s'effectue pas correctement non plus.

Voilà, j'espère qu'avec ce fichier cela sera plus clair. N'hésitez pas à me demander davantage de précisions.

Merci d'avance
 

Pièces jointes

  • Exemple.xlsx
    13.3 KB · Affichages: 44
  • Exemple.xlsx
    13.3 KB · Affichages: 55
  • Exemple.xlsx
    13.3 KB · Affichages: 55

camarchepas

XLDnaute Barbatruc
Re : Coller uniquement sur cellules non masquées

Re ,

Suite aux précisions ,

voici un code à copier et mettre dans un module standard .

Code:
Sub Copie()
Dim LigneFin As Long
Dim Ville As String, Onglet As String, Col_Fin As String
Dim Cellule As Range
Col_Fin = Range("XFD3").End(xlToLeft).Address
LigneFin = Range("A" & Rows.Count).End(xlUp).Row
For Each Cellule In Sheets("Tableau général").Range("B3:" & Col_Fin)
If Cellule.Offset(-1, 0) <> "" Then Ville = Cellule.Offset(-1, 0): colonne = colonne + 1
Onglet = "Résultats " & Cellule
 Sheets(Onglet).Range("B1").Offset(0, colonne) = Ville
 Sheets(Onglet).Range("B2:B" & LigneFin - 2).Offset(0, colonne) = Range(Cellule.Offset(1, 0).Address & ":" & Split(Cellule.Address, "$")(1) & LigneFin).Value
Next
End Sub
 

TraceFinder

XLDnaute Nouveau
Re : Coller uniquement sur cellules non masquées

Bonjour,

Désolé d'avoir mis si longtemps à répondre, j'ai essayé de résoudre mes problèmes de compréhension par moi-même, mais comme je n'y connais vraiment pas grand chose en VBA, c'est un peu compliqué.

Camarchepas, j'ai essayé ton code sur mon fichier. J'imagine que quand tu l'as essayé de ton côté, il marchait, donc je me dis qu'il y a quelque chose que je ne fais pas correctement. Quoi qu'il en soit, en copiant ton code et en l'exécutant, je ne remplis pas le Tableau général. Ce qu'il se passe, ou en tout cas ce à quoi j'aboutis, c'est que sur chaque onglet "Résultats" :
- une colonne "Paris" s'insère entre la colonne "Structure" et la colonne "Paris" originale
- seule cette colonne est remplie des résultats obtenus pour Paris, toutes les autres se vident.

Il y a de fortes chances pour que ce soit un truc tout bête, mais honnêtement, je ne sais pas quoi. Au départ, je pensais qu'il fallait compléter l'année dans le code au niveau de Onglets = "Résultats " mais apparemment ce n'est pas ça. Peux-tu m'aider ?
 

camarchepas

XLDnaute Barbatruc
Re : Coller uniquement sur cellules non masquées

Bonjour ,

en relisant ton enoncé , je faisais juste l'inverse de se que tu souhaites .

Voici le code pour synthétiser :

Code:
Sub Synthese()
 Dim LigneFin As Long, ColonneCible As Long
 Dim Ville As String, Col_Fin As String, Col_Fin2 As String, Année As String
 Dim Cellule As Range
 Dim Onglet As Worksheet
 Col_Fin = Sheets("Tableau général").Range("XFD3").End(xlToLeft).Address
 LigneFin = Sheets("Tableau général").Range("A" & Rows.Count).End(xlUp).Row
 For Each Onglet In ThisWorkbook.Worksheets
  If Left(Onglet.Name, 9) = "Résultats" Then
   Col_Fin2 = Onglet.Range("XFD1").End(xlToLeft).Address
   Année = Right(Onglet.Name, 4)

   For Each Cellule In Onglet.Range("B1:" & Col_Fin2)
    Ville = Cellule
   ColonneCible = Sheets("Tableau général").Range("A2:XFD2").Find(Ville, lookat:=xlWhole).Column
   ColonneCible = ColonneCible + Année - 2011
   Range("A4:A" & LigneFin).Offset(0, ColonneCible - 1) = Onglet.Range(Cellule.Offset(1, 0).Address & ":" & Cellule.Offset(LigneFin - 3, 0).Address).Value
   Next Cellule
  End If
 Next Onglet
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 176
Messages
2 085 965
Membres
103 069
dernier inscrit
jujulop