Microsoft 365 Problème macro remplissage automatique de tableau

chris63*

XLDnaute Nouveau
Bonjour à tous,

Grâce à votre aide précieuse ^^, j'ai réussi à mettre en place une "automatisation" de divers documents (factures, devis, bons de commande...) avec une macro "de base" adaptée selon les besoins.
Mon problème du jour concerne le remplissage automatique des tableaux de récap (historique) associés à ces documents.
Lorsque j'active la macro, les nouvelles données viennent se mettre dans la première ligne sous le tableau et non dedans.
Et si je l'active de nouveau, les nouvelles données "écrasent" les précédentes.

J'ai ce problème pour tous mes fichiers avec cette macro (une vingtaine...)
(ces tableaux de récap me servant également à alimenter des tableaux de bords, je m'arrache un peu les cheveux depuis 3 jours ;-) )

J'ai regardé dans cette ancienne discussion qui m'avait bien aidée :

et j'imagine que le problème se situe à ce niveau :
1662710647191.png

mais je ne comprends pas pourquoi ...

Ci-joint un fichier pour plus de clarté

Merci d'avance :)

Chris
 

Pièces jointes

  • MODELE AR - RECAP.xlsm
    36.4 KB · Affichages: 11
Solution
Bonjour

essai avec ce code
puisque tu as des tableaux structurés, autant utiliser les éléments associés
VB:
Sub ARCHIVER()


With Sheets("HISTORIQUE_AR").ListObjects(1)
    If .ListRows.Count = 0 Then 'si le tableau est vide: pas meme une ligne de donnée
        .ListRows.Add
    End If
    
    If .DataBodyRange(1, 1) <> "" Then  'si la première ligne est non vide
        .ListRows.Add
    End If
    LastLine = .ListRows.Count 'dernière ligne = celle qu'on remplit

    .DataBodyRange(LastLine, 1) = Sheets("AR").Range("B10").Value
    .DataBodyRange(LastLine, 2) = Sheets("AR").Range("D10").Value
    .DataBodyRange(LastLine, 3) = Sheets("AR").Range("A15").Value
    .DataBodyRange(LastLine, 4) = Sheets("AR").Range("A19").Value...

chris63*

XLDnaute Nouveau
Bonjour tfbt,


Bonjour
Je viens de regarder mais chez moi cela augment bien la taille du tableau
Si cela fonctionne chez vous, c'est que la macro est correcte donc.

Depuis une MAJ Windows la semaine dernière, j'ai énormément de souci avec mes fichiers excel avec macro.. Exécution impossible car 'source de fichier non approuvée' (les documents sont sur un réseau interne) , formats de cellule qui changent tout seuls...
Je vous invite à mettre un point d'arrêt et de vérifier la valeur de la variable Ligne.
Sinon il n'existe pas de fonction pour ajouter une ligne à un tableau????

Désolée, je ne comprends pas (le langage VBA est un peu obscur pour moi..:oops:)

Merci pour votre retour :)

Bonne journée

Chris
 

tbft

XLDnaute Accro
Pour faire un point d'arrêt il faut cliquer sur la ligne et faire F9.
Lors de l'exécution de la macro le logiciel va s'arrêter sur la ligne.
Vous pouvez afficher la fenêtre des variables locales pour voir ce qui ce passe.
Et pour avance ligne par ligne il faut appuyer sur la touche F8 sinon F5 pour reprendre l'exécution normale
 

vgendron

XLDnaute Barbatruc
Bonjour

essai avec ce code
puisque tu as des tableaux structurés, autant utiliser les éléments associés
VB:
Sub ARCHIVER()


With Sheets("HISTORIQUE_AR").ListObjects(1)
    If .ListRows.Count = 0 Then 'si le tableau est vide: pas meme une ligne de donnée
        .ListRows.Add
    End If
    
    If .DataBodyRange(1, 1) <> "" Then  'si la première ligne est non vide
        .ListRows.Add
    End If
    LastLine = .ListRows.Count 'dernière ligne = celle qu'on remplit

    .DataBodyRange(LastLine, 1) = Sheets("AR").Range("B10").Value
    .DataBodyRange(LastLine, 2) = Sheets("AR").Range("D10").Value
    .DataBodyRange(LastLine, 3) = Sheets("AR").Range("A15").Value
    .DataBodyRange(LastLine, 4) = Sheets("AR").Range("A19").Value
    .DataBodyRange(LastLine, 5) = Sheets("AR").Range("A17").Value
    .DataBodyRange(LastLine, 6) = Sheets("AR").Range("E37").Value
    .DataBodyRange(LastLine, 7) = Sheets("AR").Range("E38").Value
    .DataBodyRange(LastLine, 8) = Sheets("AR").Range("E39").Value
    
    Sheets("AR").[B10,A15,A17,A19,A27:D27].ClearContents
End With

' enreg_auto Macro

    ChDir "Z:\VENTE\AR COMMANDES"
    ActiveWorkbook.SaveAs Filename:= _
        "Z:\VENTE\AR COMMANDES\MODELE AR CIRES - RECAP.xlsm", FileFormat:= _
        xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
 

chris63*

XLDnaute Nouveau
Pour faire un point d'arrêt il faut cliquer sur la ligne et faire F9.
Lors de l'exécution de la macro le logiciel va s'arrêter sur la ligne.
Vous pouvez afficher la fenêtre des variables locales pour voir ce qui ce passe.
Et pour avance ligne par ligne il faut appuyer sur la touche F8 sinon F5 pour reprendre l'exécution normale
Merci pour l'éclairage :)


Bonjour

essai avec ce code
puisque tu as des tableaux structurés, autant utiliser les éléments associés
VB:
Sub ARCHIVER()


With Sheets("HISTORIQUE_AR").ListObjects(1)
    If .ListRows.Count = 0 Then 'si le tableau est vide: pas meme une ligne de donnée
        .ListRows.Add
    End If
   
    If .DataBodyRange(1, 1) <> "" Then  'si la première ligne est non vide
        .ListRows.Add
    End If
    LastLine = .ListRows.Count 'dernière ligne = celle qu'on remplit

    .DataBodyRange(LastLine, 1) = Sheets("AR").Range("B10").Value
    .DataBodyRange(LastLine, 2) = Sheets("AR").Range("D10").Value
    .DataBodyRange(LastLine, 3) = Sheets("AR").Range("A15").Value
    .DataBodyRange(LastLine, 4) = Sheets("AR").Range("A19").Value
    .DataBodyRange(LastLine, 5) = Sheets("AR").Range("A17").Value
    .DataBodyRange(LastLine, 6) = Sheets("AR").Range("E37").Value
    .DataBodyRange(LastLine, 7) = Sheets("AR").Range("E38").Value
    .DataBodyRange(LastLine, 8) = Sheets("AR").Range("E39").Value
   
    Sheets("AR").[B10,A15,A17,A19,A27:D27].ClearContents
End With

' enreg_auto Macro

    ChDir "Z:\VENTE\AR COMMANDES"
    ActiveWorkbook.SaveAs Filename:= _
        "Z:\VENTE\AR COMMANDES\MODELE AR CIRES - RECAP.xlsm", FileFormat:= _
        xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
Bonjour vgendron,

Merci, ça semble fonctionner pour ce fichier. 👍👍

Par contre, j'ai essayé d'adapter à d'autres documents (facture ou devis) plus complexes et ça ne marche pas.
Je ne peux pas m'en occuper ce soir, donc, je vais gratter la semaine prochaine à tête plus reposée.
(Je reviendrai sans doute poser quelques question donc je ne clos pas la discussion ;-) )


Merci encore pour votre aide

Bon week end à tous

Chris
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 150
Membres
112 670
dernier inscrit
Flow87