Se connecter avec
S'enregistrer | Connectez-vous

Problème argument dans une macro Excel

Dernière réponse : dans Programmation

Bonjour,

j'utilise une fonction que je dois répeter plusieurs fois avec deux arguments. Seulement je n'arrive pas à trouver les natures d'arguments qui vont bien.

En effet, dans cette fonction :

  1. Sub CopierCollerLigne(a as argument, b as argument)
  2. '
  3. ' CopierCollerLigne Macro
  4. ' Macro recorded 03/09/2009 by Mathieu
  5. '
  6.  
  7. Sheets("Suivi Chap.15").Select
  8.  
  9. For Each c In [a:b]
  10. c.Select
  11.  
  12. ...


je ne sais pas quels sont les types d'arguments qu'on doit mettre entre les crochets (strings, range ?)

J'ai déjà essayer de mettre comme arguments des "range" mais ca ne marche pas...

Merci beaucoup,

Mathieu

Autres pages sur : probleme argument macro excel

Lassé par la pub ? Créez un compte
Expert Programmation

Salut Mathieu :hello: 

Alors là, un nouveau venu à qui il n'est pas besoin de dire qu'il faut dire bonjour et qu'il faut utiliser la balise [code], chapeau !

Sois le bienvenu, je ne doute pas que tu vas recevoir bientôt de l'aide :) 
Expert Programmation

Salut,

Voici de l'aide :D 

1°, Ligne 7, on sait que la feuille (sheet) est de type calcul (worksheet), alors c'est dans la collection worksheets qu'on va aller taper.

2° GRRRRRRRRRR un Select [:alzheimer parkinson]

2°BIS, j'espère que la ligne 10 n'est qu'un exemple. Parce que si tu prétends m'écrire un truc du genre :
  1. c.Select
  2. Selection.fonction
oublie tout de suite que j'ai voulu d'aider [:zeb:4]

Sauf à le faire exprès, les fonctions select et activate sont mauvaises. Fais une petite recherche sur ce site, j'explique 1000 fois pourquoi.

Ligne 7, il faudra faire l'effort de préciser la feuille à chaque fois. Utiliser une variable est une bonne idée.
Ligne 10, puisque tu as une variable "c" sur la cellule, pas besoin de la sélectionner.

3° Oui, bien sûr que a et b sont des Ranges. Assez curieusement, le type Cellule n'existe pas en VBA/Excel :spamafote: 

Voilà la réponse à ta question :

  1. ' // CopierCollerLigne Macro
  2. ' // Macro by zeb ;)
  3.  
  4. ' // Avec des Range
  5. Sub CopierCollerLigne(A as Range, B as Range)
  6. Dim C As Range
  7. For Each c In Range(A,B)
  8. C.Copy Destination
  9. Next
  10. End Sub
  11.  
  12. Sub Appel
  13. ' // 1
  14. CopierCollerLigne Worksheets("Suivi Chap.15" ).Range("A2"), Worksheets("Suivi Chap.15" ).Range("B4")
  15.  
  16. ' // 2
  17. With Worksheets("Suivi Chap.15" )
  18. CopierCollerLigne .Range("A2"), .Range("B4")
  19. End With
  20.  
  21. ' // 3
  22. Dim ws15 As Worksheet
  23. Set ws15 = Worksheets("Suivi Chap.15" )
  24. CopierCollerLigne ws15.Range("A2"), ws15.Range("B4")
  25. End Sub
Expert Programmation

Encore de l'aide :bounce: 

J'aime pas du tout cet appel avec deux Ranges qui n'en deviennent qu'un. L'effort devrait être fait avant !
Regarde :
  1. ' // Avec un Range
  2. Sub CopierCollerLigne(cellules_a_copier as Range)
  3. Dim cellule As Range
  4. For Each cellule In cellules_a_copier
  5. cellule.Copy Destination
  6. Next
  7. End Sub
  8.  
  9. CopierCollerLigne Worksheets("Suivi Chap.15" ).Range("A2:B3" )


Oui, mais c'est quoi cette destination ?

  1. Sub CopierCollerLigne(cellules_a_copier as Range, destination As Range)
  2. Dim source As Range
  3. Dim cible As Range
  4.  
  5. Set cible = destination
  6. For Each source In cellules_a_copier
  7. source.Copy cible
  8. Set cible = destination.Offset(1, 0)
  9. Next
  10. End Sub
  11.  
  12. CopierCollerLigne Worksheets("Feuille source" ).Range("A2:B3" ) Worksheets("Feuille de destination" ).Range("A1")


Bon après, il faut savoir ce que tu veux copier, comment, de où à où, etc.
J'espère que ces quelques lignes t'aident déjà !

Si tu as d'autres questions, n'hésite pas ;) 

Bonjour Zeb,

merci tout d'abord pour tes réponses. Comme tu as du le remarquer, je suis un peu nouveau dans le monde VBA, et les "select" c'était pour les enregistrements de macros ...

Mais tu t'es bien fait comprendre, j'ai tout effacé et recommencé.

J'avais déjà réussi avec la solution de ta première réponse, mais la deuxième est plus pertinente.

En fait je réalise un test sur ce que tu appelles "cellules_à_copier" (test de cohérence des données), et si ce test est négatif, je copie un groupe de 10 cellules en ligne que j'insère sur une autre worksheet. Ma macro complète crée cette nouvelle worksheet et fait le test de cohérence.

Merci encore pour ton aide, tu m'a mis sur des bons rails... parce que c'était pas bien parti :sweat: 

A bientôt,

Mathieu
Lassé par la pub ? Créez un compte