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 :

Copier contenu d'une cellule avec critères à définir [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Copier contenu d'une cellule avec critères à définir
    Bonjour à tous et à toutes,

    je me permet de vous écrire car j'ai besoin de copier le contenu d'une cellule
    D27 (colonne D= Total; ligne 27=) et correspondant à la valeur enregistrée chaque mois (qui est définie dans la colonneB).
    Le but est de copier donc cette cellule correspondant à l'avant dernier mois du tableau.

    Le problème est que ce fichier est régulièrement mis à jour, des lignes sont donc ajoutées vers le bas d'une manière non homogène (+4 ou +5 selon le mois).

    et le but est de dopier la cellule de la même colonne sur la ligne de l'avant dernier mois.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Value = Range("A2").Value
    Sinon, .Copy / .Paste.

    F1 est ton ami pour cette deuxième solution.

    Pour info, l'enregistreur de macros t'expliquera tout cela mieux que moi étant donné que c'est la seule réponse que tu pourras avoir avec la description du problème que tu as donnée (critères à définir : oui mais encore ?).

    A+
    DeaD

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 51
    Points : 61
    Points
    61
    Par défaut
    Ctrl + C
    Dans la cellule ou tu veux coller Ctrl + V

    Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tacellule.value = tadeuxiemecellule.value
    Ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tacellule.copy
    tadeuxiemecellule.paste
    apres tu peux voir les collages spéciaux en enregistrant une macro

    Edit: Grilled by DeaD78

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Merci pour vos réponses,

    Mais vous êtes completement à coté de la plaque (normal avec une explication aussi pourrie que la mienne, je sais j'ai un sacré toupet)

    Blague à part, Voici le contenu du tableau pour une meilleure visibilitée:


    Mois Total
    March 03/01 -> 03/07 5
    03/08 -> 03/14 6
    03/15 -> 03/21 4
    03/22 -> 03/28 12
    03/29 -> 04/04 8
    March Total 35
    April 03/29 -> 04/04 4
    04/05 -> 04/11 3
    04/12 -> 04/18 12
    04/19 -> 04/25 7
    04/26 -> 05/02 15
    April Total 41
    May 05/03 -> 05/09 10
    05/10 -> 05/16 3
    05/17 -> 05/23 6
    May Total 19


    Donc on reprends, le but est de copier la cellule en D27 = 41.
    et comme je vous le disais plus haut ce fichier est mis à jour,
    voici ce que je suis sucspetible de trouver:

    Mois Total
    March 03/01 -> 03/07 5
    03/08 -> 03/14 6
    03/15 -> 03/21 4
    03/22 -> 03/28 12
    03/29 -> 04/04 8
    March Total 35
    April 03/29 -> 04/04 4
    04/05 -> 04/11 3
    04/12 -> 04/18 12
    04/19 -> 04/25 7
    04/26 -> 05/02 15
    April Total 41
    May 05/03 -> 05/09 10
    05/10 -> 05/16 3
    05/17 -> 05/23 6
    05/25 -> 05/29 15
    May Total 33
    June 06/01 -> 06/05 10
    06/07 -> 06/11 3
    JuneTotal 13

    et dans ce cas là le but est de copier la cellule D32 = 33

    En gros c'est la valeur de la colonne D de l'avant dernier mois qu'il faut copier.
    Je suis vraiment désolai de la manière dont ce topic a été posté, merci en tout cas pour vos réponses

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim plage As Range, c As Range
    Set plage = Range("A1:" & Cells(Rows.Count, 1).End(xlUp).Offset(-1, 0).Address) 'plage données colonne A moins dernière cellule total dernier mois
    Set c = plage.Find("TOTAL", LookIn:=xlValues, lookat:=xlPart, searchdirection:=xlPrevious) 'on cherche le mot Total
    If Not c Is Nothing Then MsgBox c.Offset(0, 1).Value  'Si trouvé, on affiche la valeur correspondante colonne B (dès lors on peux faire ce qu'on désire)
    Set c = Nothing
    Set plage = Nothing
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour mercatog,

    Merci pour ta réponse, cependant en executant ton code il ne se produit rien.
    j'ai toujours le même résultat .

    Voci le code que j'utilise pour faire mon Copier/Coller.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Workbooks.Open Filename:="G:\Creditbail\Immtech\Documentation Support\Stat Itrack\Suivi global\eXport.xls"
        Sheets("tcd_flux").Select
        Set f1 = Workbooks("eXport.xls").Sheets(4)
        Windows("2010 - Suivi Support-V2.xls").Activate
        Set f2 = Workbooks("2010 - Suivi Support-V2.xls").Sheets(2)
        derLigne = f2.Range("B65536").End(xlUp).Row
        f1.PivotTables("pivot_open_flux").PivotFields("Filiale").CurrentPage = "GNF"
        f2.Range("B" & derLigne + 1) = f1.Range("D21")
        Application.CutCopyMode = False
    La problématique concerne la cellule D21 qu'il faut remplacer en mettant à sa place la cellule qui est sur la même ligne que l'avant dernier mois.

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonsoir,

    Je me permet de réitérer et de formuler ma demande en fournissant d'autres données.
    En fournissant le fichier concerné, j'espère que mon explication sera plus claire. Comme expliqué plus tôt, je doit automatiser la copie d'une valeur dans la colonne D. cette valeur correspond à une valeur mensuelle et celle qui nous intéresse est celle du mois M-1 (Avril dans l'exemple).

    Or le souci c'est que ce fichier est généré mensuellement et que chaque mois il y a aléatoirement 3,4 ou 5 lignes qui s'ajoutent.
    JE n'avais pas pris en compte cette donnée en mettant la copie de la cellule D27.
    Du coup c'est toujours la valeur relative au mois d'Avril qui est copiée or quand on sera en Juin, l'avant dernier mois sera Mai e non plus Avril.
    Voici le code que j'utilisais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Workbooks.Open Filename:="G:\Creditbail\Immtech\Documentation Support\Stat Itrack\Suivi global\eXport.xls"
        Sheets("tcd_flux").Select 
        Set f1 = Workbooks("eXport.xls").Sheets(4)
        Windows("2010 - Suivi Support-V2.xls").Activate
        Set f2 = Workbooks("2010 - Suivi Support-V2.xls").Sheets(2)
        derLigne = f2.Range("B65536").End(xlUp).Row
        f1.PivotTables("pivot_open_flux").PivotFields("Filiale").CurrentPage = "GNF"
        f2.Range("B" & derLigne + 1) = f1.Range("D21")
        Application.CutCopyMode = False
    Ce que j'ai pensé:
    Comment faire pour par exemple trouver l'avant dernière case contenant le mot "Total" dans la colonne B et copier la valeur contenue dans la cellule correspondante dans la colonne D
    Fichiers attachés Fichiers attachés

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour gabi75

    j'ai jeté un oeil rapide à ton fichier et si l'onglet ou tu veux trouver la valeur à copier est bien "tcd_flux" il faut que tu adapte le code de mercatog car le mot recherché "TOTAL n'est pas dans la colonne A.

    comme apparement il s'agit de la colonne B remplace cette ligne dans le code de mercatog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Range("A1:" & Cells(Rows.Count, 1).End(xlUp).Offset(-1, 0).Address)
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Range("B1:" & Cells(Rows.Count, 2).End(xlUp).Offset(-1, 0).Address)
    de plus, en te relisant (#5) je viens de voir que tu marque

    La problématique concerne la cellule D21 qu'il faut remplacer en mettant à sa place la cellule qui est sur la même ligne que l'avant dernier mois.
    et cette partie du code que tu nous donne n'écris pas mais lit la cellule D21

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    f2.Range("B" & derLigne + 1) = f1.Range("D21")
    a+
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour Zyhack,
    merci pour tes remarques. j'ai fait les modifs tel que tu m'a montré mais l'execution, copie toujours la cellule D21 dans mon fichier mis à jour.
    Alors qu'il devrait copier la cellule D27.
    Pour faire l'analogie avec le fichier joint c'est comme si dans le code tu avais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Workbooks.Open Filename:="G:\Creditbail\Immtech\Documentation Support\Stat Itrack\Suivi global\eXport.xls"
        Sheets("tcd_flux").Select 
        Set f1 = Workbooks("eXport.xls").Sheets(4)
        Windows("2010 - Suivi Support-V2.xls").Activate
        Set f2 = Workbooks("2010 - Suivi Support-V2.xls").Sheets(2)
        derLigne = f2.Range("B65536").End(xlUp).Row
        f1.PivotTables("pivot_open_flux").PivotFields("Filiale").CurrentPage = "GNF"
        f2.Range("B" & derLigne + 1) = f1.Range("D15") ' alors qu'il doit copier la D21
        Application.CutCopyMode = False
    et comment intégrer le code de Sir mercatog ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim plage As Range, c As Range
    Set plage = Range("B1:" & Cells(Rows.Count, 2).End(xlUp).Offset(-1, 0).Address) 'plage données colonne A moins dernière cellule total dernier mois
    Set c = plage.Find("TOTAL", LookIn:=xlValues, lookat:=xlPart, searchdirection:=xlPrevious) 'on cherche le mot Total
    If Not c Is Nothing Then MsgBox c.Offset(0, 1).Value  'Si trouvé, on affiche la valeur correspondante colonne B (dès lors on peux faire ce qu'on désire)
    Set c = Nothing
    Set plage = Nothing
    que je n'ai pas compris soit dit en passant .
    Merci

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Points : 364
    Points
    364
    Par défaut
    Citation Envoyé par gabi75 Voir le message
    Comment faire pour par exemple trouver l'avant dernière case contenant le mot "Total" dans la colonne B et copier la valeur contenue dans la cellule correspondante dans la colonne D
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    'on remonte à rebours la colonne B jusqu'au 2ème "Total"
    compteur = 0
    i = f1.Cells(Rows.Count, 2).End(xlUp).Row 'dernière ligne remplie de la colonne B
    i = i+1
    do while compteur <> 2
       i = i-1
       if f1.cells(i,2) = "Total" then compteur = compteur + 1
    loop
    f2.Range("B" & derLigne + 1) = f1.Range("D" & i)

    Il faudrait gérer les erreurs et voir comment ça se comporte en janvier...

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour neupont,

    je suis un peu novice, j'ai éxécuté ton code mais sa bug et le message d'erreur est Runtime Error 424: Object Required

    et sa bloque pour cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if f1.cells(i,2) = "Total" then compteur = compteur + 1
    De plus si tu pouvais me montrer comment insérer ta partie dans mon code précédent sa serait super sympa de ta part .

    Merci

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu mets un bouton dans ta feuille, tu insère ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CommandButton1_Click()
    Dim plage As Range, c As Range
    With Sheets("tcd_flux")
        Set plage = .Range("B5:" & Cells(Rows.Count, 2).End(xlUp).Offset(-1, 0).Address) 'plage données colonne A moins dernière cellule total dernier mois
        Set c = plage.Find("Total", LookIn:=xlValues, lookat:=xlPart, searchdirection:=xlPrevious) 'on cherche le mot Total
        If Not c Is Nothing Then MsgBox c.Offset(0, 2).Value  'Si trouvé, on affiche la valeur correspondante colonne B (dès lors on peux faire ce qu'on désire)
        Set c = Nothing
        Set plage = Nothing
    End With
    End Sub
    Ce code cherche dans la colonne B, l'avant dernière valeur où est écrit le mot "Total"; c'est à dire le total du mois m-1. c.Offset(0, 2).Value désigne le total correspondant au mois m-1
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Re

    En continuant dans la même logique et toujours en utilisant le code de mercatog je pense que tu peux l'intégré de la manière suivante.

    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
    26
    Dim plage As Range, c As Range
    Dim intValeur As Integer
    Workbooks.Open Filename:="G:\Creditbail\Immtech\Documentation Support\Stat Itrack\Suivi global\eXport.xls"
    Sheets("tcd_flux").Select
     
    '### ici on recherche la valeur que tu désire
    Set plage = Range("B1:" & Cells(Rows.Count, 2).End(xlUp).Offset(-1, 0).Address) 'plage données colonne B moins dernière cellule total dernier mois
    Set c = plage.Find("TOTAL", LookIn:=xlValues, lookat:=xlPart, searchdirection:=xlPrevious) 'on cherche le mot Total
    If Not c Is Nothing Then intValeur = c.Offset(0, 1).Value 'Si trouvé on garde la valeur de la cellule a droite
     
    '### suite de ton code
        Set f1 = Workbooks("eXport.xls").Sheets(4)
        Windows("2010 - Suivi Support-V2.xls").Activate
        Set f2 = Workbooks("2010 - Suivi Support-V2.xls").Sheets(2)
        derLigne = f2.Range("B65536").End(xlUp).Row
        f1.PivotTables("pivot_open_flux").PivotFields("Filiale").CurrentPage = "GNF"
     
    '### ligne modifié
        f2.Range("B" & derLigne + 1) = intValeur 'Ici on utilise la valeur trouvé précédement
     
    '### suite de ton code
        Application.CutCopyMode = False
     
    'puis en fin de routine
    Set c = Nothing
    Set plage = Nothing
    a+
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  14. #14
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Un super grand Merci pour toi Zyhack,
    j'ai très bien compris le code et la macro tourne sans soucis.
    Seul petit inconvénient, le nombre stocké intValue n'est pas bon (dans mon cas je ne le trouve même pas dans le fichier).

    Bref, dans la ligne suivante si j'ai bien compris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Range("B5:" & Cells(Rows.Count, 2).End(xlUp).Offset(-1, 0).Address)
    Il s'agit de définir les caractéristiques de la recherche, on définit la colonne B (quelle est la différence entre mettre B5 et B1 ?) et on définit que c'est l'avant dernier mot qu'il faut chercher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c = plage.Find("Total", LookIn:=xlValues, lookat:=xlPart, searchdirection:=xlPrevious)
    Dans cette ligne de code, on définit le mot à chercher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not c Is Nothing Then intValeur = c.Offset(0, 2).Value
    on stocke la valeur de droite (le 2 signifie-t-il 2 colonnes plus à droite ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f2.Range("B" & derLigne + 1) = intValeur
    on utilise cette valeur et on la copie à la place voulue.

    Peut-être n'ai-je pas compris une ligne importante ?

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    quelle est la différence entre mettre B5 et B1
    désolé, il va falloir que j'aille me faire greffer un autre doigt, c'est effectivement B1 et non pas B5

    Toutes tes autres remarque sont pertinentes

    Par contre je ne vois pas pourquoi tu n'as pas la bonne valeur...

    c'est bien dans la feuille tcd_flux du classeur eXport.xls que tu cherches la valeur ?

    j'essaye de voir pourquoi.

    a+

    j'ai oublié de te demander la valeur qu'il y avait dans la variable intValeur et si elle correspondait à un autre emplacement?
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  16. #16
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je dirai B5 et non B1
    puisque la plage de recherche (plage de données) commence en B5
    ma recherche s'arrêtera donc en B5 puisque je part de la fin
    en plus, dans cette plage, on élimine la dernière ligne de la colonne B, pour éviter de trouver la ligne Total du dernier mois.
    Quand le total du mois m-1 est trouvé, on récupère la valeur de la cellule de la colonne D
    d'où le:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not c Is Nothing Then intValeur = c.Offset(0, 2).Value
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    exact c'est bien ça pour le fichier et la feuille,

    le pire c'est que à force de changer les paramètres, je suis arivé à avoir la bonne valeur, le temps de crier un youpi, locker mon pc et fumer une clope.
    Je reviens et je retente et sa marche plus sa me colle plus que des 0.

    en tentant ce code j'obtient un 0:

    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
    Set f1 = Workbooks("eXport.xls").Sheets(4)
        Windows("2010 - Suivi Support-V2.xls").Activate
        Set f2 = Workbooks("2010 - Suivi Support-V2.xls").Sheets(2)
        derLigne = f2.Range("B65536").End(xlUp).Row
        f1.PivotTables("pivot_open_flux").PivotFields("Filiale").CurrentPage = "GNF"
     '### ici on recherche la valeur  désirée dans le fichier
        'plage données colonne B moins dernière cellule total dernier mois
        Set plage = Range("B1:" & Cells(Rows.Count, 2).End(xlUp).Offset(-1, 0).Address)
        'on cherche le mot Total
        Set c = plage.Find("Total", LookIn:=xlValues, lookat:=xlPart, searchdirection:=xlPrevious)
        'Si trouvé on garde la valeur de la cellule a droite
        If Not c Is Nothing Then intValeur = c.Offset(0, 2).Value
    '### ligne modifiée
        f2.Range("B" & derLigne + 1) = intValeur 'Ici on utilise la valeur trouvée précédement
     
    '### suite de ton code
        Application.CutCopyMode = False
    'puis en fin de routine
        Set c = Nothing
        Set plage = Nothing

    et en tentant celui-ci j'obtient des 202, nombre qui soit dit en passant n'est pas sur la feuille:

    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
     '### ici on recherche la valeur  désirée dans le fichier
        'plage données colonne B moins dernière cellule total dernier mois
        Set plage = Range("B1:" & Cells(Rows.Count, 2).End(xlUp).Offset(-1, 0).Address)
        'on cherche le mot Total
        Set c = plage.Find("Total", LookIn:=xlValues, lookat:=xlPart, searchdirection:=xlPrevious)
        'Si trouvé on garde la valeur de la cellule a droite
        If Not c Is Nothing Then intValeur = c.Offset(0, 2).Value
        Set f1 = Workbooks("eXport.xls").Sheets(4)
        Windows("2010 - Suivi Support-V2.xls").Activate
        Set f2 = Workbooks("2010 - Suivi Support-V2.xls").Sheets(2)
        derLigne = f2.Range("B65536").End(xlUp).Row
        f1.PivotTables("pivot_open_flux").PivotFields("Filiale").CurrentPage = "GNF"
     
    '### ligne modifiée
        f2.Range("B" & derLigne + 1) = intValeur 'Ici on utilise la valeur trouvée précédement
     
    '### suite de ton code
        Application.CutCopyMode = False
     
        'puis en fin de routine
        Set c = Nothing
        Set plage = Nothing

    juste une question spécifique dans le code suivant:*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set plage = Range("B1:" & Cells(Rows.Count, 2).End(xlUp).Offset(-1, 0).Address)
    à quoi correspond le 2 ??

  18. #18
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    le 2 correspond à la colonne 2 où on cherche la dernière cellule non vide
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    je me posais une question mercatog, quand on fait la sélection de la plage à parcourir ne faudrait-il pas ajouter une référence au classeur et la feuille de référence. ce qui expliquerais le fais d'avoir des valeurs différente ?
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  20. #20
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Oui effectivement, j'évite de faire la selection des feuilles, mais en contre partie, je nomme les plage en référence à la feuille.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("tcd_flux")
        Set plage = .Range("B5:" & Cells(Rows.Count, 2).End(xlUp).Offset(-1, 0).Address) 'plage données colonne A moins dernière cellule total dernier mois
    ...
    maintenant, si le code fonctionne sur plusieurs classeurs, il faut en plus faire référence au classeur
    Par exemple (à adapter aux classeurs et aux feuilles)
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Dim aWbk As Workbook, Wbk As Workbook
    Dim f1 As Worksheet, f2 As Worksheet, sht As Worksheet
    Dim plage As Range, c As Range
    Dim dblValeur As Double
    Dim DerLigne As Long
     
    Application.ScreenUpdating = False
    Set Wbk = Workbooks.Open("G:\Creditbail\Immtech\Documentation Support\Stat Itrack\Suivi global\eXport.xls")
    Set aWbk = ThisWorkbook
    Set sht = aWbk.Sheets("tcd_flux")
     
    '### ici on recherche la valeur que tu désire
    With sht
       Set plage = .Range("B5:" & .Cells(Rows.Count, 2).End(xlUp).Offset(-1, 0).Address) 'plage données colonne B moins dernière cellule total dernier mois
       Set c = plage.Find("Total", LookIn:=xlValues, lookat:=xlPart, searchdirection:=xlPrevious) 'on cherche le mot Total
       If Not c Is Nothing Then dblValeur = c.Offset(0, 2).Value 'Si trouvé on garde la valeur de la cellule a droite
       Set c = Nothing
       Set plage = Nothing
    End With
    Set sht = Nothing
     
    '### suite de ton code
    Set f1 = Wbk.Sheets(4)
    Set f2 = aWbk.Sheets(2)
    DerLigne = f2.Range("B65536").End(xlUp).Row
    f1.PivotTables("pivot_open_flux").PivotFields("Filiale").CurrentPage = "GNF"
     
    '### ligne modifié
    f2.Range("B" & DerLigne + 1) = dblValeur 'Ici on utilise la valeur trouvé précédement
     
    '### sauvegarder et fermer eXport.xls
    Wbk.Save
    Wbk.Close
     
    Set f2 = Nothing
    Set f1 = Nothing
    Set Wbk = Nothing
    Set aWbk = Nothing
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Calculer le contenu d'une cellule avec formule
    Par Bulveye dans le forum Excel
    Réponses: 1
    Dernier message: 11/02/2014, 17h54
  2. Contenu d'une cellule avec getElementsByName
    Par Bdloul dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/12/2011, 11h35
  3. Réponses: 2
    Dernier message: 04/02/2009, 12h13
  4. Réponses: 7
    Dernier message: 28/09/2007, 09h51
  5. Copier le contenu d'une cellule avec suivie en cas de changement
    Par geeksideofme dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/04/2007, 17h21

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