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 :

copie


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Par défaut copie
    Bonjour à tous,

    Je voudrais créer un programme dont les grandes lignes générales correspondent
    à ceci :
    1- sélectionner la cellule dont la valeur est "SOLDE"
    2- séléctionner les cellules non vides dans la colonne dessous
    la cellule référente
    3- si valeur différente de 0 et si valeur différente de "SOLDE" et si
    forumule ds cellule différente de " =Somme(G3:G40)"
    =>alors :
    copie ds 1ère feuille du classeur en cours toutes les lignes des cellules respectant les si.
    Mon ébauche donne ceci:
    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
    Sub test()
    Dim monfichier As Workbook
    Dim adr As String
    Dim recap As String
    Dim direc As Integer
    Set monfichier = Workbooks.Open("\\Nwanex\donnees\daf\daf4\B236\2007 FACTURES\CHAPITRE 0214- 02\fourre-tout\LISTE DES FACTURES ET BC 2007 TOURRE TOUT")
        monfichier.Worksheets(1).Select
        Range("1:1").Select
        For Each Item In Selection
           If Item.Value = "SOLDE" Then
               adr = Item.Address
               MsgBox (adr)
           End If
        Next
        Range((adr), Range(adr).End(xlDown)).Select
        For i = 1 To Selection.Count
              If Cells(i, 7).Value > "0" And Cells(i, 7).Value <> "SOLDE" And _
                 Cells(i, 7).Formula <> "=SOMME(G3:G40)" Then
                 recap = Cells(i, 7).Address
                 direc = Cells(i, 7).Count
                 Range(recap).EntireRow.Copy ThisWorkbook.Worksheets(1).Range("A2")
                 ThisWorkbook.Worksheets(1).Activate
                 MsgBox ("tout marche")
              End If
        Next
        Application.CutCopyMode = False
    End Sub
    Mon problème est au niveau de la copie. Il prend en bien charge la première valeur, mais s'arrête après. Je ne comprend pas pourquoi. J'espère aussi avoir été à peu près clair. Merci en tous cas pour toute l'aide apportée.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Si tu veux copier une ligne, il faut désigner une ligne de collage, pas une cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                 Range(recap).EntireRow.Copy ThisWorkbook.Worksheets(1).Rows(2)
    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Par défaut Le problème demeure !!!
    Je suis Excel 97 et si je modifie les choses comme tu l'indiques, j'ai une belle erreur 438. Il n'accepte pas la ligne. Désolé, de ne pas avoir précisé ma version d'excel, merci pour ton aide. Ce qui me surprend dans mon programme, c'est qu'il coince à la première valeur trouvée et oublie les autres. Je cherche encore à comprendre pourquoi il n'analyse pas les autres valeurs de ma séléction.
    Amicalement
    Guillaume

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Par défaut Correction !!!
    Avec s pour "Rows", c'est beaucoup mieux. (Désolé !!!) Tu avais raison, mais je bloque toujours sur ma première valeur.
    Merci encore

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Par défaut Petite amélioration !!!
    J'ai corrigé un peu mon programme :
    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
    Sub test()
        Dim monfichier As Workbook
        Dim adr As String
        Dim recap As String
        Dim direc As Integer
        Dim nbreValeurs As Range
        Set monfichier = Workbooks.Open("\\Nwanex\donnees\daf\daf4\B236\200 7 FACTURES\CHAPITRE 0214- 02\fourre-tout\LISTE DES FACTURES ET BC 2007 TOURRE TOUT")
        monfichier.Worksheets(1).Select
        Range("1:1").Select
        For Each Item In Selection
            If Item.Value = "SOLDE" Then
                adr = Item.Address
                MsgBox (adr)
            End If
        Next
        Range((adr), Range(adr).End(xlDown)).Select
        For i = 1 To Selection.Count
            If Cells(i, 7).Value > "0" And Cells(i, 7).Value <> "SOLDE" And _
                    Cells(i, 7).Formula <> "=SOMME(G3:G40)" Then
                recap = Cells(i, 7).Address
                direc = Cells(i, 7).Count
                Range((recap), Range(recap).Offset(direc)).EntireRow.Copy             ThisWorkbook.Worksheets(1).Rows(2)
                ThisWorkbook.Worksheets(1).Activate
                MsgBox ("tout marche")
            End If
        Next
        Application.CutCopyMode = False
    End Sub
    J'ai au moins deux valeurs copiées. Je pense maintenant que mon problème est de pouvoir rassembler correctement toutes les valeurs répondant à mes if dans un range pour pouvoir les copier( c'est toujours la galère !!!). La destination ne semble pas poser de problème.
    Merci encore.

  6. #6
    Membre expérimenté Avatar de Drost
    Profil pro
    Inscrit en
    Août 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2007
    Messages : 192
    Par défaut
    Yop'

    Tu colles tes valeurs ou exactement? Sur une feuille différente?
    Parce que tu récupére bien tes valeurs en fonction de tes conditions. Il te suffit de coller ta valeur dés que tu la récupéré dans ta boucle (entre ton Endif et ton next).
    Tu n'as qu'a changer de feuille, descendre a la derniere ligne et coller tes variables.

    Tchuss

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Par défaut Précisions !!!
    J'ai un fichier source que j'ai mis dans ma variable "monfichier" d'ou je tire les valeurs que je veux copier. Ma destination est la première feuille d'un nouveau fichier dans lequel j'écris ma macro. A priori, ce n'est pas la destination qui pose problème, c'est bien de récupérer toutes les valeurs correspondant à mes if. Le programme s'arrête à la première valeur correspondant aux if et laisse de côté le reste de la sélection. C'est là que je me perds . Je ne vois pas du tout comment procéder pour passer comme argument de copie toutes les valeurs de ma séléction correspondant aux if. En espérant avoir été clair, merci encore à tous pour l'aide apportée et si je trouve, promis, je transmets la solution.

  8. #8
    Membre expérimenté Avatar de Drost
    Profil pro
    Inscrit en
    Août 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2007
    Messages : 192
    Par défaut
    Tu ne pourra pas récupéré toutes tes valeurs d'un coup mais tu devra les recuperer au fur et a mesure que tu en trouvera une! C'est pour cela que tu devra inserer dans ta boucle le collage de la valeur que tu aura trouvé!

  9. #9
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonsoir,
    D'après ton code, lorsque tu copies, tu colles toujours au même endroit (rows(2)), donc tu écrases la valeur précédente. Il ne peux te rester qu'une valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range((recap), Range(recap).Offset(direc)).EntireRow.Copy             ThisWorkbook.Worksheets(1).Rows(2)
    
    fred65200

Discussions similaires

  1. Protéger une disquette contre la copie
    Par benzaza dans le forum Assembleur
    Réponses: 20
    Dernier message: 16/01/2005, 10h42
  2. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  3. Copier et afficher une copie d'ecran
    Par Bobx dans le forum Langage
    Réponses: 6
    Dernier message: 02/08/2002, 22h20
  4. Copie de fichier
    Par Bjorn dans le forum C
    Réponses: 4
    Dernier message: 11/06/2002, 15h23
  5. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20

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