Probléme de syntaxe dans Excel VBA

[Résolu]
Signaler
Messages postés
47
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
21 mai 2007
-
Messages postés
47
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
21 mai 2007
-
Bonjour;

Le code ci-dessous me recheche la dernière cellule pleine de ma zone et l'affecte à la variable "Ligne". Je ne trouve pas la syntaxe pour que "Refersto" prenne en compte les références fixes de ma plage + ma variable (ligne). 

Il y a quelchose qui m'échappe !  

Sub Def_zone()
Dim Ligne As Variant
Columns(2).Find("*", , , , , xlPrevious).Offset(1, 0).Select
Ligne = ActiveCell.Row - 1
MsgBox (Ligne)
Sheets("Essai").Select
ActiveWorkbook.Names.Add _
        Name:="Zone_d_impression", RefersTo:="=Essai!"$A$1:$E,"& ligne
End Sub

D'avance Merci

Maxou

11 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
PS : ne tient pas compte de
"Pour une zone, avec dernière cellule :
ActiveWorkbook.Names.Add Name:="sboub", RefersToR1C1:="=Feuil1!R1C1""

c'était le message "bateau" mais je te l'ai modifié (en haut du cadre)
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut Maxou,

Sub Def_zone()
Dim Ligne As Variant
Columns(2).Find("*", , , , , xlPrevious).Offset(1, 0).Select
Ligne = ActiveCell.Row - 1
MsgBox (Ligne)
Sheets("Essai").Select
ActiveWorkbook.Names.Add _
Name:="Zone_d_impression", RefersTo:="=Essai!$A$1:$E$" & Ligne
End Sub

Je t'ai corrigé 2 / 3 caractères dans ta formule.
Tu avais un " mal placé, il te manquait un $ et ligne, dans ta déclaration est avec un L majuscule.
De plus, Dim Ligne As Variant c'est pas très bon, met plutôt
Dim Ligne As Long
Essai la avec la modif

@++
Mortalino
Messages postés
47
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
21 mai 2007

Bonjour Mortalino;

Ok bien ça marche.
 
J'ai 2 questions :
1) Pourquoi je ne retrouve pas ma zone définie dans le menu déroulant en haut à gauche juste au-dessus de la feuille ?
2) Ma zone existe bien dans la liste des noms de zones, mais si je fais un aperçu avant impression elle n'est pas prise en compte !

Définir automatiquement des zones ainsi n'est peût être pas correct !

A+
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
je te propose une autre solution :

Sub Def_zone()
Dim PremLiVide As Variant
PremLiVide = Range("A1").End(xlDown).Row + 1

MsgBox (Ligne)

Sheets("Essai").Select
ActiveSheet.PageSetup.PrintArea = "$A$1:$G$" & Ligne
End Sub

Sur mon PC, ça fonctionne !

@++
Mortalino
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Correction :

Sub Def_zone()
Dim PremLiVide As Variant
PremLiVide = Range("A1").End(xlDown).Row + 1

MsgBox (PremLiVide)

Sheets("Essai").Select
ActiveSheet.PageSetup.PrintArea = "$A$1:$G$" & PremLiVide
End Sub

Sur mon PC, ça fonctionne !

(j'ai changé ton Ligne en PremLiVide et j'ai oublié de faire certaines modifs)
Messages postés
47
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
21 mai 2007

Merci Mortalino, super ça marche !

J'essaye de faire la même chose sur ma feuille pour un tableau croisé dynamique auquel je fais référence à une plage nommée, cela m'évite de refaire le TCD à chaque fois que je rajoute des données. (Nota je ne peux pas insérer ces données dans la feuille, techniquement cela me pose des problèmes)
En fait je mets à jour manuellement ces zones dans le menu nom définir.
J'ai juste à actualiser les données du TCD.

La solution fonctionne pour l'impression mais par pour le TCD, alors que la zone existe !
As tu une explication ?

Ce sera la dernière question pour ce théme...

Merci Maxou
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
pour faire une référence, c'est différent :

Dim PremLiVide As Variant
PremLiVide = Range("A1").End(xlDown).Row + 1

ActiveWorkbook.Names.Add Name:="sboub", RefersToR1C1:="=Essai!R1C1:R" & PremLiVide & "C5"
___________________________________________
dans "=Feuil1!R1C1" |
R1 veut dire Row 1 (donc 1ere ligne) |
C1 veut dire Columns 1 (donc 1ere colonne) |
=> bref, Range("A1") |
___________________________________________|
Pour une zone, avec dernière cellule :
ActiveWorkbook.Names.Add Name:="sboub", RefersToR1C1:="=Feuil1!R1C1"

Ce que je t'ai donné tout à l'heure, c'est la zone d'impression.

@++
Mortalino
Messages postés
47
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
21 mai 2007

Encore merci Mortalino.

Pour mon TCD le pb n'est pas réglé, je n'arrive pas à construire mon TCD en faisant référence à ce nom de plage.
Mais je ta réponse m'as donné une autre piste.

Si pb je reposerai ma question sur le forum !

A+
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Qu'est ce que tu appelles TCD ?

ça me mettra peut-être sur la voie concernant ce que tu veux faire !!
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
C'est bon, j'ai compris...
"tableau croisé dynamique"

(moi et les abréviations, ça fait pas 2 !)
Messages postés
47
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
21 mai 2007

La mauvaise habitude du boulot "Un tableau croisé dynamique" !

Maxou