Se connecter avec
S'enregistrer | Connectez-vous

Macro VBA copier-coller tableaux help !

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

Salut,

C'est pas mal tout ça.
Bon, tout d'abord, renseigne-toi sur la directive Option Explicit. C'est indispensable.
Ensuite, renseigne-toi sur ce qu'est l'indentation. Lire ton code pique les yeux, ma chère.

La collection de tous les onglets d'un classeur Excel , c'est Sheets que tu utilises. Mais ce classeur peut contenir plusieurs types d'onglets : feuille de calcul (Worksheet), graphique (Charts), macro XL4, boîte de dialogues, etc... A lire ton code, je t'exhorte à utiliser la collection Worksheets.

  1. Range("A:A")
Moui... J'aurais tendance à écrire
  1. Columns("A")
  2. Columns(1)


Après avoir placer Option Explicit et corriger ton code, je t'invite à reposer ta question.

  1. Sub Macro1()
  2. 'Voici ma macro qui:
  3. 'efface les données de la feuille 1 (qui est celle de la feuille
  4. 'récapitulative)
  5. 'copie la ligne 1 (qui est la ligne d'entêtes de colonnes) de la feuille 2 sur la feuille 1
  6. 'copie la plage des données des feuilles 2 au nombre total de feuilles du classeur sur la première feuille
  7. 'la plage copiée commence à partir de la ligne 2 jusqu'à la dernière ligne contenant des données (colonnes A à H ).
  8. Dim Feuil1 As Worksheet
  9. Dim l As Long
  10. Dim f As Integer
  11. Dim Plage As Range
  12. Dim Lignes As Long
  13. Sheets("Feuil1").Cells.Clear
  14. Sheets("Environnement interne").Range("A1:H1").Copy _
  15. Destination:=Sheets("Feuil1").Range("A1")
  16. l = 2
  17. For f = 2 To Sheets.Count
  18. If Application.CountA(Sheets(f).Range("A2"). _
  19. CurrentRegion) <> 0 Then
  20. With Sheets(h)
  21. Lignes = .Range("A:A").Find("*", , , , , xlPrevious).Row
  22. Set Plage = .Range(.Cells(2, "A"), .Cells(Lignes, "H"))
  23. End With
  24. Plage.Copy Destination:=Sheets("Feuil1").Cells(l, "A")
  25. l = Sheet("Feuil1").Range("A:A").Find("*", , , , , xlPrevious).Row + 1
  26. End If
  27. Next f
  28. End Sub

  1. Option Explicit
  2. Sub Macro1()
  3.  
  4. 'Voici une macro qui:
  5. 'efface les données de la feuille 1 (qui est la feuille récapitulative)
  6. 'copie la ligne 1 (qui est la ligne d'entêtes de colonnes) de la feuille 2 sur la feuille 1
  7. 'copie la plage des données des feuilles 2 au nombre total de feuilles du classeur sur la première feuille
  8. 'la plage copiée commence à partir de la ligne 2 jusqu'à la dernière ligne contenant des données (colonnes A à H ).
  9.  
  10. Dim l As Long
  11.  
  12. Dim f As Integer
  13.  
  14. Dim Plage As Range
  15.  
  16. Dim Lignes As Long
  17.  
  18. Dim Feuil1 As Worksheet
  19.  
  20. Worksheets("Feuil1").Cells.Clear
  21. Worksheets("Environnement interne").Range("A1:H1").Copy _
  22. Destination:=Worksheets("Feuil1").Range("A1")
  23.  
  24. l = 2
  25.  
  26. For f = 2 To Sheets.Count
  27. If Application.CountA(Worksheets(f).Range("A2").CurrentRegion) <> 0 Then
  28. With Worksheets(f)
  29. Lignes = .Columns("A").Find("*", , , , , xlPrevious).Row
  30. Set Plage = .Range(.Cells(2, "A"), .Cells(Lignes, "H"))
  31. End With
  32. Plage.Copy Destination:=Worksheets("Feuil1").Cells(l, "A")
  33. l = Worksheets("Feuil1").Columns("A").Find("*", , , , , xlPrevious).Row + 1
  34. End If
  35. Next f
  36.  
  37. End Sub




Mon code marche merci beaucoup zeb! je vais faire d'option Explicit UN IMPÉRATIF. Je ne sais pas si c'est mieux du coté de l'indentation mais j'espère que tes yeux piquent moins. Encore Merci pour le worksheets a la place de sheets ; j'apprends tous les jours!

Citation :

Choisis la moins mauvaise des réponses, cela passera le topic en [Résolu].

Et feras gagner des points à Zeb :fou:  lol

Citation :

j'espère que tes yeux piquent moins

Qu'est-ce qu'elle est gentille cette "dina", elle fait attention à tes petits yeux :wahoo: 
Expert Programmation

Euh, les points je n'en fous un peu. Je suis au taquet ! T'as pas vu le rond jaune à côté de mon avatar ? :sol: 

Je suis responsable de la bonne tenue de ce coin de forum, alors il faut une meilleure réponse à ce topic pour le marquer [Résolu] :p 

Citation :
elle est gentille cette "dina"
Mais tout le monde est gentil, ici ! [:spamafote]
Les grossiers et les méchants, je les botte hors d'ici [:zeb:4]
Lassé par la pub ? Créez un compte