Lier deux tableaux

Bonjour,

j'aimerais copié un tableau sur une autre feuille excel mais avec des contitions spéciales;

le tableau a une macro qui lui fait masquer ces lignes sous conditions .on aura donc par exemple des lignes qui ne se suivent pas :

1 2 7 10 15 , j'aimerais copier ce tableau pour qu'il fasse apparaitre ces lignes 1 2 7 10 15 mais que sur la deuxieme feuille le tableau ne devra pas posséder de lignes caché seulement ces lignes 1 2 7 10 15 donc peut être qu'elle se remettront dans l'ordre 1 2 3 4 5 .et à chaque fois que je fais une modification sur le premier tableau le deuxieme se modifie en conséquence .

j'ai éssayer de faire un programme qui supprime les lignes caché mais le probleme s'est que qu'en je modifie le premier tableau , on aura par exemple une ligne caché que je remet visible alors sur le deuxieme tableau ou la ligne était supprimer auparavant elle ne pourra pas être retrouver .

sa peut être un peu flou et si c'est mal expliquez je reexpliquerais

cordialement

Merci

Salut,

A tester, il y a sans doute mieux, mais ca fonctionne :

Sub copie_only_visible_cell()
Dim source As Worksheet
Dim destination As Worksheet
Dim c As Range

Set source = ActiveWorkbook.Worksheets("Feuil1")
Set destination = ActiveWorkbook.Worksheets("Feuil2")

i = 0
For Each c In source.Range("A1", "A10000")  
    If c.EntireRow.Hidden = False Then
        c.EntireRow.Copy destination.Range("A10000").End(xlUp).Offset(i, 0)
        i = 1
    End If
Next
End Sub

Damien

merci pour la réponse

j'ai un petit probleme , j'ai une erreur 400

savez vous ce que sa pourrait être ?

cordialement

Salut,

Non je ne vois pas.

Peux tu lancer la macro en appuyant sur F8 (mode pas a pas) et donner la ligne/instruction qui renvoi cette erreur.

Tu as lancé la macro seule ? (pas depuis un autre code ?)

Damien

bonjour,

j'ai lancé la macro pas a pas et l'erreur apparait sur la ligne i=1

le message d'erreur qui apparait est erreur d'éxecution 1004 ,erreur définie par l'application ou par l'objet

sur la feuille ou je vais chercher le tableau a coller j'ai mis ce code la :(pour cacher mes cellules )

Private Sub Worksheet_Activate()

Dim plage As Range, c As Range

Set plage = ([B1:B29])

For Each c In plage

If c.Value = "" Then

c.EntireRow.Hidden = True

Else

c.EntireRow.Hidden = False

End If

Next c

End Sub

Sur la feuille ou je veux coller j'ai mis ton code (ensuite s'est la que je ne prend que les celulles visible normalement )

Sub copie_only_visible_cell()

Dim source As Worksheet

Dim destination As Worksheet

Dim d As Range

Set source = ActiveWorkbook.Worksheets("PLAN FAB")

Set destination = ActiveWorkbook.Worksheets("Feuil1")

i = 0

For Each d In source.Range("B1", "B30")

If d.EntireRow.Hidden = False Then

d.EntireRow.Copy destination.Range("B30").End(xlUp).Offset(i, 0)

i = 1

End If

Next

End Sub

Je n'ai d'ailleurs pas trop compris le code .

Merci

cordialement

re,

j'ai éssayer après mon code qui cache les lignes

Sub Macro3()

Sheets("PLAN FAB").Select

Range("A1:I30").Select

Selection.SpecialCells(xlCellTypeVisible).Select

Selection.Copy

Sheets("Feuil1").Select

ActiveSheet.Paste

End Sub

le seul problème que j'ai s'est qu'il me prendra toujours la plage A1:I30 mais mon tableau est varaible donc je voudrais toujours prendre jusqu'a la derniere valeur , j'ai regarder un peu dans le forum j'ai vu qu'il fallait peut etre mettre du end(xldown) mais je ne sais comment l'insérer

cordialement

Salut,

Je ne vois pas trop ce qui se passe, essayes de mettre la déclaration de i dans mon code.

dim i as long

Sinon peux tu envoyer ton fichier, je n'arrive pas à reproduire ton problème.

Damien

bonjour,

je t'ai mis le fichier en piece jointe

merci

cordialement

Bonjour,

Je pense que t as juste oublié de faire l'incrémentation tu remplace i=1 par i=i+1

Et il faudrait supprimer avant de faire le copier coller dans ta feuille 3

cordialement

merci ,

est t'il possible de coller sur une cellule précise , parce que la elle se met sur B9 ,

et il y t'il un moyen de supprimer a chaque fois le tableau coller pour ne pas l'avoir a le supprimer a la main ?

cordialement

Bonjour,

Pour répondre :

  • Non i=1 ne doit pas être remplacé par i=i+1 ce n'est pas un compteur. (astuce de m.. pour coller sur la premiere ligne du tableau)
  • Oui on peut supprimer toutes les valeurs contenue dans le tableau avant de lancer la copie (cf code fonction)

Je n'arrive pas à reproduire ton problème, cela fonctionne correctement chez moi.

Cf code :

 Private Sub Worksheet_Activate()
  Dim plage As Range, c As Range
    Set plage = ([A1:A9])
    For Each c In plage
        If c.Value = "" Then
            c.EntireRow.Hidden = True
        Else
            c.EntireRow.Hidden = False
        End If
    Next c
End Sub

Sub copie_only_visible_cell()
Dim source As Worksheet
Dim destination As Worksheet
Dim d As Range
Dim i As Long

Set source = ActiveWorkbook.Worksheets("Feuil2")
Set destination = ActiveWorkbook.Worksheets("Feuil3")
supp_onglet_data ("Feuil3") 'on supprime les valeurs dans l'onglet Feuil3
i = 0  'Si la premiere copie, on colle sur la premiere ligne donc offset = 0
For Each d In source.Range("A1", source.Range("A65536").End(xlUp))  'On prend toute les lignes de A1 jusqu'a la derniere ligne utilisée (sauf si on a des données après A65536 dans ce cas il faut augmenter la valeur (Excel Version après 2003)
    If d.EntireRow.Hidden = False Then  'Si la ligne est n'est pas caché
        d.EntireRow.Copy  'On copie
        destination.Range("A65536").End(xlUp).Offset(i, 0).PasteSpecial xlPasteValues   'On ne colle que les valeurs et pas les formules ! changer xlPasteValues par xlPasteAll sinon
        'destination.Range("A65536").End(xlUp) => sert a determiner la dernière ligne utilisée =>
        'manuellement cela ferait :
        'on click sur sur la cellule A65536 puis on fait un CTRL + FLECHE HAUT

        'si on veut se mettre sur la ligne d'après il faut mettre "Offset(i, 0)" => on décale de i le nombre de ligne
        'Si le tableau est vide alors on se positionne en premiere ligne i=0
        'Si le tableau n'est pas vide on se positionne sur la ligne en dessous i=1

        i = 1 'Comme c'est la deuxième copie de ligne on met sur la ligne en dessous (offset = 1)
    End If
Next
End Sub
Function supp_onglet_data(nomonglet As String)
Dim source As Worksheet
Set source = ActiveWorkbook.Worksheets(nomonglet)
source.Range("A1", "Z65535").Delete  'On supprime la plage A1->Z65535
End Function

Damien

Bonjour,

Merci

Dans l'exemple que j'ai mis ci joint le code marche mais sur mon tableau cela ne marche pas il n'y a que la premiere ligne qui est copié .

cordialement

Salut,

Question :

Peux tu envoyer ton fichier (même en mp si tu veux)

Peux tu me dire si dans ton tableau on a des valeurs dans la colonne A ?

Damien

Rechercher des sujets similaires à "lier deux tableaux"