Bugs Macros

Bonjour à tous,

Ne connaissant rien aux macros, j'ai essayé d'en bricoler 2 à partir d'une que ma fait Nad-Dan pour tout autre chose;

Dans validation_rentrées, le retour dans l'onglet ne se fait pas (je reste sur l'Onglet Commandes) et sur validation_commandes le collage en E1020 décale le reste du tableau de 2 lignes.

Quelqu'un comprend-il ce qui se passe ?

Merci de votre aide.

Sub validation_rentrées()
'
' validation_rentrées Macro
'

'

    Dim cel As Range, Lr As Byte 'Définition de la variable Lr
Lr = Range("n2") 'Lr=N° de la dernière ligne à copier

    Application.ScreenUpdating = False

       Range(Cells(10, "f"), Cells(Lr, "f")).Select 'Plage à copier F10:F(dernière ligne identifiée)
       Selection.Copy 'Copier

   Sheets("Mouvements").Select 'Déplacement dans l'onglet Mouvements

    Range("e10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Collage spécial valeurs en E10

    Range("e1012").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Collage spécial valeurs en E1012

Sheets("Commandes").Select 'Déplacement dans l'onglet Commandes
    Range("e1020").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Collage spécial valeurs en E1020

Sheets("Rentrées Produits").Select 'Retour Onglet Rentrées produits

    Range("D7").Select 'Retour dans l'onglet Rentrées

End Sub

Sub validation_commandes()
'
' validation_commandes Macro
'
'

'
    Dim cel As Range, Lg As Byte 'Définition de la variable Lg
Lg = Range("n2") 'Lg=N° de la dernière ligne à copier

    Application.ScreenUpdating = False

       Range(Cells(10, "f"), Cells(Lg, "f")).Select 'Plage à copier F10:F(dernière ligne identifiée)
       Selection.Copy 'Copier

   Range("d1020").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Collage spécial valeurs en D1020

   Sheets("Mouvements").Select 'Déplacement dans l'onglet Mouvements

    Range("d10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Collage spécial valeurs en D10

    Range("d1012").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Collage spécial valeurs en D1012

    Range("d2014").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Collage spécial valeurs en D2014

    Sheets("Commandes").Select 'Retour Onglet Commandes

    Range("D6").Select 'Retour dans l'onglet Commandes
     Application.CutCopyMode = False

End Sub

Salut,

ce serait mieux d'avoir un fichier!

On voit à peu près ce que tu veux faire mais pour t'aider c'est toujours mieux quand on a de quoi travailler dessus!

A +

Bonjour Greg974

C'est impossible car même en le réduisant au strict minimum, le fichier fait 1.8 Mo : il est donc largement au-dessus des 100ko.

La chose bizarre dans mes problèmes est que les commandes qui ne marchent pas sont issues de copier-coller (adapté aux cellules et feuilles concernées) de commandes qui marchent : du point de vue de l'écriture, elles sont donc strictement identiques.

Dans validation_commandes le collage spécial fonctionne sur sheets"Mouvements" en D10 et D1012 mais pas en 2024

Dans validation_rentrées, le retour sheets("rentrées produits") ne marche pas alors que dans validation_commandes le sheets("commades") marche

J'ai passé 1 journée dessus : il ne me reste plus que le forum ...

merci encore

Bonjour,

Quelles sont les valeurs maximum que la cellule N2 peut avoir ?

A te relire

Dan

Edit Dan :

En dehors de ma question, il faudrait aussi voir si tu n'as pas d'autres macros dans ton fichier qui influencent ce que tu fais avec ces deux codes.

Essaie déjà avec ces deux codes :

Sub validation_rentrées()
' validation_rentrées Macro
Dim cel As Range
Dim Lr As Integer 'Définition de la variable Lr
Lr = Range("n2") 'Lr=N° de la dernière ligne à copier
Application.ScreenUpdating = False
Range(Cells(10, "f"), Cells(Lr, "f")).Copy 'Plage à copier F10:F(dernière ligne identifiée)
With Sheets("Mouvements") 'Déplacement dans l'onglet Mouvements
    .Range("e10,e1012").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Collage spécial valeurs en E10
End With
'Déplacement dans l'onglet Commandes
Sheets("Commandes").Range("e1020").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Collage spécial valeurs en E1020
Application.CutCopyMode = False
Sheets("Rentrées Produits").Select 'Retour Onglet Rentrées produits
Range("D7").Select 'Retour dans l'onglet Rentrées
End Sub

Si cette macro est exécutée depuis la feuille Rentrée produits, tu peux supprimer l'avant dernière instruction.

Sub validation_commandes()
' validation_commandes Macro
Dim cel As Range
Dim Lg As Integer 'Définition de la variable Lg
Lg = Range("n2") 'Lg=N° de la dernière ligne à copier
Application.ScreenUpdating = False
Range(Cells(10, "f"), Cells(Lg, "f")).Copy 'Plage à copier F10:F(dernière ligne identifiée)
Range("d1020").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Collage spécial valeurs en D1020
With Sheets("Mouvements") 'Déplacement dans l'onglet Mouvements
    .Range("d10,d1012,d2014").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Collage spécial valeurs en D10 et d1012 et 2014
End With
Application.CutCopyMode = False
Sheets("Commandes").Select 'Retour Onglet Commandes
Range("D6").Select 'Retour dans l'onglet Commandes
End Sub

Si cette macro est exécutée depuis la feuille Commandes, tu peux supprimer l'avant dernière instruction.

Amicalement

Dan

Bonjour (éternel) Nad-dan

Je vais essayer tes macros de ce pas et je reviens.

En attendant, je réponds à tes 2 questions :

*N2= 10 à 1018 maxi

*Pour ce qui est des autres macro :

1/il y a celle que tu m'as faite pour masquer les colonnes en fonction d'un N° de ligne à saisir (onglet"Commandes")

2/une qui réaffiche tout (onglet"Commandes")

3/une qui trie des valeurs (onglet"Nomenclature")

Merci de ton aide

re,

Ok. Avec mes deux macros cela devrait fonctionner.

Les variables LG et LR doivent être INTEGER.

A te relire

Dan

C'est re-moi

J'ai donc essayé.

*Sur macro Validation_Rentrées 1 message d'erreur mais j'ai pu corriger : à sheets("Mouvements") à la place de Range ("e10,e1012") j'ai mis ("e10") seulement

Résultat : çA MARCHE

*Sur macro validation_Commandes 1 message d'erreur ; j'ai essayé de corriger à with sheets("Mouvements") tu avais regroupé les cellules de collage ("d10,d1012,d2024"), j'ai recopié les lignes pour faire 3 commandes distinctes : 1 pour d10, 1 pour d1012 et 1 pour d2024

résultat : ça marche mal comme avant : tout ce copie bien sauf en d2024

Je te joins une représentation pour te faire voir le résultat obtenu

https://www.excel-pratique.com/~files/doc2/Probleme_macro.xls

Re-merci

Bonsoir

dans ton fichier c'est D2014 et tu parles de D2024 ...

Pour les groupes, cela fonctionne. faudrait voir ton fichier orginal pour comprendre.

A te relire

Dan

Bonjour Nad-dan

C'est mon clavier qui a fourché : c'est bien D2014.

Le fichier que j'ai joint est un un tableau que j'ai reconstitué pour uniquemment faire voir le résultat que j'obtiens dans le vrai (qui est injoignable : même réduit au strict minimum il fait 1.8 Mo)

Le problème vient de la macro validation_commandes pour d2014 qui colle en me décalant une partie du tableau (voir fichier) alors que quand je fais l'opération "à la main" tout se passe bien

Par ailleurs cette même macro fonctionne parfaitement pour les autres collages.en D10 et D1012

C'est un vrai casse-tête et il n'y a plus que ça pour que je puisse le donner au service qui me l'a demandé : c'est balot !

Merci de ton aide

re,

En te lisant, cela me fait penser à un pb de cellules fusionnées dans tes feuiles de destination.

As-tu essayé en faisant des essais de copiage en désactivant les instructions dans le code pour ne coller uniquement qu'en D10 puis uniquement en D1012, puis uniquement en D2014. A chaque fois regarde ce qui se passe dans ton tableau en D2014.

A te relire

Dan

Bonjour Nad-Dan

1°/ Pour ce qui est de cellule de desination fusionnée, il n'y en a pas

2°/ J'ai essayé sur des fichiers séparés : bug = le tableau en D2014 se décale vers le bas / ok = il reste à sa place d'origine

Collages en D10 : ok

Collage en D1012 : bug

Collage en D2014 : ok

Collages en D10 et D1012 : bug

Collages en D10 et D2014 : ok

Collages en D1012 et D2014 : bug

On se rend donc compte qu'en fait le bug se produit à chaque fois que la cellule D1012 est en jeu ; le décalage du tableau en D2014 est produit par le collage de valeurs en D1012:D1016 (copie de 5 cellules) ; en fait tout se passe comme si on faisait "Insérer les cellules copiées" et non Coller simplement.

Ce qui est troublant, c'est que la même commande en D10 ne provoque aucun décalage (le même bug que D2014 devrait décaler et le tableau en D1012 et celui en D2014, ce qui n'est pas le cas)

Le problème est le même si on fait le copier-collage spécial valeur avec la souris : au final, ce n'est donc pas un problème de macro mais un problème de tableau structuré.

Si je convertis le tableau en D1012 en plage, le problème disparaît. Mais là encore il y a une incohérence puisque en D10 j'ai aussi un tableau structuré qui ne pose aucun problème.

P.S. : je suis obligé d'utiliser des tableaux structurés

Donc on avance mais le problème demeure ...

Toujours merci

3liste-client4.xlsm (111.49 Ko)

re,

je suis obligé d'utiliser des tableaux structurés

Que veux-tu dire par là ?

As-tu des formules ou des liaisons dans ton fichier avec un autre ?

Dan

Re-bonjour Nad-dan

1/ Je suis obligé car on ne connait pas le nombre de mouvements (entrées-sorties de produits). J'avais donc misé au départ sur 1000 et mon tableau a atteint 100Mo puisque j'avais prévu toutes les formules sur 1000 lignes dans différents onglets. A partir de là je me suis dit que les tableaux structurés étaient donc la solution du fait qu'ils se développent au fur et à mesure de leur utilisation ; au final, ils seront aussi lourds mais en attendant on gagne du poids au départ.

2/ Pour ce qui est des liaisons, il y en a entre les 5 onglets du classeur uniquement. Au départ j'avais prévu des classeurs distincts à la place des onglets (pour faire des fichiers moins lourds) mais compte tenu du nombre de liaisons externes que cela représentait il fallait un temps pas possible pour enregistrer des modifs ou ouvrir un classeur (j'ai pu constater qu'à poids égal, un classeur avec des liaisons externes est beaucoup plus lent).

Cordialement

re,

Tu ne réponds pas à ma question dans mon courrier précdent à savoir ce que tu veux dire par "tableau structuré"

mon tableau a atteint 100Mo

Que veux tu dire ??

Autre chose, je vois que tu ne lis par ta boite personnelle du forum - option juste au dessus de "joindre un fichier" au dessus de cette page

A te relire

Dan

Bonsoir Nad-Dan

1°/ Pour ce qui est des messages, je ne savais pas que ça existait ...(ça y est, j'en viens)

2°/ En ce qui concerne les tableaux structurés (c'est comma ça qu'ils sont appelés dans le bouquin que j'ai acheté sur 2007) c'est par Onglet Insertion > Tableau. Je les ai découvert avec 2007 et j'ai trouvé ça très intéressant.

Pour ce qui est du fichier de 100Mo c'était dans la présentation classique où il avait fallu que je prévois 1000 lignes de calculs à l'avance sur plusieurs onglets. Le nouveau débute avec 4 (pour tester mes formules) et pèse autour de 2 Mo ; il s'alourdira au fur et à mesure mais en attendant ce n'est pas un monstre.

Cordialement.

Rechercher des sujets similaires à "bugs macros"