Fonction .address sans les $$

Sofhy

XLDnaute Occasionnel
Bonjour à tous,

Alors, j'ai un code, qui utilise les SendKeys pour envoyer une formule nb.si.

Code:
Extrait :
Dim Formule as Variant
formule = "=nb.si{(}$C$3:" & X & ";" & Y & "{)}"

X renvoie les coordonnées de la dernière cellule de la colonne (nb de lignes variable).
Y représente la cellule juste à gauche de la formule.
Jusque là, ça fonctionne.

Par contre, lorsque j'utilise l'Autofil, le Y reste figé, car Activecell.address me renvoie les coordonnées de la cellule avec les $$.

Y a t-il une possibilité de virer les $ ?

Merci par avance,
Sofhy
 

Sofhy

XLDnaute Occasionnel
Re : Fonction .address sans les $$

Merci Pierrot93,

Ca fonctionne parfaitement.

Par contre, ça a réglé ce problème "Y" mais du coup j'en ai un autre, le "W" qui me permet de construire l'autofil de la mon code précédent ...

W est déclaré en String, car si je mets Range, j'ai une erreur.

Un extrait du code :
Code:
Sub blabla
Dim W as string
ActiveCell.Offset(0, 1).Select
W = Selection.Address
Range(W).AutoFill Destination:=Range(W & ":d" & Range("C65536").End(xlUp).Row)

En fait, même quand je fais
Code:
Range(W).select
Ca ne fonctionne pas. J'ai essayé d'autres syntaxe, type Range("W") ou Range ("& W &"). Mais non, ce n'est pas ça :D

Sofhy
 

Sofhy

XLDnaute Occasionnel
Re : Fonction .address sans les $$

Re,

A priori, non.
Le mieux, c'est encore de joindre un fichier.

J'ai juste mis le bout concerné. Avant, il y a un code qui extrait le nom des personnes sans doublons à la fin de la colonne C.

Ensuite, c'est l'autofil en D29 qui ne fonctionne pas.

Merci par avance ;)
Sofhy
 

Pièces jointes

  • Exemple.xls
    36.5 KB · Affichages: 112
  • Exemple.xls
    36.5 KB · Affichages: 129
  • Exemple.xls
    36.5 KB · Affichages: 130
G

Guest

Guest
Re : Fonction .address sans les $$

Bonjour Sofy,
Pierrot:),

@:)Sofy, dans ta destination Autofill, tu n'a pas le même nombre de colonnes (3) que dans la Source(W).

L'exemple ci-dessous fonctionne (ce n'est qu'un exemple) activecell étant en colonne B.

Code:
Sub test()
Dim W As Range
Set W = ActiveCell.Offset(, 1).Resize(, 2)
W.AutoFill Destination:=Range(W, Range("C65536").End(xlUp).Resize(, 2))
End Sub

Destination doit avoir le même nombre de colonnes que source pour un autofill en ligne, ou le même nombre de ligne pour un autofill en colonne.

Source doit être contenu dans destination.

A+

A+
 

Sofhy

XLDnaute Occasionnel
Re : Fonction .address sans les $$

Bonjour Hasco,
Re, Pierrot,

Ah, ah:D, je n'ai pas compris ... pourrais-tu me l'expliquer différemment ? :p

Alors, je connais l'autofil sous cette forme :
Code:
Range("D29").AutoFill Destination:=Range("D29:D" & Range("C65536").End(xlUp).Row)

Comme je l'ai compris, j'ai essayé de le reproduire avec le W, qui vient remplacer le D29 dans cet exemple.

Ca sert à quoi Resize ?

Merci par avance,
Sofhy
 

Pierrot93

XLDnaute Barbatruc
Re : Fonction .address sans les $$

Re, bonjour Hasco:)

avec ce que j'ai compris de ton fichier et de ton besoin...

Code:
With Range("D65536").End(xlUp)(2)
    .FormulaLocal = "=NB.SI($C$4:$C$26;" & .Offset(0, -1).Address(0, 0) & ")"
    .AutoFill Range(.Address & ":D" & Range("C65536").End(xlUp).Row)
End With

@+
 
G

Guest

Guest
Re : Fonction .address sans les $$

Re,

Dans

Code:
Range("D29").AutoFill Destination:=Range("D29:D" & Range("C65536").End(xlUp).Row)

Tu as une Source (D29) d'une seule colonne et tu fais un autofill sur une seule colonne
Code:
(D29:D?)
ça marche.

Mais dans ton exemple plus haut
Tu avais
Code:
ActiveCell.Offset(0, 1).Select
....
Range(W).AutoFill Destination:=Range(W & ":d" & Range("C65536").End(xlUp).Row)

Si ActiveCell était en B1 -> W= "C1"

et Range(W & ":d" & Range("C65536").End(xlUp).Row) donnait C1:D? ( 2 colonnes) autofill ne marche pas.

Fais un débogage pas à pas en evaluant tes expressions dans la fenêtre exécution. (CTRL+G)

Quand ta ligne jaune(Pas à pas) est sur l'instruction AutoFill,
Dans la fenêtre d'execution (CTRL+G) tape:
?W (et ENTRER) tu verra s'affiche la valeur de W
Puis?
?Range(W & ":d" & Range("C65536").End(xlUp).Row).Address (ENTRER)
tu verras l'adresse de ta plage destination.

Si cela ne va pas, fourni un fichier exemple ici.

Quant au resize il permet de retailler une plage (voir l'aide excel)

A+
 

Sofhy

XLDnaute Occasionnel
Re : Fonction .address sans les $$

Re,

Ok, je comprends mieux la source et la destination.

En fait, avec ActiveCell.Offset(0, 1).Select mon "W" sera toujours D29 (enfin dans cet exemple), mais il sera toujours D_quelque chose, première cellule de calcul de la formule.

Par contre, ce que je ne pige pas, c'est que l'autofill ne fonctionne pas. Enfin, si je lance deux fois de suite la macro "sous-totaux", il fonctionne.

Apparemment, il y a juste un petit truc qui bloque, mais je n'arrive pas à mettre la main dessus.

Voyez-vous ce que ça peut être ?

Sofhy
 

Pièces jointes

  • Exemple.xls
    34 KB · Affichages: 57
  • Exemple.xls
    34 KB · Affichages: 49
  • Exemple.xls
    34 KB · Affichages: 59
G

Guest

Guest
Re : Fonction .address sans les $$

Re bonjour,

Voici une macro qui le fera:
voir fichier joint
Code:
Sub Sous_Totaux_3()
    Dim Plage1 As Range 'Plage de la condition (colonne C )
    Dim Plage2 As Range 'Plage du tableau des Totaux contenant les noms
    With Sheets("Avril Bis")
        Set Plage1 = .Range(.Range("C3"), .Range("C3").End(xlDown))
 
        If Plage1.Rows.Count > 1 Then
            Set Plage1 = Plage1.Offset(1).Resize(Plage1.Rows.Count - 1)
            Set Plage2 = Plage1(Plage1.Count).Offset(2)
            'Ligne d'entête des sous-totaux
            With Plage2.Resize(1, 2)
                .Value = Array("Vendeur", "nbVéhicules")
                .Font.Bold = True
            End With
        End If
        'On retient la plage  des noms et on la decale 1 colonne
        Set Plage2 = .Range(Plage2.Offset(1), Plage2.End(xlDown)).Offset(, 1)
        'On travail au départ sur la première cellule de la plage
        With Plage2(1)
            .Formula = "=COUNTIF(" & Plage1.Address & "," & Plage2(1).Offset(, -1).Address(False, True) & ")"
            .AutoFill Destination:=Plage2
        End With
    End With
 
End Sub

A bientôt
 

Sofhy

XLDnaute Occasionnel
Re : Fonction .address sans les $$

Ah YES !!!

Excellent !!!

J'ai trois quatre fichiers qui ont un cas de figure similaire. Et cette macro, whaou ! C'est clair qu'elle va m'aider ... et me faire gagner beaucoup de temps !!

Un grand Merci,
Sofhy
 

Sofhy

XLDnaute Occasionnel
Re : Fonction .address sans les $$

Pierrot93, Hasco,

Merci pour vos codes.


___________________________________________________________
Au début, je tentais de faire du feu en frottant des bouts de bois, et aujourd'hui, grâce à ce forum, je commence à utiliser les Silex.

Vivement le briquet :D
 

Discussions similaires

Statistiques des forums

Discussions
299 952
Messages
1 980 339
Membres
207 061
dernier inscrit
nadirasalifou