référence relative dans une plage nommée en VBA

Risleure

XLDnaute Occasionnel
Bonjour le Forum

Je réalise plusieurs importations de données de plusieurs fichiers .txt par macro selon le code suivant
Code:
 With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FichierChoisi, Destination:=Range(Position))
        	.Name = "DataImport"
	...
Comme il peut y en avoir plusieurs zones d'importation sur la même feuille (ActiveSheet) !! XL les nomme successivement "DataImport, DataImport_1, DataImport_2, ... Lors de l'importation la macro récupère le nom de la dernière importation par
Code:
TableCourante = ActiveSheet.QueryTables(1).Name
NB, il m'a fallu un moment pour comprendre que la dernière table porte l'indice le plus bas!!!
Ensuite, la macro passe par une phase de nettoyage de la dite table et c'est là que je cale.
Je souhaite par exemple décaler des lignes 14 à 26 de la 3ème colonne dans la zone renvoyée par TableCourante"
Mais le code ci dessous ne fonctionne pas
Code:
ActiveSheet.Range(TableCourante).Range(Cells(14, 3), Cells(26, 3)).Insert Shift:=xlDown

C'est une histoire de savoir faire de la référence relative dans une plage nommée mais je ne trouve pas ni dans l'aide XL ni avec des mots clefs dans ce Forum et je sens bien qu'écrire .Range(...).Range(cells(..)) n'est pas trop bon :(
Mais il est peut être plus simple de travailler par rapport à la cellule "Position" qui est l'adresse de la cellule en haut à droite de la table importée, ce qui ne change rien car je m'adresse toujours au Range(Cells(14, 3), Cells(26, 3) par rapport à cette cellule.

J'attends votre choix et conseils éclairés. :D

Merci d'avance
 

Catrice

XLDnaute Barbatruc
Re : référence relative dans une plage nommée en VBA

Bonsoir,

Pas sur d'avoir tout compris, mais je crois que tu peux regarder du coté de Offset.
Range("A2").Offset(x,y)
ou
Cells(2,3).Offset(x,y)


x = un nombre de lignes de deplacement
y = un nombre de colonnes de deplacement
 

Risleure

XLDnaute Occasionnel
Re : référence relative dans une plage nommée en VBA

Bonjour le Forum, Catrice

Merci d'avoir tenté une réponse mais j'ai peut être très mal formulé ma question.
Donc en la simplifiant au maximum, je souhaite savoir comment réaliser une insertion de cellules vides dans la 3ème colonne de la ligne 14 à la ligne 26 cela dans une plage nommée (par exemple "DataImport_3" et qui peut se trouver n'importe où dans la feuille.
Sachant que le code cidessous ne fonctionne pas
Code:
ActiveSheet.Range("DataImport_3").Range(Cells(14, 3), Cells(26, 3)).Insert Shift:=xlDown
:mad:
 
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : référence relative dans une plage nommée en VBA

Bonjour,

ci-joint une solution à tester :

Code:
Sub Test()
Deb = 14
Fin = 26
Col = 3
'---------------------------
ActiveSheet.Range("DataImport_3").Offset(Deb - 1, Col).Resize(Fin - Deb + 1).Insert Shift:=xlDown
End Sub
 

Pièces jointes

  • Classeur1.xls
    42.5 KB · Affichages: 113
  • Classeur1.xls
    42.5 KB · Affichages: 113
  • Classeur1.xls
    42.5 KB · Affichages: 101
Dernière édition:

Risleure

XLDnaute Occasionnel
Re : référence relative dans une plage nommée en VBA

Re,

Merci Catrice pour cette solution qui utilise resize et offset. J'avais trouvé une solution fonctionnelle mais qui semble être fragile.

Code:
Application.Goto Reference:= "ImportData_3"
Selection.Range(Cells(14, 3), Cells(26, 3)).Insert Shift:=xlDown
...

Je regarde ta solution pour voir si elle est plus solide

Merci ;)
 

Discussions similaires

Réponses
7
Affichages
433

Statistiques des forums

Discussions
312 225
Messages
2 086 412
Membres
103 202
dernier inscrit
Claire2BM