Code macro pour copier coller sur une autre feuille excel sans cases vides

Aurel73

XLDnaute Nouveau
Bonjour à toutes et à tous,

Je suis novice (vraiment débutant) en matière de VBA.
Mon problème est le suivant : sous excel 2010, je souhaite pouvoir copier des données d'une feuille 1 (contenus sur plusieurs colonnes) en supprimant les cellules vides afin de les coller à un emplacement spécifique sur une feuille 2...

Après de longues heures de recherche, j'ai trouvé un code qui me permet de suprimer les cases vides :

Sub masquer_ligne_Vide()
Dim cel As Range
For Each cel In Range("A1:A100")
If cel = "" Then
cel.EntireRow.Hidden = True
End If
Next
End Sub

Mais je ne trouve pas la suite...

Alors j'appel à une "ame" charritable qui voudrait bien m'aider...

Par avance merci,

Cordialement,
 

job75

XLDnaute Barbatruc
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

Bonjour Aurel73, bienvenue sur XLD, salut gosselien,

Cette solution vous conviendra peut-être.

Clic droit sur l'onglet Feuil2 et Visualiser le code.

Sur la feuille VBA affichée collez cette macro :

Code:
Private Sub Worksheet_Activate()
Dim t, ncol%, rest(), i&, n&, j%
t = Feuil1.UsedRange 'Feuil1 => CodeName de la feuille source
ncol = UBound(t, 2)
ReDim rest(1 To UBound(t), 1 To ncol)
For i = 1 To UBound(t)
  If t(i, 1) <> "" Then
    n = n + 1
    For j = 1 To ncol
      rest(n, j) = t(i, j)
    Next j
  End If
Next i
If n Then [A1].Resize(n, ncol) = rest
Rows(n + 1 & ":" & Rows.Count).Delete
End Sub
Elle s'exécute quand on active Feuil2.

Elle est très rapide car elle utilise des tableaux VBA.

Fichier joint.

A+
 

Pièces jointes

  • Classeur(1).xlsm
    21.4 KB · Affichages: 63
  • Classeur(1).xlsm
    21.4 KB · Affichages: 61

Aurel73

XLDnaute Nouveau
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

Bonjour et merci pour le code...

Vous avez de manière globale répondu à ma problématique... Cependant, si vous me permettez "d'abuser" de votre savoir??? Je souhaiterai pouvoir choisir un emplacement "exact" sur la feuille 2 des cellules "copier". En fait il faudrait que les cellules de la feuilles 1 soit recopier sur la feuille 2 de la ligne 3 à 20 et de la ligne 25 à 40. Ceci dans le but de créer une mise en page.

J'espère que mon explication vous semble clair?

Je vous remercie sincèrement de votre aide...

Cordialement,
 

job75

XLDnaute Barbatruc
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

Bonjour Aurel73,

Pour faire un travail sérieux il faudrait votre fichier mais enfin voyez ceci :

Code:
Private Sub Worksheet_Activate()
Dim dest1 As Range, dest2 As Range, h1&, h2&
Dim t, ncol%, rest1(), rest2(), i&, n1&, j%, n2&
Set dest1 = [3:20] 'à adapter
Set dest2 = [25:40] 'à adapter
h1 = dest1.Rows.Count
h2 = dest2.Rows.Count
t = Feuil1.UsedRange 'Feuil1 => CodeName de la feuille source
ncol = UBound(t, 2)
ReDim rest1(1 To h1, 1 To ncol)
ReDim rest2(1 To h2, 1 To ncol)
For i = 1 To UBound(t)
  If t(i, 1) <> "" Then
    If n1 < h1 Then
      n1 = n1 + 1
      For j = 1 To ncol
        rest1(n1, j) = t(i, j)
      Next j
    ElseIf n2 < h2 Then
      n2 = n2 + 1
      For j = 1 To ncol
        rest2(n2, j) = t(i, j)
      Next j
    End If
  End If
Next i
Application.ScreenUpdating = False
Union(dest1, dest2) = Empty 'RAZ
If n1 Then dest1.Resize(n1, ncol) = rest1
If n2 Then dest2.Resize(n2, ncol) = rest2
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Classeur(2).xlsm
    24.2 KB · Affichages: 59
  • Classeur(2).xlsm
    24.2 KB · Affichages: 51
Dernière édition:

job75

XLDnaute Barbatruc
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

Re,

Notez que si l'on ne veut pas copier les lignes de titres en Feuil1 on écrira :

Code:
t = Feuil1.UsedRange.Offset(1) 'Feuil1 => CodeName de la feuille source
ou :

Code:
t = Feuil1.UsedRange.Offset(2) 'Feuil1 => CodeName de la feuille source
suivant qu'il y a une ou deux lignes de titres.

A+
 

job75

XLDnaute Barbatruc
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

Re,

Avec un critère de choix on peut ventiler les lignes par zone, voyez les fichiers (3) et (3 bis).

A+
 

Pièces jointes

  • Classeur(3).xlsm
    25.4 KB · Affichages: 50
  • Classeur(3 bis).xlsm
    24.7 KB · Affichages: 54
  • Classeur(3).xlsm
    25.4 KB · Affichages: 48

Aurel73

XLDnaute Nouveau
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

Bonjour,

Merci pour vos différentes réponses... j'avoue que c'est un peu trop compliqué pour moi...
Pour vous apporter quelques informations complémentaires, je vous ai mis en PJ le fichier sur lequel je travail...

Par rapport à ce fichier mon but est le suivant :

L'onglet "CHIFFRAGE" est celui sur lequel les données sont entrées, seulement, je n'ai pas besoin de toutes les cellules lors des différents chiffrages. Ce nombre est variable... Mon souhait serait de pouvoir "dupliquer" cette mise en page sur la feuille "VERSION IMPRIMABLE" en supprimant les cellules vides de chaque tableau mais sans modifier la mise en page "générale". Cela afin d'optimiser l'impression...Est ce possible?
Je me permets de vous indiquer que des colonnes sont "masquées"...

Enfin, question subsidiaire : la cellule "J8" indique les choix des modèles. Lorque cette cellule indique : "RA" ou "Perso" j'aimerai :

- Soit "griser /hachurer" les lignes 12 à 29 (car elles ne correspondent pas au choix des modèles)
- Soit les "masquer

Je vous remercie sincèrement...

Cordialement,
 

job75

XLDnaute Barbatruc
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

Bonjour Aurel73,

C'est très simple, il y a peu de cellules à traiter, pas besoin de tableaux VBA :

Code:
Private Sub Worksheet_Activate()
Dim r As Range, masque As Range
Set r = [H36:H45,H49:H70,H74:H78,H82:H95,H99:H134,H138:H159,H163:H194,H198:H202,H206:H219]
Application.ScreenUpdating = False
Feuil1.Cells.Copy [A1] 'Feuil1 est le CodeName de la feuille
[A1].Copy [A1] 'pour alléger la mémoire
For Each r In r
  If r = "" Then Set masque = Union(r, IIf(masque Is Nothing, r, masque))
Next
If Not masque Is Nothing Then masque.EntireRow.Hidden = True
If [J8] = "RA" Or [J8] = "Perso" Then Rows("12:29").Hidden = True
Me.PageSetup.PrintArea = "$H:$P" 'zone d'impression à adapter au besoin
End Sub
Fichier joint.

A+
 

Pièces jointes

  • Chiffrage sept 2015(1).xlsm
    351.6 KB · Affichages: 66

Aurel73

XLDnaute Nouveau
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

Merci!!!!Vous êtes trop fort!!!
Lorsque je ne suis pas dans les deux cas indiqués au post précédent, il faut que les lignes 17 à 29 (les deux tableaux, "prestations chauffage" "finitition")de la feuille "chiffrage" apparaisse dans l'onglet "version imprimable"...
Ca semble tellement facile pour vous...
 

job75

XLDnaute Barbatruc
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

Lorsque je ne suis pas dans les deux cas indiqués au post précédent, il faut que les lignes 17 à 29 (les deux tableaux, "prestations chauffage" "finitition")de la feuille "chiffrage" apparaisse dans l'onglet "version imprimable"...

Au post #8 vous parlez des lignes 12 à 29 :confused:

Ces lignes sont affichées si J8 est différent de "RA"et de "Perso".

Sauf bien sûr si vous les masquez dans la feuille source "CHIFFRAGE".

A+
 

Aurel73

XLDnaute Nouveau
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

En regardant de plus pret, lorsque je viens modifier les lignes de mes tableaux "chiffrage", les lignes ajoutées n'apparaissent pas sur l'onglet "version" imprimable. Y a t il une manipulation pour actualiser l'onglet?

Merci
 

Aurel73

XLDnaute Nouveau
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

Bien entendu, il me faut les lignes 12 à 29... Sur la version imprimable du fichier envoyé, apparaissent les lignes 12 à 15 mais pas les lignes 16 à 29
Le fait qu'elles contiennent des cases à cocher?

A+
 

job75

XLDnaute Barbatruc
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

Re,

Je vous ai répondu clairement.

Si ça ne vous convient pas c'est à vous d'être clair.

Vous parlez de "modifier les lignes" j'espère que vous n'ajoutez ou ne supprimez aucune ligne dans la feuille source.

Sinon plus rien ne va avec cette macro...

A+
 

Aurel73

XLDnaute Nouveau
Re : Code macro pour copier coller sur une autre feuille excel sans cases vides

Re,

Désolé si je ne suis pas très clair...

le but est justement de pouvoir modifier la page "chiffrage" en ajoutant ou non les variables des listes déroulantes qu'elles contiennent.
l'onglet "version imprimable ne reprenant que les lignes dans lesquelles un choix à été fait dans l'onglet chiffrage.

Dans le cas présent, si je change une variable dans l'onglet chiffrage, cette même ligne n'est pas reportée sur la "version imprimable"...

Merci du temps consacré à notre soucis
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 306
Membres
102 859
dernier inscrit
Diallokass