Gestion des plages de données en VBA

Bonjour à tous,

Je reviens vers vous aujourd'hui pour trouver réponse à ma question. A moins d'avoir mal cherché je n'ai pas trouvé de réponse à mon problème qui m'aurait semblé assez banal. Enfin bref, passons au vif du sujet ^^ :

J'ai un fichier excel dans lequel j'ai récupérer diverses plages de données, qui ont font références à des cellules différentes et dont la taille diffère d'une plage à l'autre.

Voici un petit exemple tout droit sorti de mon fichier :

nom : plageAbricotL1 ; Fait référence à : ='Liste Produits Ligne1'!$B$2:$B$191

nom : plageCeriseL1 ; Fait référence à : ='Liste Produits Ligne1'!$BK2:$BK$213

J'ai à coté de cela une feuille "Autorisation Produits L1" dans laquelle j'aimerai copier l'intégralité de la plage souhaitée en fonction de la valeur d'une cellule. Voici un exemple pour illustrer :

Feuille "Autorisation Produits L1" : Cellule A2 = "Abricot"

=> Je voudrais copier le contenu de ma plageAbricotL1 écrit entre A3 et A192

En espérant avoir été clair, je n'ai pas joint de fichier car le PC sur lequel je travail n'est pas en réseau, je pourrai faire un petit fichier d'exemple si nécessaire, mais je pense que ma requête n'est pas trop complexe : je recherche grosso modo une fonction qui me permettrait de coller l'intégralité d'une plage de données en connaissant le nom de la plage, les cellules auxquelles elle fait référence et la 1ere cellule dans laquelle on veut la coller .

Par avance merci,

Auzingueur

bonjour,

ça parait en effet relativement simple cependant merci de joindre un fichier !

Nota : Les fonctions ne font rien ("elles ne collent rien") Ce sont les macros qui font ce genre de travail...

A+

Ci-joint une version simplifiée de mon problème.

Et oui, je me suis peut être mal exprimé, mais il est évident que c'est bien une maccro que j'essaye de mettre en place ^^

J'ai une contrainte supplémentaire cependant, cette maccro sera amenée à tournée très fréquemment (sur un On_Change) de ma feuille, il faudrait donc qu'elle soit la plus rapide possible (si tant est qu'il soit possible d'optimiser le code).

Ah oui, je peux aussi vous présenter le bout de code que j'ai actuellement, si cela peut aider :

dim nom as Name
dim Plage as Range
dim arrang as string

For Each nom in ThisWorkbook.Names
       if nom.Name = "plage" & arrang then   'arrang contient ici ma valeur "Abricot" ou "Cerise"
       set Plage = nom.RefersToRange
         'Ma ligne manquante pour réécrire la plage 
        end if
Next

Bonjour,

Macro à coller dans le module de la Feuille "Autorisation..." :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim a(), iR%, iC%, Z$, isect
   If Target.Count = 1 Then
      Set isect = Application.Intersect(Target, Range("$D$3"))
      If Not isect Is Nothing Then
         Z = "Plage" & Target.Value
         a = Worksheets("ProduitsL1").Range(Z).Value
         Range("D4:D" & UBound(a) + 3) = a
      End If
   End If
End Sub

A+

Pffff, la stupidité est humaine, mais là j'ai franchi un cap assez élevé, je n'arrivais pas a avoir ce que je voulais, car mes erreurs précédentes dans le code m'avait changé les valeurs sur la plage que je cherché. En gros mon code faisait bien le taf, mais c'est mes données qui avaient étaient modifiées sans que je m'en aperçoive (il faut dire que j'ai plusieurs centaines de colonnes et autant de plages ^^').

Du coup la ligne manquante à mon code précédant pour écrire la plage la voici :

Plage.Copy Sheets("Autorisation Produits").Range"(H3:H" & (Plage.Count)+1)

(A adapter à son fichier )

Merci a galopin pour avoir pris le temps de regarder mon problème, et désolé du dérangement inutile pour le coup

Bonne continuation!

EDIT : Ta solution à l'air plus opti, je vais quand même prendre le temps de la tester, merci

Rechercher des sujets similaires à "gestion plages donnees vba"