Copie valeurs onglets dans un autre

Bonjour a tous,

Je suis tout a fait novice en programmation VBA et rencontre un soucis.

J'ai un fichier compose de 4 onglets repertoriant par marques les ventes de vehicules. Un onglet=une marque.

Je voudrais en creer un 5eme appele "CONSO" qui reprendrait donc toutes les valeurs des 4 premiers onglets.

A noter que les 5 onglets ont les memes caracteristiques en matieres de titre des colonnes...etc.

J'ai donc tente de creer un petit code qui ferait un copier/coller special des VALEURS de chacun des onglets dans celui intitule CONSO :

Sub Conso()

    Dim Fe As Worksheet
    Dim j As Integer
    Dim i As Integer
j = 0
For Each Fe In ThisWorkbook.Worksheets    
        If Fe.Name <> "CONSO" Then     

                    With Fe
                    i = 4                       
                                While Value.Cells(i, 4) <> ""
                                    i = i + 1
                                Next                     
                    ActiveCell.Range("A4:AV" & i).Select
                    Selection.Copy
                    Sheets("CONSO").Select
                    ActiveCell("A" & j).Select
                    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
                    Application.CutCopyMode = False 
  End With
        End If
 j = j + i
 Next Fe
End Sub

J'imagine bien que c'est loin d'etre la possibilite la plus efficiente mais j'ai essaye de faire ca avec mes moyens et ce de maniere tres scolaire.

A noter que mon tableau s'organise autour de la colonne D qui est celle avec le nom du modele vendu.

Je cherche donc a connaire le numero de la ligne avec le dernier vehicule vendu. En effet des formules sont tapees dans toutes les cellules et renvoient "" dans le cas ou celle-ci est vide. C'est pour cela que je ne veux ensuite que les valeurs differentes de "".

J'espere que quelqu'un prendra un peu de son temps pour m'expliquer,

En vous remerciant,

Nico

Bonjour kojak,

Envoie un fichier anonymisé en gardant la structure des données. Quelques lignes suffiront.

Sinon regarde du côté de la fonction consolider.

Merci de ta reponse,

Je t'ai fait un petit exemple. Le veritable tableau dispose de 48 colonnes, 4 onglets differents et un nombre de ligne aleatoire. Comme tu le verras, les formules sont appliquees a chaque cellule donc l'objectif est de trouver combien ont une valeur.

Je t'ai mis l'onglet que j'espere obtenir.

15exemple.xlsx (12.43 Ko)

Encore merci de me consacrer de ton temps,

Nico

Bonjour

Un essai :

Place ta feuille CONSO en 1er onglet

Le code :

Sub Regroupe()
Application.ScreenUpdating = False
Dim i As Integer, dlg As Integer, x As Integer

Worksheets("CONSO").Range("A4:C65536").Clear

For i = 2 To Worksheets.Count

With Worksheets(i)
       .Range("A4", .Cells(.Range("A65536").End(xlUp).Row, 3)).Copy
       Worksheets("CONSO").Range("A65536").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues
End With
Next i

dlg = Worksheets("CONSO").UsedRange.Rows.Count
For x = dlg To 4 Step -1
If Range("A" & x) = "" Then Rows(x).Delete
Next x

End Sub

Amicalement

Nad

Bonjour,

Merci pour ta proposition mais :

1- Les lignes vides ne sont pas supprimees. (A la vue du code, je ne comprends absolument pas pourquoi...)

2- Seules les deux premieres colonnes sont copiees.

3-Une alerte "Overflow" est apparue.

Que signifient les chiffres que tu as mis dans :

xxxx 3)).Copy

xxxxxxxxxx (2).PasteSpecial Paste:=xlPasteValues ?

Je vais essayer de travailler a partir de ce que tu m'as donne. C'est d'ailleurs bien plus propre que ce que j'avais initialement.

Re

Je te mets le fichier :

Nad

Ca marche super bien dans mon exemple.

Mais quand j'adapte la meme macro a mon fichier reel j'ai un message d'erreur 6, "Overflow".

Le debugger me dit que le probleme viendrait de la ligne:

dlg = Worksheets("CONSO").UsedRange.Rows.Count

Et encore une fois il ne supprime pas les lignes vides et ne copie que les deux premieres colonnes.

Je suis desole mais j'ai beau essaye de comprendre je ne vois pas d'ou vient le probleme!

Essaie en déclarant tes variables en Long.

Au lieu de ceci :

Dim i As Integer, dlg As Integer, x As Integer

Mets ceci :

Dim i As Long, dlg As Long, x As Long

Vba-new, j'ai applique ton bout de code et n'ai tjs pas pu essayer ce que ca donne.

En effet, a chaque fois que je lance la macro, mon excel plante et ne repond plus.

Si ca peut apporter quelque chose, je suis sur office 2010.

Je ne sais plus quoi faire...

Re

Essaye avec celui-ci (je l'ai commenté)

Sub Regroupe()
Application.ScreenUpdating = False
Dim i As Long, dlg As Long, x As Long, premlg As Long

Worksheets("CONSO").Range("A4:C65536").Clear 'efface les données de la feuille CONSO

For i = 2 To Worksheets.Count 'Boucle sur toutes les feuilles à partir de la 2ème

With Worksheets(i) 'avec la 1ère feuille concernée
       .Range("A4", .Cells(.Range("A65536").End(xlUp).Row, 3)).Copy 'copie de A4 à C dernière ligne non vide (3 correspond au numéro de colonne)
       premlg = Worksheets("CONSO").Range("A65536").End(xlUp).Row + 1 ' détermine la 1ère ligne vide de la feuille CONSO selon données en colonne A
       Worksheets("CONSO").Range("A" & premlg).PasteSpecial Paste:=xlPasteValues ' colle en valeur sur la feuille CONSO dans la 1ère cellule vide de la colonne A
End With
Next i

dlg = Worksheets("CONSO").UsedRange.Rows.Count 'détermine le numéro de la dernière ligne non vide sur la feuille CONSO
For x = dlg To 4 Step -1 'de la dernière ligne non vide jusqu'à la ligne 4 en remontant d'une ligne
If Range("A" & x) = "" Then Rows(x).Delete 'si la cellule Ax est vide, alors on supprime la ligne x
Next x

Range("A1").Select
End Sub

Nad

Enfin j'ai pu avoir acces au resultat. Au troisieme essai!

Les lignes vides sont supprimees. Mais seules les deux premieres colonnes sont copiees...

Vous avez une idee?

Pourtant dans le petit exemple, 3 colonnes etaient copiees!

Re

Vérifie que les données à copier sont bien en colonnes A B C (attention aux colonnes masquées) ou modifie cette ligne :

.Range("A4", .Cells(.Range("A65536").End(xlUp).Row, 3)).Copy 'copie de A4 à C dernière ligne non vide (3 correspond au numéro de colonne)

Nad

Bonjour a vous deux,

Je tiens a vous remercier pour votre aide.

Ce code fonctionne tres bien!

Merci!

Rechercher des sujets similaires à "copie valeurs onglets"