XL 2016 [RESOLU] Macro insertion de lignes entre 2 tableaux de tailles aléatoires

caseras

XLDnaute Nouveau
Bonjour à tous,

Habituellement je parviens à me débrouiller tout seul, mais là, je sèche complétement. D'avance merci à celles et ceux qui vont prendre le temps de me lire, et peut-être, essayer de résoudre mon problème.

J'ai une macro qui insère un tableau à une feuille excel nommée PO. Ce tableau comporte un nombre de lignes aléatoires.

Dans la feuille PO, il y a déjà un (ou plusieurs) tableau(x) mais après l'activation de ma macro, le(s) tableau(x) qui étai(en)t déjà là a (ont) été déplacé vers le bas.

Ce que je voudrais, c'est que les titres de colonnes du (1er) tableau qui a été déplacé vers le bas, aille jusqu'à la ligne 56 en passant par une macro.

Désolé pour le titre, mais je n'ai pas trouvé mieux.

Je joins un fichier, car, il faut bien le reconnaître, c'est pas clair ! :(
 

Pièces jointes

  • PO.xlsm
    73.4 KB · Affichages: 28

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Question préalable: Pourquoi ton classeur contient 8 modules VBA vides ?

Sinon, est-ce que cette macro peut te mener la bonne piste ?
(j'ai testé sur ton classeur en ne gardant au préalable que le 1er tableau)
VB:
Sub test()
Dim DerLig&
DerLig = Cells(Rows.Count, "D").End(xlUp).Row
Cells(DerLig, "D").CurrentRegion.Copy Cells(DerLig + 2, "A")
End Sub
 

caseras

XLDnaute Nouveau
Bonsoir Staple1600, bonsoir le forum,

En fait j'ai 8 modules, car le classeur (et sa feuille) que j'ai mis en pièce jointe est en réalité issu d'un classeur comportant des centaines de feuilles et 8 macros super volumineuses, que j'ai virées en modifiant le fichier.

En ce qui concerne la macro que vous me proposez, je pense que je me suis mal expliqué.
Ce qui m'intéresse n'est pas de procéder à une copie du tableau.

Ce qui m’intéresse c'est d'augmenter le nombre de lignes (ou éventuellement la hauteur d'une colonne ???) entre les 2 tableaux.
Dans mon exemple, la dernière ligne du tableau A (on va l'appeler comme ça) est la ligne 11. Le première ligne du tableau B est la ligne 20.

Ces tableaux sont issus d'une extraction de logiciel (un ERP). Je procède à cette extraction régulièrement. Je conserve toutes les données les unes en dessous des autres.

En bref, j'aurais besoin d'une macro pour permettre au tableau B de commencer sur la ligne 56, tout en sachant que le tableau A, qui démarre sur la ligne 5 et se termine sur la ligne 11, commence systématiquement sur la ligne 5 mais peut comporter bien plus de lignes que dans mon exemple et pourrait éventuellement se terminer sur la ligne 20 ou 25.

Il est ici en fait mon problème. Le nombre de ligne du tableau A est aléatoire, si bien que la fin du tableau A et le début du tableau B changent sans arrêt.

Je mets une nouvelle pièce jointe avec une feuille supplémentaire pour le résultat attendu.

Staple, merci pour votre réponse, et si vous jetez l'éponge, ne vous en faites pas, je le comprendrais parfaitement, je m'arrache moi même les cheveux sur ce truc depuis un bon moment et je ne suis même pas arrivé à un début de commencement de macro, je n'ai pas le niveau ! :)


Bonne soirée.
 

Pièces jointes

  • PO.xlsm
    78.8 KB · Affichages: 23

Staple1600

XLDnaute Barbatruc
Re

Je ne comprends pas pourquoi le second tableau s'inscrit en ligne 20 et pas en ligne 13 (pour laisseer une ligne vide entre le premier et second tableau)

Et comment sont insérés les tableaux ?
Par un copier/coller?
Par macro?
Avec l'assistant d'importartion d'Excel ?
 

caseras

XLDnaute Nouveau
Re

Je ne comprends pas pourquoi le second tableau s'inscrit en ligne 20 et pas en ligne 13 (pour laisseer une ligne vide entre le premier et second tableau)

Et comment sont insérés les tableaux ?
Par un copier/coller?
Par macro?
Avec l'assistant d'importartion d'Excel ?

Il est en ligne 20, car la macro que je lance reprend les données de l'extraction de l'ERP pour ensuite recréer un tableau de toutes pièces, lignes par ligne. Cela se fait comme suit : Importation de Xlignes créant le tableau A + 9 lignes (j'aurais pu mettre + ou - mais ca ne change rien à mon problème en fait) vides pour aérer la lecture moins 1 ligne qui va calculer mes totaux.

J'utilise une loop sur une autre feuille (source de mes données) pour rechercher les données selon un critère défini. Au départ, je ne sais pas combien de lignes je vais créer, c'est pourquoi il m'est impossible de déterminer avant, pendant, ou même après cette macro le nombre de lignes dont je vais avoir besoin pour repousser le tableau B sur la ligne 56.

Merci Staple pour votre réponse et aussi pour votre persévérance ! :)

Bonsoir.
 

caseras

XLDnaute Nouveau
Bonjour,

bah, tu insères tes lignes d'abord et tu colles ton tableau au lieu de l'insérer. C'est plus simple non ?
eric

Bonsoir Eriiic et merci pour votre réponse.

Malheureusement, je ne copie pas mon tableau, il est crée par une macro qui extrait des données et ne les colle pas mais les insère, du coup, je ne peux pas déterminer à l'avance le nombre de lignes nécessaires à insérer pour repousser le tableau B sur la ligne 56.

Voici le code en question :

ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
col = "A"
NumLig = 6
With Sheets("Source")
LgFin = .Cells(65536, col).End(xlUp).Row
For Lig = 1 To LgFin
If .Cells(Lig, col).Value = "xxxxxxxxxxx" Then
.Cells(Lig, col).EntireRow.Copy
NumLig = NumLig + 1
Sheets("PO").Cells(NumLig, 1).Insert Shift:=xlDown
End If
Next

(Pour info, j'ai modifié la Value)

Merci quand même !

Bonne soirée.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, caseras, eriiiic

@>caseras
Tu pourrais joindre un fichier avec l'onglet Source
(donc les données brutes issues de ton ERP, en prenant soin de juste anonymiser les données confidentielles si il y en a)
et d'ajouter un onglet Résultat ou tu auras fait une copie manuelle du résultat à obtenir
et de laisser ton onglet Avant, juste le premier tableau (sans avoir lancer ta macro du message#7)
 

eriiic

XLDnaute Barbatruc
Bonjour,

Je ne vois pas ce qui pourrais empêcher une macro de coller ou au lieu d'insérer (!?!)
Elle fait ce qu'on lui dit de faire.
Et si tu insères tes lignes avant tu sais combien il en faut pour emmener ta ligne de titre en ligne 56, pas besoin de connaitre la taille du nouveau..
eric
 

caseras

XLDnaute Nouveau
Bonjour le fil, le forum, caseras, eriiiic

@>caseras
Tu pourrais joindre un fichier avec l'onglet Source
(donc les données brutes issues de ton ERP, en prenant soin de juste anonymiser les données confidentielles si il y en a)
et d'ajouter un onglet Résultat ou tu auras fait une copie manuelle du résultat à obtenir
et de laisser ton onglet Avant, juste le premier tableau (sans avoir lancer ta macro du message#7)
Bonsoir Staple1600,

Ci-joint le fichier.

Toutes les données sont confidentielles, j'ai donc tout modifié, j'espère que vous aimez Disney !

Encore merci pour votre aide.

Bonsoir.
 

Pièces jointes

  • PO.xlsm
    92.6 KB · Affichages: 19

caseras

XLDnaute Nouveau
Bonjour,

Je ne vois pas ce qui pourrais empêcher une macro de coller ou au lieu d'insérer (!?!)
Elle fait ce qu'on lui dit de faire.
Bonsoir eriiic,

Rien n'empêche de coller un tableau effectivement.

Quand j'ai construit mon tableau et vis à vis de l'extraction de mon ERP il me semblait plus facile d’insérer les lignes plutôt que de les copier...


Et si tu insères tes lignes avant tu sais combien il en faut pour emmener ta ligne de titre en ligne 56, pas besoin de connaitre la taille du nouveau..
eric

Si je comprends bien, l'idée serait de déplacer le tableau sur la ligne 56 et, non pas insérer les lignes mais de les copier ?
Effectivement, ca serait une solution puisque le nombre de lignes serait tout le temps le même. Je n'avais pas compris votre idée de départ, et pour tout dire, je n'y avais même pas songé..

Du coup, sur mon code, cette ligne serait à modifier : "Sheets("PO").Cells(NumLig, 1).Insert Shift:=xlDown"

Est-ce qu'on est sur la même longueur d'ondes ?

Bonne soirée eriiic
 

caseras

XLDnaute Nouveau
Oui, tu insères tes x lignes d'abord comme ça tu sais combien et où tu en es, et tu t'es fait la place pour coller tes lignes (.paste).

Bonsoir eriiic,

Effectivement, c'est tellement plus simple... j'ai limite un peu honte tellement la solution était évidente...

Du coup ca donne ça :
col = "A"
NumLig = 6
With Sheets("Source")
LgFin = .Cells(65536, col).End(xlUp).Row
For Lig = 1 To LgFin
If .Cells(Lig, col).Value = "xxxxx" Then
.Cells(Lig, col).EntireRow.Copy
NumLig = NumLig + 1
Sheets("PO").Cells(NumLig, 1).PasteSpecial xlPasteAll
End If
Next

En attendant, un grand merci pour ce dépannage ! Ca termine mon fichier ! :)

Bonne soirée !

 

caseras

XLDnaute Nouveau
Bonjour le fil, le forum, caseras, eriiiic

En voyant ton dernier fichier, une idée me vient.
Pourquoi ne pas utiliser un TCD
(voir copie écran ci-dessous)

Bonsoir Staple,

Oui, j'y avais pensé au départ, le TDC c'est toujours excellent pour aller choper des données.... Le hic, c'est que mon fichier est ensuite partagé avec des personnes qui se sont révélées incapables de contrôler un TDC...

Du coup, j'ai opté pour des macros et des tableaux pré-mâchés.

eriiic a trouvé ce dont j'avais besoin, mais merci à toi aussi de t'être intéressé à mon cas ! :)

Bonne soirée.
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG