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 :

[VBA-E] Copier une plage de cellules avec critère


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut [VBA-E] Copier une plage de cellules avec critère
    Bonjour,

    Encore un souci avec VBA. Je ne trouve pas comment faire pour vérifier, dans un onglet, la présence d'une valeur particulière.

    Ci joint, le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim lignevideE As Long
    Dim test As Long
    Dim test2 As Long
     
        ' je récupère la valeur de la 1ere colonne F, onglet "Prévisionnel"
    test = Sheets("Prévisionnel").Range("E2")
    ==> Comment faire pour savoir si il existe une même valeur dans la colonne E de l'onglet "Collecte_Données" ?

    Je dois faire un If test = test2 then...

    Cependant je ne sais pas comment faire une recherche d'une valeur sur une colonne ?

    le reste fonctionne: je copie la plage à la suite des données existantes sur l'onglet "Collecte_Données"

    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
     
    Else
           'derniere ligne vide de la colonne E
    lignevideE = Sheets("Collecte_Données").Range("E65536").End(xlUp).Row + 1
     
        'je copie la plage "plage_copie" de l'onglet "Prévisionnel"
    Sheets("Prévisionnel").Range("plage_copie").Copy
     
        'je me positionne sur l'onglet cible
    Sheets("Collecte_Données").Activate
     
        'je me positionne sur la premiere cellule vide la colonne E et je colle
    Range("E" & lignevideE).Select
    Selection.PasteSpecial Paste:=xlPasteValues
    End If
    D'avance, merci

  2. #2
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Inspires-toi de ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim cellule As Range
    For Each cellule In Feuille("NomFeuille").Range("H:H")
        If cellule.Value = Feuille("nomAutreFeuille").Range("celluleCritere").Value Then 
            ' traitement
        End If
    Next

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    I=0
    Found=False
     
    'test valeur recherchée, range est la plage de recherche
     
    For Each Cel in Range(E1:E11).cells 
       i=i+1
       If cel.value = test then exit For : Found=True
    Next
    N'oubliez pas de mettre le

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Ok je viens de piger l'ensemble . Merci à vous 2

    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 lignevideE As Long
    Dim test As Long
    Dim cellule As Range
     
        ' je récupère la valeur de la 1ere colonne E, onglet "Prévisionnel"
    test = Sheets("Prévisionnel").Range("E2")
     
    For Each cellule In Sheets("Collecte_Données").Range("E:E")
        If cellule.Value = Sheets("Prévisionnel").Range("E2").Value Then
           Exit Sub
    End If
     Next
     
     'derniere ligne vide de la colonne E
    lignevideE = Sheets("Collecte_Données").Range("E65536").End(xlUp).Row + 1
     
        'je copie la plage "plage_copie" de l'onglet "Prévisionnel"
    Sheets("Prévisionnel").Range("plage_copie").Copy
     
        'je me positionne sur l'onglet cible
    Sheets("Collecte_Données").Activate
     
        'je me positionne sur la premiere cellule vide la colonne E et je colle
    Range("E" & lignevideE).Select
    Selection.PasteSpecial Paste:=xlPasteValues

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Un léger souci:

    Je ne trouve pas comment aller se positionner sur une cellule précise

    => je souhaite en effet me positionner sur la premiere cellule répondant au critère (de la colonne E) et copier/Coller (je sais faire)

    Je cherche dans l'aide en ligne mais sans résultat

    PS: j'ai supprimé le "Résolu" car cela fait suite à mon précédent souci

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Sur quelle celule???

    La premiere vide ca ca devrait etre bon vu le code...
    N'oubliez pas de mettre le

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Non Vesta, ce n'est pas sur la derniere vide.

    En fait , il faut que je récupère la position de la premiere cellule de la colonne E qui vérifie le critère ( = 1ere cellule de la colonne E dans l'autre onglet)

    En fait, je bloque avec F1 sur comment se positionner sur une autre cellule que la 1ere ou la derniere.

    merci pour vos recherches

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Personne ne peut m'aider ?

    Je suis bloqué sur ce point... et j'aurai fini mon travail sous VBA

    Merci d'avance

  9. #9
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    En fait, je bloque avec F1 sur comment se positionner sur une autre cellule que la 1ere ou la derniere.
    Ce qui veut dire?
    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
    Dim lignevideE As Long
    Dim test As Long
    Dim cellule As Range
    
        ' je récupère la valeur de la 1ere colonne E, onglet "Prévisionnel"
    test = Sheets("Prévisionnel").Range("E2").Value ' est plus clair
    
    For Each cellule In Sheets("Collecte_Données").Range("E:E")
        If cellule.Value = Sheets("Prévisionnel").Range("E2").Value Then
           Exit Sub
    End If
     Next
     
     'derniere ligne vide de la colonne E
    lignevideE = Sheets("Collecte_Données").Range("E65536").End(xlUp).Row + 1
    
        'je copie la plage "plage_copie" de l'onglet "Prévisionnel"
    Sheets("Prévisionnel").Range("plage_copie").Copy
    
        'je me positionne sur l'onglet cible
    
        ' et comme ceci ?
    Sheets("Collecte_Données")Range("E" & lignevideE).PasteSpecial Paste:=xlPasteValues

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    J'ai l'impression de mal m'expliquer

    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
     
    Sub Export()
     
    Dim lignevideE As Long
    Dim cellule As Range
    Dim test As Long
     
        ' c'est mon critère : valeur de la cellule E2 (et des suivantes)
    test = Sheets("Saisie Réel").Range("E2").Value
     
        ' je détermine la derniere ligne vide de la colonne E
    lignevideE = Sheets("Collecte_Données").Range("E65536").End(xlUp).Row + 1
     
    For Each cellule In Sheets("Collecte_Données").Range("E:E")
        If cellule.Value = Sheets("Saisie Réel").Range("E2").Value Then
    C'est là ou je dois trouver une solution: ECRASER les données existantes.
    ' Exit sub => je dois me positionner sur la première cellule,de la colonne E, ayant pour valeur =test
    ' et je copie la plage de cellules à partir de cette cellule
    End If

    'je n'ai pas de cellule répondant au critère => je copie ma plage de cellule à la suite des infos déja mises sur l'onglet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     Next
     
        'je copie la plage "plage_copie" de l'onglet "Saisie Réel"
    Sheets("Saisie Réel").Range("plage_copie").Copy
     
        'je me positionne sur la premiere cellule vide la colonne E et je colle
    Sheets("Collecte_Données").Range("E" & lignevideE).PasteSpecial Paste:=xlPasteValues
    Sheets("Saisie Réel").Activate
     
    End Sub
    Ma sélection, copiée, reste sélectionnée à la fin

  11. #11
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Mouais, en effet, ça fait toujours ça, même en manuel.

    Sélectionne une autre cellule, la cellule vide suivante, par exemple.

  12. #12
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Tu n'as qu'a faire un Range(nimportequoi).select
    N'oubliez pas de mettre le

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Etrange que l'on ne puisse déselectionner automatiquement après avoir copier... merci Zaza.

    Pour mon grand souci, je chercherai dans la matinée: il faut que je trouve comment m'arrêter sur la 1ere cellule cad comment lier un range(quelque chose).select avec une valeur "cellule" de ma boucle for ... next

    Merci à vous 2 en tout cas

  14. #14
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Ca depend quelle type de valeur...

    Si la cellule contien un no de ligne : ex: 23

    Et que tu veux selectionner dans la colonne B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B" & cel.value).Select
    Tu peux aussi travailler avec no ligne et colonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(3,10).select 'Selectionne cellule colonne 3 ligne 10
    N'oubliez pas de mettre le

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    OK Vesta,

    Cependant, comment fais tu si tu as 1 cellule = 25 et que tu veux sélectionner la première cellule, de la colonne E ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    rech_cellule = ' je ne sais pas comment l'écrire mais je veux récupérer le N° de ligne, de la 1ere celulle ayant comme valeur 25
     
    ' je sélectionne la dite cellule
    Range("E" & rech_cellule).Select
     
    ' puis je copie/colle la plage "plage_copie" à partir de la cellule (E, rech_cellule)
    sheets("Saisie Réel").Range(plage_copie).copy
    sheets("Saisie Réel").Range("E" & rech_cellule).paste

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    J'ai avancé il me semble ; qq'un peut m'expliquer pourquoi j'obtiens un message d'erreur dès que j'arrive sur R.Select

    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
     
    Sub Export()
     
    Dim lignevideE As Long
    Dim cellule As Range
    Dim R As Range
    Dim test As Long
     
        ' critère : valeur de la cellule E2 (et des 84 suivantes) de l'onglet "Saisie Réel"
    test = Sheets("Saisie Réel").Range("E2").Value
     
        ' je détermine la derniere ligne vide de la colonne E sur l'onglet "Collecte_Données"
    lignevideE = Sheets("Collecte_Données").Range("E65536").End(xlUp).Row + 1
     
        ' je copie la plage "plage_copie" de l'onglet "Saisie Réel"
    Sheets("Saisie Réel").Range("plage_copie").Copy
     
        For Each R In Sheets("Collecte_Données").Range("E:E")
            If R.Value = test Then
               R.Select
                Sheets("Collecte_Données").Range(R).PasteSpecial Paste:=xlPasteValues
     
                'Exit For
            End If
        Next R
     
        'je n'ai pas de cellule répondant au critère => je copie ma plage de cellule à la suite des infos déja mises sur l'onglet
     
     'Next
     
        'je me positionne sur la premiere cellule vide la colonne E et je colle
    Sheets("Collecte_Données").Range("E" & lignevideE).PasteSpecial Paste:=xlPasteValues
    Sheets("Saisie Réel").Range("A1").Select
     
    End Sub

  17. #17
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Pourquoi faire un Select sur chaque cellule ca va ralentir...
    Mais bon voila l'erreur je crois

    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
    Sub Export()
    
    Dim lignevideE As Long
    Dim cellule As Range
    Dim R As Range
    Dim test As Long
    
        ' critère : valeur de la cellule E2 (et des 84 suivantes) de l'onglet "Saisie Réel"
    test = Sheets("Saisie Réel").Range("E2").Value
    
        ' je détermine la derniere ligne vide de la colonne E sur l'onglet "Collecte_Données"
    lignevideE = Sheets("Collecte_Données").Range("E65536").End(xlUp).Row + 1
    
        ' je copie la plage "plage_copie" de l'onglet "Saisie Réel"
    Sheets("Saisie Réel").Range("plage_copie").Copy
    
        For Each R In Sheets("Collecte_Données").Range("E:E").cells
            If R.Value = test Then
               R.Select
                Sheets("Collecte_Données").Range(R).PasteSpecial Paste:=xlPasteValues
                
                'Exit For
            End If
        Next R
            
        'je n'ai pas de cellule répondant au critère => je copie ma plage de cellule à la suite des infos déja mises sur l'onglet
        
     'Next
    
        'je me positionne sur la premiere cellule vide la colonne E et je colle
    Sheets("Collecte_Données").Range("E" & lignevideE).PasteSpecial Paste:=xlPasteValues
    Sheets("Saisie Réel").Range("A1").Select
    
    End Sub
    N'oubliez pas de mettre le

Discussions similaires

  1. Trier une plage de cellules
    Par Squelet dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 03/12/2019, 13h04
  2. Réponses: 1
    Dernier message: 11/09/2014, 14h48
  3. Pb de lecture données dans une plage de cellule avec itération
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/07/2006, 13h33
  4. [VBA-E]Copier une serie de cellules dans une autre feuille
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/03/2006, 17h23
  5. [VBA] Copier une plage de cellules dans un fichier fermé
    Par SFrane dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/01/2006, 16h52

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