IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème avec activecell en vba


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut Problème avec activecell en vba
    Bonjour à tous,

    Je débute en vba et je me trouve face à un problème que je n'arrive pas à résoudre toute seule malgré des recherches sur le net.
    Peut être que l'un d'entre vous aura la réponse.

    Grace à l'entraide j'ai eu un fichier que j'essaie d'adapter à mes besoins.

    Je suis prestataire de service.
    J'ai une feuille (qui s'appelle ANALYSE DE PRODUCTION) avec un tableau qui fait 18 colonnes, la 1ere ligne de saisie est la 5.
    J'y rentre différentes infos concernant les clients, dont les heures prévues à passer par les collaborateurs sur le dossier de chaque client et les heures réellement passées. Ceci afin d'analyser les temps de chaque collaboteur sur chaque client.
    En colonne "o", je voudrais pouvoir voir le cumul (c'est à dire le solde) des heures prévues - heures passées qui sont inscrit dans la colonne précédente la "n" (par le biais d'une saisie dans 1 usf) pour un seul client après avoir faire un filtre automatique sur la colonne correspondant au nom du client.

    J'ai trouvé la formule qui me permets de le faire :
    =SOUS.TOTAL(9;$N$5:N5)
    Je la recopie dans les cellules du dessous et tout marche bien, mon total s'ajuste bien en fonction des cellules visibles.

    J'ai donc voulu la coder dans mon usf, j'ai crée une macro pour voir ce qu'il allait me dire et il en ressort :
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R5C14:RC[-1])"

    J'ai donc ensuite mis ce code au niveau des lignes en gras ci-dessous dans la partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    With Sheets("ANALYSE DE PRODUCTION")
    Nl = .Range("A65536").End(xlUp).Row + 1 'ligne ou j'écris
    .Range("l" & Nl).Value = TextBox2.Value 'Prix HT
    .Range("j" & Nl).Value = TextBox1.Value 'Heures
    .Range("c" & Nl).Value = ComboBox1.Value 'COLLABORATEUR
    .Range("d" & Nl).Value = ComboBox2.Value 'CLIENTS
    .Range("e" & Nl).Value = ComboBox3.Value 'FACTURE/AVOIR
    .Range("g" & Nl).Value = ComboBox4.Value 'Mission
    .Range("m" & Nl).FormulaR1C1 = "=RC[-1]-RC[-2]"
    .Range("F" & Nl).Value = TextBox4.Value 'N° Facture avoir
    .Range("h" & Nl).Value = ComboBox5.Value 'Tâches
    .Range("i" & Nl).Value = TextBox3.Value 'Complémnent d'intitulé
    .Range("A" & Nl).Value = DTPicker1.Value 'Date
    .Range("B" & Nl).Value = "S" & DatePart("ww", CDate(DTPicker1.Value), 2, 2)
    .Range("n" & Nl).Value = TextBox5.Value 'S
    .Range("p" & Nl).Value = TextBox6.Value 'N4
    .Range("r" & Nl).Value = TextBox7.Value 'N3
    .Range("t" & Nl).Value = TextBox8.Value 'N2
    .Range("v" & Nl).Value = TextBox9.Value 'EC
    .Range("o" & Nl).ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R5C14:RC[-1])"
    .Range("q" & Nl).ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R5C16:RC[-1])"
    .Range("s" & Nl).ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R5C18:RC[-1])"
    .Range("u" & Nl).ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R5C20:RC[-1])"
    .Range("w" & Nl).ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R5C22:RC[-1])"
    End With
    Et là rien ne va plus, il me met un message d'erreur qui me renvoie sur ces 4 lignes.

    Le même problème se pose pour mes colonnes q, s, u et w.
    En fait chaque colonne correspond à un collaborateur.

    J'ai fait un essaie en enlevant le mot ActiveCell et là la formule marche mais evidement sur toutes les cellules et pas seulement les visibles.

    Je tourne en rond.

    Merci par avance

    Vero911

  2. #2
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonsoir,

    Vero, ActiveCell ne signifie pas cellule visible mais cellule active, celle sélectionné par ton curseur.

    teste plutôt la propriété Hidden de la ligne où de la colonne suivant ce que tu masque dans ta feuille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if  .Range("o" & Nl).EnEntireRow.Hidden = false  then
    .Range("o" & Nl).FormulaR1C1 = "=SUBTOTAL(9,R5C14:RC[-1])"
    end if

    tu dis quoi ...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut
    Bonsoir

    Merci pour ta réponse.
    Je me suis mal exprimée, je voulais juste dire qu'une fois des données filtrées, il reste dans le tableau seulement quelques lignes que j'appelle visibles.

    la formule : =SOUS.TOTAL(9;$N$5:N5) est rentrée sur ma 1ere ligne.
    Ensuite sur la 2ème ça donne : =SOUS.TOTAL(9;$N$5:N6)
    Puis sur la 3ème : =SOUS.TOTAL(9;$N$5:N7)
    et ainsi de suite

    C'est une formule qui fonctionne très bien lorsque qu'elle est saisie directement dans la 1ere cellule concernée du tableau (pour moi O5)puis étirer vers le bas.

    Lorsque qu'on veut l'adapter pour la coder et que l'on crée une macro pour voir le code qui ressort, elle devient : ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R5C14:RC[-1])".

    Mais là est mon problème.

    Je vais essayer avec ta methode et voir.
    Je te tiens au courant.

    Véro

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Par défaut
    Bonjour,

    pour utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R5C14:RC[-1])".
    Vous devez au prealable selectionner la cellule avec quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    activesheet.range("A1").select
    En espérant vous avoir aidé

  5. #5
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Citation Envoyé par Access Newbie Voir le message
    Bonjour,

    pour utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R5C14:RC[-1])".
    Vous devez au prealable selectionner la cellule avec quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    activesheet.range("A1").select
    En espérant vous avoir aidé
    il ne faut pas utiliser ActiveCell et ActiveSheet mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.sheets("Feuil1").range("A1").FormulaR1C1 = "=SUBTOTAL(9,R5C14:RC[-1])"

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Par défaut
    Bonjour,

    Citation Envoyé par Access Newbie Voir le message
    avec quelque chose du genre :
    Je n'ai pas dit qu'il fallait faire rigoureusement ce qui est ecrit, j'essayais plutot de donner des explications sur l'utilisation de activesheet et activecell à Vero

    PS: la méthode de JackOuYA est "best practice".
    PS2 : je ne pense pas que l'utilisation de activesheet et activecell soit a proscrire, le tout étant de bien savoir sur quelle feuille on est et dans quelle cellule on se situe.

  7. #7
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Citation Envoyé par Access Newbie Voir le message
    ....
    PS2 : je ne pense pas que l'utilisation de activesheet et activecell soit a proscrire, le tout étant de bien savoir sur quelle feuille on est et dans quelle cellule on se situe.
    Tu utilise activeSheet et ActiveCell seulement si tu veux faire de l'animation et bouger le curseur dans tous les sens

    pour les autres cas ne pas les utiliser t'éviteras souvent des ennuis innatendu.. par exemple un opérateur qui change la feuille active de ton classeur en cliquant sur un onglet durant le déroulement de ta macro (je dis macros .. car quant tu utilise des ActiveSheet .. ActiveCell.. ton code devient une macro "toute bête" qui se limite à répeter bêtement une à une les actions de l'opérateur.., plutôt qu'aller à l'essentiel et agir sur les cellules, à modifier par exemple. )

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut
    Bonsoir JackOuYA, Access Newbie,

    Je m'excuse de vous répondre avec du retard mais beaucoup de boulot et pas eu le temps de me repencher sur mon problème avant ce soir.

    Je vous remercie d'avoir prie le temps de me répondre.

    J'ai opté pour le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .Range("o" & Nl).FormulaR1C1 = "=SUBTOTAL(9,R5C14:RC[-1])"
    .Range("q" & Nl).FormulaR1C1 = "=SUBTOTAL(9,R5C16:RC[-1])"
    .Range("s" & Nl).FormulaR1C1 = "=SUBTOTAL(9,R5C18:RC[-1])"
    .Range("u" & Nl).FormulaR1C1 = "=SUBTOTAL(9,R5C20:RC[-1])"
    .Range("w" & Nl).FormulaR1C1 = "=SUBTOTAL(9,R5C22:RC[-1])"
    Je tiens à préciser que celui de JackOuYA, fonctionne également très bien, c'est d'ailleurs qui m'a fait penser à juste enlever la partie activeCell.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.sheets("Feuil1").range("A1").FormulaR1C1 = "=SUBTOTAL(9,R5C14:RC[-1])"


    En fait, j'ai enfin compris pourquoi ça ne marchait pas.
    J'ai une macro de copier/coller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub testcc()
    '
    ' Macro enregistrée le 06/12/2008
    Application.ScreenUpdating = False
    With Sheets("ANALYSE DE PRODUCTION")
        Columns("K:W").Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
        Range("A1").Select
    End With
     
    Application.ScreenUpdating = True
     
    End Sub
    qui ne plait pas à la formule de cumul lors du filtre automatique (en haut de colonne).
    Apparament, elle a besoin de se"voir"(je ne sais pas trop comment l'exprimer) pour fonctionner.

    J'ai donc modifié Columns("K:W").Select par Columns("K:M").Select afin de sortir mes colonnes cumuls de ce copier/coller et le filtre est ok sauf toutefois sur 1 petit point.

    Peut être saurez vous pourquoi, lorsque j'applique le filtre, le cumul se recalcule bien sur mes lignes visibles mais il reste systematiquement la dernière ligne saisie.
    exemple :
    ligne 5 : client Z (première ligne saisie)
    ligne 6 : client A
    ligne 7 : client A
    ligne 8 : client B
    ligne 9 : client X
    ligne 10 : client A
    ligne 11 : client X (dernière ligne saisie)

    Si je choisie client A avec le filtre, je ne verrais bien que les lignes 6,7 et 10 mais aussi la 11.

    Je ne comprends pas.

    Merci à vous et bonne soirée

    Véro

  9. #9
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    Bonjour,
    Le filtre est appliqué à partir d'une macro ?

    A mon avis, le filtre n'est appliqué que jusqu'à la ligne 10 et c'est pour cela que la ligne 11 est affichée.

    Si le filtre est appliqué en manuel, je ne vois pas

  10. #10
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonjour,


    Je ne vois pas à quoi sert ton code de copie ?

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut
    Bonjour tout le monde,

    Le filtre est appliqué à partir d'une macro ?

    A mon avis, le filtre n'est appliqué que jusqu'à la ligne 10 et c'est pour cela que la ligne 11 est affichée.
    Le filtre est manuel : Données, filtrer, filtre automatique et je selectionne grace à "la petite flèche" que se met sur les entetes de colonnes.

    Je ne vois pas à quoi sert ton code de copie ?
    Je ne fait pas seulement un calcul de suivi des temps mais aussi un calcul de cout de ses heures par rapport au prix facturé au client.

    Certaines de mes formules font référence à un cout horaire qui se trouve sur autre feuille et c'est pour éviter qu'en cas de de révision des tarifs tout se recalcul avec les nouveaux tarifs.
    exemple : cout de l'heure S au 01/12/08 = 38 €
    formule calculée avec 38 €
    Si révision des tarifs au 01/06/09 et que heure S = 40 € : je ne veux pas que ce qui est saisi entre le 01/12/08 et 01/06/09 se recalcule avec 40 €.

    Merci

    Véro

Discussions similaires

  1. Problème avec un code Vba Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/10/2007, 16h43
  2. Problème avec VLookup sous VBA
    Par julio26 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 20/07/2007, 14h03
  3. Problème avec un TreeView VBA
    Par JojoAlex dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 22/05/2007, 16h59
  4. Problème avec une instruction VBA
    Par Jpeg69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/05/2007, 12h58
  5. Problème avec open() [Excel VBA]
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/11/2005, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo