Réaffecter une liste de valeur par défaut à un tableau

Bonjour à tous,

J'ai une petite question épineuse pour laquelle je n'ai pas trouvé de réponse sur le forum.

J'ai une feuille de calcul avec des valeurs que je souhaite pouvoir laisser sans formule pour qu'un utilisateur puisse modifier les valeurs manuellement (ce sont les cellules en rouge dans la feuille "modifiable" du classeur joint).

Cependant j'aimerais pouvoir réaliser une remise à zero des valeurs par défaut qui sont stocké dans la feuille "RAZ"

Si je passe par un "INDEX/EQUIV", dans ce cas je suis obligé de mettre des formules dans les cellules rouges que l'utilisateur ecrasera s'il souhaite modifier les champs manuellement.

14classeur-test.xlsx (17.47 Ko)

Du coup, je passe par une boucle VBA qui va chercher les valeurs par défaut dans une autre feuille (Feuille "RAZ" dans mon fichier d'exemple). Et vient les affecter au tableau "modifiable" une à une.

Sur le papier ça fonctionne bien, mais l'exécution se fait une à une, et c'est très long (sachant que dans mon vrai tableau j'ai encore plus de valeur).

Auriez-vous une solution pour "charger" l'intégralité des valeurs d'un coup, ou simplifier le code pour acceléré l'exécution ?

J'éspère que je suis suffisament clair,

Merci d'avance,

Bonne journée,

Guillaume

Bonjour,

Une seule instruction est nécessaire en nommant respectivement les plages C5:K32 de vos 2 feuilles en par exemple : coûts et forfaits

Range("coûts").Value = Range("forfaits").Value

ci-joint fichier
9classeur-test.xlsm (22.66 Ko)

Excellent !!

Merci beaucoup pour ce retour express, c'est nettement plus efficace !!

Bonne journée

Auriez-vous une astuce dans le cas où les valeurs à verser ne sont pas dans le même format ?

Par exemple si j'ai une liste de valeur à charger en colonne et j'ai extrait la ligne et colonne de la cellule à remplir d'une autre feuille (donc elles ne sont pas en colonne dans l'autre feuille):

image

Bonjour,

Votre exemple n'est pas très clair car toutes vos valeurs sont en colonne.

En tous cas pour inverser le format des valeurs, il suffit d'utiliser la fonction "Transpose". Si plage1 contient par exemple 3 valeurs en ligne et si plage2 contient 3 valeurs en colonne, cette instruction copiera les valeurs de plage1 dans plage2 :

Range(plage2).Value = Application.Transpose(Range(plage1).Value)

Bonjour,

Désolé, c'était effectivement pas très clair.

En fait ma liste de valeur à charger est en colonne (liste "valeur" dans l'exemple ci-dessous), et les cellules dans lesquelles je doit charger les valeurs n'ont pas d'ordre logique. Elles sont réparties un peu partout dans une autre feuille (ces sont les "cellules 1,2,3 et 4" dans l'exemple ci-dessous).

Y-aurai-t-il quand même un moyen de tout charger d'un coup ? Ou je dois le faire une à une ?

Merci d'avance,

image

Bonjour,

Si vos cellules réceptrices ne sont pas contiguës, ce n'est pas possible.

Vous pouvez cependant réduire votre temps de traitement en utilisant un tableau dynamique. Vos valeurs de départ étant contiguës et placées en colonne, cette instruction vous fournira un tableau dynamique à une dimension :

    Dim valeurs(): valeurs = Application.Transpose(Range("C5:C8").Value)

ci-dessous exemple de code :

    Dim i
    Dim cellules As Range, cellule As Range
    Dim valeurs(): valeurs = Application.Transpose(Range("C5:C8").Value)

    i = 0
    Set cellules = Range("F3, H5, E12, G9")
    For Each cellule In cellules
        i = i + 1: If i > UBound(valeurs) Then Exit Sub
        cellule = valeurs(i)
    Next cellule

Parfait, merci beaucoup pour vos différentes solutions !

Rechercher des sujets similaires à "reaffecter liste valeur defaut tableau"