Problème macro insérer feuille

Allergique

XLDnaute Junior
bonjour,

J'ai un problème de macro avec l'enregistrement excel. Je vous explique ce qui ne marche pas:

J'ai un tableau avec des tas d'informations. Je souhaite créer en automatique une nouvelle feuille, et y copier certaines cellules.

Par exemple, mon tableau d'origine se nomme Feuil1. Lorsque la macro insère une nouvelle feuille, celle-ci est nommée Feuil2.
Si je souhaite exécuter la macro une seconde fois pour un nouveau tableau, c'est la feuille 2 qui sera écrasée car c'est le numéro de feuille qui fait référence lorsque la macro a été crée. La nouvelle page crée reste donc vierge

Est-ce possible de faire la chose suivante:

-Que la macro prenne comme page source la feuille active (qui peut être la feuille 1, 2 ou autre)et qu'elle la garde en mémoire pour revenir copier les cellules
-Que lorsque la macro insère une nouvelle feuille qu'elle prenne en mémoire le nom de la nouvelle feuille (qui peut être la 5, 6 ou 7ème feuille insérée)

Voilà, j'espère avoir été clair dans mes explications

merci pour votre aide
 

dg62

XLDnaute Barbatruc
Re : Problème macro insérer feuille

re

le degug.print c'est a supprimer c'est uniquement pour la mise au point

iter flag et ind sont des variables qui m'indiquent si j'ai deux cellules vertes consécutives ou deux cellules violettes.


je regarde ton nouveau fichier
 

dg62

XLDnaute Barbatruc
Re : Problème macro insérer feuille

re

tu lancais la macro à partir de projet : il fallait être dans la feuille donnees.
j'ai corrigé ma procédure

tu avais renommé Wdest en feuildest mais pas dans l'instruction SET

j'ai séparé la macro recopie du reste du code

Sub recopie()

J'ai affecté le code de la macro au bouton "recopie des données" sur la feuille données.
http://cjoint.com/?hCqe4nOxHn
 
Dernière édition:

Allergique

XLDnaute Junior
Re : Problème macro insérer feuille

re,

j'ai un petit bug avec la macro recopie, lorsqu'il y a 2 lignes vertes, et 2 lignes violet voir plus, il n'aligne plus les lignes par rapport à la première référence de la ligne verte.

Comment peut-on programmer la macro pour qu'elle crée un point "0" quand les cellules B et C sont communes à plusieurs lignes, et qu'ensuite elle prenne en mémoire le nombre aléatoire X de lignes vertes, et le nombre aléatoire Y de lignes violet. La copie des infos se feraient donc par rapport au point "0"

Je joins la dernière version du fichier pour être plus parlant. j'y ai mis des annotations

http://allergique5.site.voila.fr/macro.zip

a+
 

Allergique

XLDnaute Junior
Re : Problème macro insérer feuille

salut,

j'ai essayé ton fichier, j'ai toujours un problème, mais uniquement avec les lignes violettes.
lorsqu'il y a plusieurs lignes vertes et plusieurs lignes violettes, lors de la recopie les lignes ne sont plus alignées.
Si les cellules B et C sont identiques, cellules vertes et violet doivent démarrer sur la même ligne, et ne pas avoir d'espace entre elles.
dans le tableau j'avais mis 4 cas, le 1 et 2 fonctionnent mais pas avec le 3 et 4

les explications que tu as mis dans la macro m'ont permis de mieux compre,dre, mais j'arrive pas à programmer cette condition.

je me demandais si au lieu de déclarer violet as byte il ne fallait pas le mettre en integer, et de compter le nombre de lignes violettes. il serait possible de positionner la ligne en fonction du nombre de violet qu'il a au dessus en faisant quelque-chose du style FeuilDest.Range("f" & ligne - ind + violet) ou quelque-chose dans le genre?

merci pour ton aide
a+
 

dg62

XLDnaute Barbatruc
Re : Problème macro insérer feuille

re

je me demandais si au lieu de déclarer violet as byte il ne fallait pas le mettre en integer, et de compter le nombre de lignes violettes. il serait possible de positionner la ligne en fonction du nombre de violet qu'il a au dessus en faisant quelque-chose du style FeuilDest.Range("f" & ligne - ind + violet) ou quelque-chose dans le genre?

Effectivement c'est là qu'il faut intervenir

-violet-1 a essayer ! Etant donné que l'on fait déjà -ind


FeuilDest.Range("f" & ligne - 1) = FeuilSource.Range("i" & lig).Value 'Désignation OC
FeuilDest.Range("g" & ligne - 1) = FeuilSource.Range("j" & lig).Value 'Référence OC
FeuilDest.Range("h" & ligne - 1) = FeuilSource.Range("n" & lig).Value 'Mabec
FeuilDest.Range("i" & ligne - 1) = FeuilSource.Range("e" & lig).Value 'Type d'outil
FeuilDest.Range("j" & ligne - 1) = FeuilSource.Range("f" & lig).Value 'Réglage
FeuilDest.Range("k" & ligne - 1) = FeuilSource.Range("u" & lig).Value 'Fournisseur
FeuilDest.Range("w" & ligne - 1) = FeuilSource.Range("k" & lig).Value 'Nb PO
FeuilDest.Range("x" & ligne - 1) = FeuilSource.Range("l" & lig).Value 'Nb OC
FeuilDest.Range("y" & ligne - 1) = FeuilSource.Range("g" & lig).Value 'Tenue OC
FeuilDest.Range("z" & ligne - 1) = FeuilSource.Range("h" & lig).Value 'Nb Utils

a la place de -1 mettre - violet



 
Dernière édition:

Allergique

XLDnaute Junior
Re : Problème macro insérer feuille

salut,

j'ai passé des heures dessus mais il reste toujours des problèmes avec la copie des lignes violettes. Là je suis au bord de la crampe de cerveau...

Il copie la première ligne violette au bon endroit maintenant, mais les lignes violettes suivantes il les prend pas en compte.

Peux-tu m'aider stp...

je remets le dernier fichier. Dans la copie des cellules j'ai mis les valeurs de "ind" et "violet" pour voir à chaque étape si l'incrémentation est bonne.

http://allergique5.site.voila.fr/macro.zip

merci
a+
 

dg62

XLDnaute Barbatruc
Re : Problème macro insérer feuille

Bonjour Allergique

la variable violet passe à 1 au premier passage donc au 2e la cellule est sautée.

il faut redéclarer violet en byte et ajouter une nouvelle variable
nbviolet en Integer et modifier le code comme ci-dessous.

la variable nbviolet est initialisée à 0 dans le premier passage de traitement cellule verte.

A tester, mais je pense que c'est bon.

Bon Dimanche

Code:
If c.Interior.ColorIndex = 39 And [COLOR=Red]violet = 0[/COLOR] Then 'ligne violette
        flag = 0 ' flag mis a 0 car si violet on a fini de traiter les lignes vertes
        nbviolet = nbviolet + 1 ' cas 2  violet
        lig = c.Row 'numero de la ligne
        
        ref2 = Range("B" & lig) & Range("C" & lig)
            
            If ref = ref2 Then
               
                  ligne = ligne - ind + nbviolet 'remonte sur 1ère ligne verte et incrémente ligne violet
                    
                    FeuilDest.Range("f" & ligne) = ind 'Désignation OC
                    FeuilDest.Range("g" & ligne) = nbviolet 'Référence OC
                    Debug.Print ligne, nbviolet, lig
                   'ligne = ligne + ind - nbviolet 'remet la ligne pour pas fausser la suite
        
            End If
             
     End If
 

Allergique

XLDnaute Junior
Re : Problème macro insérer feuille

re,

non, marche pas terrible

pour OP10/T10003 il me supprime une des lignes vertes
pour OP20/T10002 ca fonctionne
pour OP20/T10003 si je rajoute 2 lignes violettes les 2 premières lignes violettes ça les positionne bien, mais la 3ème il met une ligne trop bas...

je n'y comprend plus rien
 

dg62

XLDnaute Barbatruc
Re : Problème macro insérer feuille

re

en rouge les modifs

Code:
Sub recopie()
'Macro recopie de texte

Dim c As Range
Dim lig As Integer
Dim iter As Boolean
Dim ligne As Integer
Dim FeuilSource As Worksheet
Dim FeuilDest As Worksheet
Dim ref As String
Dim ref2 As String
Dim ind As Integer
Dim flag As Byte
Dim violet As Byte
Dim nbviolet As Integer
ligne = 6

Set FeuilSource = ThisWorkbook.Worksheets("donnees")
Set FeuilDest = ThisWorkbook.Worksheets("projet")


Sheets("projet").Select
    Range("A7:AE500").Select
    Selection.ClearContents
    Range("A7").Select
    
    

iter = False ' quand False: cas 1 ligne verte sinon True 2e ligne verte
ind = 1 ' indique le nombre de lignes vertes
flag = 0 ' indique que l'on traite les lignes violettes
violet = 0 ' indique le nombre de lignes violettes
ThisWorkbook.Worksheets("donnees").Activate

    
For Each c In Range("j[COLOR=Red]5[/COLOR]:j500") 'on boucle sur chaque cellule de la colonne
  ' [COLOR=Red]la boucle partait de 6 donc il oubliait une ligne verte[/COLOR]  
    ' premiere ligne verte
    If c.Interior.ColorIndex = 35 And iter = False Then 'ligne verte
        [COLOR=Red]ind = 1 ' Ajouter ici le Ind=1[/COLOR]
        lig = c.Row 'numero de la ligne
        flag = 1
        violet = 0
        nbviolet = 0
        ligne = ligne + 1
        
        FeuilDest.Range("A" & ligne) = FeuilSource.Range("B" & lig).Value 'OP
        FeuilDest.Range("B" & ligne) = FeuilSource.Range("C" & lig).Value 'Station
        FeuilDest.Range("C" & ligne) = FeuilSource.Range("D" & lig).Value 'N° OC
        FeuilDest.Range("D" & ligne) = ind 'Usinage
        FeuilDest.Range("E" & ligne) = violet 'Repère
        
               
        ref = Range("B" & lig) & Range("C" & lig)
        
    End If
    
    ' traitement ligne verte suivante
    If c.Interior.ColorIndex = 35 And iter = True Then  'ligne verte
        lig = c.Row 'numero de la ligne
        ligne = ligne + 1
        ind = ind + 1
       
        ref2 = Range("B" & lig) & Range("C" & lig)
            If ref = ref2 Then
            
                FeuilDest.Range("A" & ligne) = FeuilSource.Range("B" & lig).Value 'OP
                FeuilDest.Range("B" & ligne) = FeuilSource.Range("C" & lig).Value 'Station
                FeuilDest.Range("C" & ligne) = FeuilSource.Range("D" & lig).Value 'N° OC
                FeuilDest.Range("D" & ligne) = ind 'Usinage
                FeuilDest.Range("E" & ligne) = violet 'Repère
                
            
            End If
        
      
     End If
    
    If c.Interior.ColorIndex = 39 And violet = 0 Then 'ligne violette
        flag = 0 ' flag mis a 0 car si violet on a fini de traiter les lignes vertes
        nbviolet = nbviolet + 1 ' cas 2  violet
        lig = c.Row 'numero de la ligne
        
        ref2 = Range("B" & lig) & Range("C" & lig)
            
            If ref = ref2 Then
               
                  ligne = ligne - ind + nbviolet 'remonte sur 1ère ligne verte et incrémente ligne violet
                    
                    FeuilDest.Range("f" & ligne) = ind 'Désignation OC
                    FeuilDest.Range("g" & ligne) = nbviolet 'Référence OC
                    
                   ligne = ligne + ind - nbviolet 'remet la ligne pour pas fausser la suite
        
            End If
             
     End If


    If flag = 1 Then
        iter = True
        '
        
    Else
        iter = False 'iter repasse à False car on a traité une ligne violet
        
        [COLOR=Red]' enlever le ind=1[/COLOR]
    End If
Next c


Set FeuilSource = Nothing
Set FeuilDest = Nothing

End Sub
 

Allergique

XLDnaute Junior
Re : Problème macro insérer feuille

bonjour,

j'ai pu continuer la macro, pour l'instant sans gros problème.
j'aurai juste une petite question:

en début de programmation j'ai mis
Set FeuilSource = ActiveSheet
Set FeuilDest = Sheets.Add

j'ai fait tout le travail de copie, donc maintenant je souhaite travailler que sur Feuildest.
Le problème est que comme j'ai déclaré au début FeuilSource=Activesheet, je dois à chaque fois ajouter "FeuilDest.Select" puis Range("B5").Select par exemple

Comment peut-on annuler FeuilSource=Activesheet pour que le Set FeuilDest = Activesheet fonctionne?

merci

a+
 

Discussions similaires

Statistiques des forums

Discussions
312 183
Messages
2 086 005
Membres
103 087
dernier inscrit
sarah.caneri