XL pour MAC consolider plusieurs tableaux excel en un seul via macro

inouuuu

XLDnaute Nouveau
Bonjour , tres bon tuto, mais j'ai un petit probleme pour refaire ce tuto, en fait j'ai 12 feuilles des tableaux sur les feuilles 2,3,4,5,6 uniquement. Au moment de refaire ce tuto, a l'execution, il m'affiche l'erreur 1004 ( au niveau de ActiveSheet.Paste)

Besoin de coup de pousse
Voici mon code:
Dim i As Integer
Dim j As Integer
Dim DerniereLigne As Integer
Dim lastRowConsolidation As Integer
'Procedure permettant d'effacer toutes les donnees de la feuille consolidation
Sub effacerDonnees()
Worksheets("CONSOLIDATION").Select
Rows("16:1048575").Select
Selection.Clear Range("B16").Select
End Sub
'Procedure permettant la consolidation des feuilles du classeur
Sub consolider()
Application.ScreenUpdating = False
effacerDonnees
'Boucle permettant de lire toutes les feuilles a consolider
For j = 2 To 6
Sheets(j).Select
DerniereLigne = Range("B1048575").End(xlUp).Row
For i = 16 To DerniereLigne
Sheets(j).Select
Rows(i).Select
Selection.Copy
Sheets("CONSOLIDATION").Select
lastRowConsolidation = Range("B1048575").End(xlUp).Row + 1
Cells(lastRowConsolidation, 2).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Next i
Next j
Application.ScreenUpdating = True
MsgBox "La consolidation est terminee.", vbOKOnly, vbInformation, "Information"
End Sub

**debutant en vba
fichier joint
 
Solution
Mais est ce que tu as pu revoir le code pour consolider les données ( afficher tous les éléments dans le tableau
Re..
Oui, la pj le fait.
J'ai converti en plage ==> [table12]

**Si tu souhaites garder le format monétaire
remplace cette ligne
.Range("a" & Application.Max(16, .Cells(Rows.Count, "B").End(xlUp).Row + 1)).PasteSpecial Paste:=xlPasteValues
par
.Range("a" & Application.Max(16, .Cells(Rows.Count, "B").End(xlUp).Row + 1)).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Jacky67

XLDnaute Barbatruc
Bonjour , tres bon tuto, mais j'ai un petit probleme pour refaire ce tuto, en fait j'ai 12 feuilles des tableaux sur les feuilles 2,3,4,5,6 uniquement. Au moment de refaire ce tuto, a l'execution, il m'affiche l'erreur 1004 ( au niveau de ActiveSheet.Paste)

Besoin de coup de pousse
Voici mon code:
Dim i As Integer
Dim j As Integer
Dim DerniereLigne As Integer
Dim lastRowConsolidation As Integer
'Procedure permettant d'effacer toutes les donnees de la feuille consolidation
Sub effacerDonnees()
Worksheets("CONSOLIDATION").Select
Rows("16:1048575").Select
Selection.Clear Range("B16").Select
End Sub
'Procedure permettant la consolidation des feuilles du classeur
Sub consolider()
Application.ScreenUpdating = False
effacerDonnees
'Boucle permettant de lire toutes les feuilles a consolider
For j = 2 To 6
Sheets(j).Select
DerniereLigne = Range("B1048575").End(xlUp).Row
For i = 16 To DerniereLigne
Sheets(j).Select
Rows(i).Select
Selection.Copy
Sheets("CONSOLIDATION").Select
lastRowConsolidation = Range("B1048575").End(xlUp).Row + 1
Cells(lastRowConsolidation, 2).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Next i
Next j
Application.ScreenUpdating = True
MsgBox "La consolidation est terminee.", vbOKOnly, vbInformation, "Information"
End Sub

**debutant en vba
fichier joint
Bonjour,
fichier joint==> Invisible ce fichier o_O
Je n'ai pas de Mac
Ce code fonctionne sur Xl non mac
Il n'a pas d'instruction qui (je pense) soit incompatible avec un mac
Néanmoins, travailler avec la position des onglets (For j = 2 To 6) n'est à mon avis pas une bonne idée
A tester
**Structure modifiée
VB:
'Procedure permettant d'effacer toutes les donnees de la feuille consolidation
Sub effacerDonnees()
Worksheets("CONSOLIDATION").Rows("16:" & Worksheets("CONSOLIDATION").Rows.Count).Clear
End Sub
'Procedure permettant la consolidation des feuilles du classeur
Sub consolider()
    Dim j&
    Application.ScreenUpdating = False
    Call effacerDonnees
    'Boucle permettant de lire toutes les feuilles a consolider
    For j = 2 To 6
        With Sheets(j)
            .Range("B16:B" & .Range("b" & .Cells.Rows.Count).End(xlUp).Row).Copy
        End With
        With Sheets("CONSOLIDATION")
            .Paste .Cells(.Range("b" & .Cells.Rows.Count).End(xlUp).Row + 1, 2)
        End With
    Next j
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    MsgBox "La consolidation est terminee.", vbOKOnly + vbInformation, "Information"
End Sub
 
Dernière édition:

inouuuu

XLDnaute Nouveau
Bonjour jacky67, j'espere que vous aller bien.
Ta structure passe bien mais le soucis en est que a chaque fois que je fasse l'extraction, apres effacement des donnes, la nouvelle extraction ne commence pas dans la cellule B16 ; au commence apres le dernier tableau de l'extraction precedente. (j'espere que tu comprends ce que je veux dire)
Deuxièmement, j'ai refais l'extraction 3 a 4 fois mais a partir de la deuxième jusqu'a la quatrième, juste la colonne B s'affiche.

Et j'aimerais savoir aussi si au moment ou la Boucle permettant de lire toutes les feuilles a consolider et chaque passage d'une feuille, la procedure detecte tous les tableaux se trouvant sur la feuille ( autrement dit les feuilles 3 et 6 peuvent contenir 4 voire 5 tableaux a l'interieur) et les extraire dans le tableau consolidé.

Cordialement.......
 

Jacky67

XLDnaute Barbatruc
Bonjour jacky67, j'espere que vous aller bien.
Ta structure passe bien mais le soucis en est que a chaque fois que je fasse l'extraction, apres effacement des donnes, la nouvelle extraction ne commence pas dans la cellule B16 ; au commence apres le dernier tableau de l'extraction precedente. (j'espere que tu comprends ce que je veux dire)
Deuxièmement, j'ai refais l'extraction 3 a 4 fois mais a partir de la deuxième jusqu'a la quatrième, juste la colonne B s'affiche.

Et j'aimerais savoir aussi si au moment ou la Boucle permettant de lire toutes les feuilles a consolider et chaque passage d'une feuille, la procedure detecte tous les tableaux se trouvant sur la feuille ( autrement dit les feuilles 3 et 6 peuvent contenir 4 voire 5 tableaux a l'interieur) et les extraire dans le tableau consolidé.

Cordialement.......
Ok Pour toujours débuter la copie en B16
...juste la colonne B s'affiche.
Ce n'est pas ce qui doit s'afficher ??
Mettre un classeur brouillon en pièce jointe avec une feuille comprenant les résultats souhaités
 

inouuuu

XLDnaute Nouveau
Merci encore Jacky67 du retour,
voici le fichier joint;
et dans le but d'approfondir , j'avais commencee a creer un formulaire de facturation client et les stocker dans une feuille et l'imprimer en PDF

Cordialement
 

Pièces jointes

  • Gestion.xlsm
    94.3 KB · Affichages: 10

Jacky67

XLDnaute Barbatruc
Merci encore Jacky67 du retour,
voici le fichier joint;
et dans le but d'approfondir , j'avais commencee a creer un formulaire de facturation client et les stocker dans une feuille et l'imprimer en PDF

Cordialement
Re..
Désolé, je ne suis pas assez féru dans la manipulation des tableaux structurés, pour te proposer un code correct, qui de surcroit doit fonctionner sur Mac.
Attend qu’un maitre passe par ici, ou re-post, et donne de suite le classeur en PJ
 

Jacky67

XLDnaute Barbatruc
Mais est ce que tu as pu revoir le code pour consolider les données ( afficher tous les éléments dans le tableau
Re..
Oui, la pj le fait.
J'ai converti en plage ==> [table12]

**Si tu souhaites garder le format monétaire
remplace cette ligne
.Range("a" & Application.Max(16, .Cells(Rows.Count, "B").End(xlUp).Row + 1)).PasteSpecial Paste:=xlPasteValues
par
.Range("a" & Application.Max(16, .Cells(Rows.Count, "B").End(xlUp).Row + 1)).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
 

Pièces jointes

  • Gestion .xlsm
    47.4 KB · Affichages: 18
Dernière édition:

inouuuu

XLDnaute Nouveau
RE BONJOUR JACKY67
Merci encore , ca a bien marche le code , et desole car je suis de debutant en vba.

Sinon en avancant avec mon code, je fais une facturation et en saisissant une facture , je souhaire que le stock se met a jour
VB:
Private Sub CommandButton1_Click()  'Bouton ajouter'
        Dim ligne As Integer:   ligne = 16
        Dim lignef As Integer: lignef = 23
        
        If (cb_refProduits.SelText <> "") Then
            If Not IsNumeric(qteProduit) And qteProduit <> "" Then
                MsgBox "La quantite saisie n'est pas un nombre. Veuillez corriger SVP!!!"
                'End Sub
            Else
                While (ThisWorkbook.Worksheets("PRODUITS").Cells(ligne, 2).Value <> "")
                    If (ThisWorkbook.Worksheets("PRODUITS").Cells(ligne, 2).Value = cb_refProduits.SelText) Then
                        If (Int(qteProduit.Value) > Int(ThisWorkbook.Worksheets("PRODUITS").Cells(ligne, 8).Value)) Then
                            MsgBox "La quantite en stock pour cette referencen'est pas de"
                            'End Sub
                        Else
                            While (ThisWorkbook.Worksheets("BON DE COMMANDE").Cells(ligne, 2).Value <> "")
                                lignef = lignef + 1
                            Wend
                            ThisWorkbook.Worksheets("BON DE COMMANDE").Cells(lignef, 2).Value = cb_refProduits.SelText
                            ThisWorkbook.Worksheets("BON DE COMMANDE").Cells(lignef, 4).Value = qteProduit.Value
                        End If
                    End If
                    ligne = ligne + 1
                Wend
        End If
    End If
End Sub

'initialisation du userform'
Private Sub UserForm_Initialize()
    Dim ligne As Integer
    
    Me.numFacture.Caption = Sheets("CONFIG").Range("H43").Value
    cbClient.List = Sheets("CLIENT").Range("clientel").Value
    cb_refProduits.List = Sheets("PRODUITS").Range("refProduits").Value
 
    
    ThisWorkbook.Worksheets("BON DE COMMANDE").Activate
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 189
Membres
112 679
dernier inscrit
Yupanki