VBA et cellules nommees

Bonjour

J'ai un fichier excel me permettant deux choses a partir des donnees que je rentre sur la feuille "CALCULATION" puis en appuyant sur le bouton :

- envoyer un mail (pas de soucis avec ca, j'ai deja la macro que je ne met pas ici pour simplifier)

- ajouter mes donnees a un tableau qui regroupe toutes les donnees passees.

Pour le moment le code marche a merveille, mais comme rien n'est parfait, j'ai besoin d'une amelioration. En effet, je suis ammene a rajouter/deplacer/supprimer des champs et donc en consequent deplacer/ajouter des colonnes dans la feuille "Datas".

Pour eviter de longues modifications de code au risque de glisser de petites erreurs, j'ai nomme mes colonnes et mes cellules a remplir. J'ai donc modifie cel_src et cel_dst par les noms correspondants.

Cependant, VBA n'accepte apparemment pas le Range(cel_src(i)). Auriez-vous une solution ?

Je joint un fichier excel avec le code originel a ce post.

Merci d'avance


Petite correction de ce que j'ai rentre (j'ai juste mal recopie)

'ce que j'ai rentre et qui ne marche pas :
'cel_src = Split("date customer collection_post_code delivery_post_code price promotion")
'cel_dst = Split("date_data cust_data from_data to_data price_data promo_data")
18essai1.xlsm (26.61 Ko)

au lieu de nommer tes colonnes tu devrais utiliser la notion de tableau nommés

je te joins quelques fichiers expliquant la notion

et on on utilise range avec le nom du tableau suivi de l'entête de colonne

tu fais dans l'ordre 400, 500, 600, 650

Bonjour

On peux aussi utiliser le code spécifique aux ListObjects : faudra faire le 700 !

Dans certains cas cela apporte vraiment dans d'autres moins...

Bonjour,

Rectifier l'instruction comme suit :

.Range(cel_dst(i)).Rows(.Rows.Count).End(xlUp)(2) = wsCal.Range(cel_src(i))

Remarque:

cel_src et cel_dst sont définis en Variant et non en tableau

 Dim cel_src() As String, cel_dst() As String, wsCal As Worksheet, i%

Tu peux faire encore plus simple en donnant des noms de plage (de type feuille) identiques aux 2 feuilles. Ci-joint exemple avec la macro "Définitions" pour créer les noms.

17essai2.xlsm (25.89 Ko)

bonjour à tous

question (bête ? ) : puisque la macro fonctionne sur l'onglet 1, alors on pourrait simplement mettre les données en onglet 2, et en onglet 1 mettre un MIR miroir des colonnes voulues (il suffit de mettre des = )

Bonsoir,

Je ne vois pas très bien où tu veux en venir, et pour cause puisque ce n'est pas très défini !

Je ne pense pas que la voie choisie : multiplier les noms soit bénéfique à terme et apporte un élément de gestion dynamique...

En effet, je suis ammene a rajouter/deplacer/supprimer des champs et donc en consequent deplacer/ajouter des colonnes dans la feuille "Datas".

Rien n'étant fait dans ce sens, on ne peut rien voir, mais on peut prévoir que les ajouts, ne figurant pas dans le code, ne seront pas pris en compte...

D'autre part je ne vois pas ce qui pourrait empêcher de s'appuyer sur un noyau structurel stable, même si des éléments seront mouvants. Une structure de base stable ne relève de de la seule décision qu'elle ne bougera pas ! La gestion des éléments mouvants est à voir selon qu'elle peut se rattacher aux éléments stables (s'en déduire) ou à l'inverse exige une opération préalable de repérage à chaque intervention.

Mais en tout état de cause, les éléments absents, sont intégrables s'ils sont prévisibles (donc prévus à l'avance), mais pas s'ils ne le sont pas ! et il n'y a pas lieu alors de s'en préoccuper.

Cordialement.

Bonjour a tous

Merci de vos diverses reponses et desole pour ce petit silence radio. J'ai plusieurs petites questions :

@gullaud : Oui j,ai pense a utiliser des tableaux mais tu ne dis pas comment rajouter des lignes avec VBA. De plus quand je met juste un tableau, il met une donnee par ligne ce qui ne convient pas du tout.

@jmd : etant novice en VBA, je ne sais pas du tout ce que fais ni utiliser la fonction MIR.

@thev :

cel_src et cel_dst sont définis en Variant et non en tableau

Ca marche encore moins en les definissant en tableau puisque ca bloque au niveau du UBOUND.

@MFerrand : effectivement, si je rajoute un champ il sera ajoute manuellemengt au code. Mais le but est donc de ne rajouter que le nom de la cellule et celui de la nouvelle colonne sans tout changer.au code (par exemple si ma nouvelle colonne vient s'intercaler entre deux autres).

Pourquoi tout simplement je ne peux pas appeler une cellule nommee dont le nom est contenu dans un tableau ? Dois-je proceder etapes par etapes ?... Le but est de ne pas avoir quelque chose de trop complique dans mon code pour le modifier rapidement.

Bonjour,

Que te dire ?

Mais le but est donc de ne rajouter que le nom de la cellule et celui de la nouvelle colonne sans tout changer.au code

Ma conception est plutôt de ne jamais rien avoir à changer au code en cas de modifications, donc que les modifications potentielles soient prévues dans le code...

Et si on change de façon imprévue, là on repart à zéro et on recode en conséquence ! C'est un nouveau projet !

Ton souci relatif à des modifications que tu n'aurais pas prévues et que tu voudrais parvenir à prendre tout de même en compte m'est totalement étranger. On touche au code ou on n'y touche pas ! Si on y touche, mieux vaut le faire vraiment, pas avec des rustines plus ou moins mal adaptées.

Cordialement.

ch69 a écrit :

Bonjour a tous

@jmd : etant novice en VBA, je ne sais pas du tout ce que fais ni utiliser la fonction MIR.

ce n'est pas une fonction, c'est moi qui nomme les onglets miroirs "MIR"

un onglet miroir contient uniquement des liens vers un onglet plein de données (ce sont des signes = ). Rien de plus simple

pas de VBA

un onglet miroir contient uniquement des liens vers un onglet plein de données (ce sont des signes = ). Rien de plus simple

pas de VBA

Effectivement ce serait plus simple... Mais j'ai du mal a concevoir une formule faisant en sorte que le tableau se complete au fur et a mesure de l'appui sur un bouton.

Fin mot de l'histoire : je suis finalement revenu a un truc plus long mais plus simple (du meme type que mon code non simplifie sur ce sujet : https://forum.excel-pratique.com/excel/simplifiation-de-code-t96566.html

Pour ceux que ca interesse, voici mon code (si il y en a qui veulent s'amuser a le simplifier, je suis preneur )

Sub Add_To_List()

Dim cel_src, cel_dst As Range
Dim DernLigne As Long
DernLigne = Worksheets("Datas").Range("A" & Rows.Count).End(xlUp).Row

Set cel_src = Range("date")
With Worksheets("Datas")
    Set cel_dst = .Cells(DernLigne, Range("date_data").Column)
End With
cel_dst.Value = cel_src.Value

Set cel_src = Range("customer")
With Worksheets("Datas")
    Set cel_dst = .Cells(DernLigne, Range("cust_data").Column)
End With
cel_dst.Value = cel_src.Value

Set cel_src = Range("collection_post_code")
With Worksheets("Datas")
    Set cel_dst = .Cells(DernLigne, Range("from_data").Column)
End With
cel_dst.Value = cel_src.Value

Set cel_src = Range("delivery_post_code")
With Worksheets("Datas")
    Set cel_dst = .Cells(DernLigne, Range("to_data").Column)
End With
cel_dst.Value = cel_src.Value

Set cel_src = Range("price")
With Worksheets("Datas")
    Set cel_dst = .Cells(DernLigne, Range("price_data").Column)
End With
cel_dst.Value = cel_src.Value

Set cel_src = Range("promotion")
With Worksheets("Datas")
    Set cel_dst = .Cells(DernLigne, Range("promo_data").Column)
End With
cel_dst.Value = cel_src.Value

End Sub

Bonjour ch69, bonjour le fil, bonjour le forum,

Si tu y tiens ...

Sub Add_To_List()
Dim DernLigne As Long

With Worksheets("Datas")
    DernLigne = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Cells(DernLigne, Range("date_data").Column) = Range("date")
    .Cells(DernLigne, Range("cust_data").Column) = Range("customer")
    .Cells(DernLigne, Range("from_data").Column) = Range("collection_post_code")
    .Cells(DernLigne, Range("to_data").Column) = Range("delivery_post_code")
    .Cells(DernLigne, Range("price_data").Column) = Range("price")
    .Cells(DernLigne, Range("promo_data").Column) = Range("promotion")
End With
End Sub

A+

Joseph

Super,exactement ce qu'il me fallait

merci Beaucoup !

Rechercher des sujets similaires à "vba nommees"