Synthétiser plusieurs colonnes en une seule sans prendre en compte les cellules vides

testeuryann

XLDnaute Nouveau
Bonjour à tous,

Je souhaiterais arriver à synthétiser dans une seule colonne, plusieurs autres situées sur des feuilles différentes sans prendre en compte les cellules vides présentes dans les différentes colonnes à synthétiser.

Je ne suis pas sûr d'être très clair, aussi je vous joins un fichier exemple : j'aimerais pouvoir obtenir de manière automatique la colonne "Synthèse des noms sur les 3 semaines" de la feuille "Synthese des 3 semaines" à partir des colonnes "noms" présentent sur les feuilles "semaine 1", "semaine 2" et "semaine 3".

J'utilise excel 07, mais il faudrait que la solution soit "acceptée" par les versions précédentes (jusqu'à la version 2000)...

Merci d'avance à tous les spécialistes qui voudront bien se pencher sur mon problème.

Bonne soirée.
 

Pièces jointes

  • exemple.xls
    31.5 KB · Affichages: 94
  • exemple.xls
    31.5 KB · Affichages: 102
  • exemple.xls
    31.5 KB · Affichages: 98

job75

XLDnaute Barbatruc
Re : Synthétiser plusieurs colonnes en une seule sans prendre en compte les cellules

Bonsoir testeuryann, bienvenue sur XLD,

Autant pout moi, je n'avais pa vu le début de la semaine 1, ma question était inutile...

Edit : bonsoir Jean-Marcel

A+
 
Dernière édition:

testeuryann

XLDnaute Nouveau
Re : Synthétiser plusieurs colonnes en une seule sans prendre en compte les cellules

Quelle rapidité !!!

Merci Jean-Marcel, ça fonctionne parfaitement. Cependant, j'avoue ne pas y comprendre grand chose, penses-tu qu'une telle opération puisse se faire sans faire appel à une macro ?
 

job75

XLDnaute Barbatruc
Re : Synthétiser plusieurs colonnes en une seule sans prendre en compte les cellules

Re,

Une autre manière de faire :

Code:
Sub CopieSemaines()
Dim S1 As Worksheet, S2 As Worksheet, S3 As Worksheet, S As Worksheet
Application.ScreenUpdating = False
Set S1 = Sheets("Semaine 1"): Set S2 = Sheets("Semaine 2")
Set S3 = Sheets("Semaine 2"): Set S = Sheets("Synthese des 3 semaines")
S.Range("B2:B65536").Clear
S1.Range("C3", S1.Range("C65536").End(xlUp)).SpecialCells(xlCellTypeConstants, 2).Copy _
  S.Range("B2")
S2.Range("C3", S2.Range("C65536").End(xlUp)).SpecialCells(xlCellTypeConstants, 2).Copy _
  S.Range("B65536").End(xlUp)(2)
S3.Range("C3", S3.Range("C65536").End(xlUp)).SpecialCells(xlCellTypeConstants, 2).Copy _
  S.Range("B65536").End(xlUp)(2)
S.Range("B2:B65536").Interior.ColorIndex = xlNone
End Sub

A+
 

job75

XLDnaute Barbatruc
Re : Synthétiser plusieurs colonnes en une seule sans prendre en compte les cellules

Re,

Nettement plus simple :

Code:
Sub CopieSemaines()
Dim i As Byte
Application.ScreenUpdating = False
With Sheets("Synthese des 3 semaines")
  .Range("B2:B65536").Clear
  For i = 1 To 3
    Sheets(i).Range("C3:C65536").SpecialCells(xlCellTypeConstants, 2).Copy .Range("B65536").End(xlUp)(2)
  Next
  .Range("B2:B65536").Interior.ColorIndex = xlNone
End With
End Sub

A+
 

testeuryann

XLDnaute Nouveau
Re : Synthétiser plusieurs colonnes en une seule sans prendre en compte les cellules

Merci,

Je me doute que vous n'avez pas que ça à faire, mais débutant dans le monde très intéressant des macros, vous serait-il possible de m'expliquer un peu le fonctionnement du code que vous avez utilisé afin que je puisse les adapter pour d'autres documents ?

Merci encore.
 

job75

XLDnaute Barbatruc
Re : Synthétiser plusieurs colonnes en une seule sans prendre en compte les cellules

Re,

En ce qui me concerne, voici le dernier code commenté :

Code:
Sub CopieSemaines()
Dim i As Byte [COLOR="Red"]'déclare la variable i[/COLOR]
Application.ScreenUpdating = False [COLOR="Red"]'fige l'écran (accélère la macro et masque les changements[/COLOR]
With Sheets("Synthese des 3 semaines") [COLOR="red"]'évite de répéter cette feuille dessous (le point suffit, mais il est nécessaire)[/COLOR]
  .Range("B2:B65536").Clear [COLOR="red"]'efface tout en colonne B sauf B1[/COLOR]
  For i = 1 To 3 [COLOR="red"]'boucle sur les index des feuilles (n° de position)[/COLOR]
    Sheets(i).Range("C3:C65536").SpecialCells(xlCellTypeConstants, 2).Copy .Range("B65536").End(xlUp)(2) [COLOR="red"]'copie uniquement les cellules contenant du texte et les colle sur la cellule qui suit la dernière remplie[/COLOR]
  Next [COLOR="red"]'valeur suivante de i[/COLOR]
  .Range("B2:B65536").Interior.ColorIndex = xlNone [COLOR="red"]'efface les couleurs (pas les bordures)[/COLOR]
End With [COLOR="red"]'fin du bloc With[/COLOR]
End Sub

A+
 

job75

XLDnaute Barbatruc
Re : Synthétiser plusieurs colonnes en une seule sans prendre en compte les cellules

Re,

Non, je n'en ai même pas chez moi.

Perso j'ai appris VBA avec l'aide (touche F1) et l'enregistreur de macro (menu Outils-Macro-Nouvelle macro).

Commencer en réalisant des macros très simples et bien les comprendre.

Le forum est une excellente école, mais ça prend du temps en recherche.

Sinon, il existe beaucoup de bouquins. Voir à la FNAC ou ailleurs et commencer par les plus simples...

A+
 

job75

XLDnaute Barbatruc
Re : Synthétiser plusieurs colonnes en une seule sans prendre en compte les cellules

Bonsoir Jean-Marcel,

Excuse-moi pour le retard.

C'est vrai que j'ai trouvé ça sur le forum, pas dans l'aide VBA...

C'est comme Offset, mais plus court à écrire.

Et que le point de départ Range("B65536").End(xlUp)(0) c'est la cellule qui précède la dernière cellule.

Comme indices on peut mettre des valeurs positives ou négatives. Facile à tester.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 957
Membres
103 990
dernier inscrit
lamiadebz