Vba

Résolu
herve27f Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
herve27f Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
quelqu'un pourrait-t-il m aider
je suis un utilisateur hyper débutant je cherche à copier et coller sur une autre feuille des cellules sous conditions de résultat d'une cellule
merci d'avance

5 réponses

  1. herve27f Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
     
    merci beaucoup de votre réponse je bosse dessus ce weekend et je ne manquerai pas de vous répondre plus longuement
    amicalement ! =)
    0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Puisque tu commences, prends les bonnes habitudes dès le début, utilises des références de cellules précises (classeur.feuille.cellules), évites les références implicites et si possible les objets actifs :
    Option Explicit
    Public Sub CopierSousCondition()
    Dim Plage_à_copier As Range
    Dim Cellule_de_destination As Range
    Dim Cellule_à_tester As Range
    Dim Condition_remplie As Boolean
      
      ' Définition des varaibles
      Set Plage_à_copier = ThisWorkbook.Worksheets(1).Range("C4:F12")
      Set Cellule_de_destination = ThisWorkbook.Worksheets(2).Range("H3")
      Set Cellule_à_tester = ThisWorkbook.Worksheets(1).Range("B12")
      Condition_remplie = Cellule_à_tester.Value = 15
      ' Copie sous condition
      If Condition_remplie Then
        Plage_à_copier.Copy Destination:=Cellule_de_destination
      End If
    
    End Sub

    0
  3. herve27f Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
     
    tout d'abord merci à tous pour c'est renseignement c'est vraiment super-sympa de passer de votre temps à aider les autres
    pour en revenir à mon problème je ne m'en sors toujours pas je me suis certainement mal expliqué.
    J'ai une feuille de calcul avec plusieurs lignes non définies ainsi que plusieurs colonnes j'aimerais tester une cellule et selon résulta de celle-ci copier et coller des cellules de cette même ligne sur une autre feuille j’espère avoir été plus explicite par avance merci
    j'essai bien evidament d'avancer de mon cote en vous remercient par avance
    amicalment
    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Bonjour,

      Effectivement, tes explications manquent cruellement de précisions !!!

      « J'ai une feuille de calcul avec plusieurs lignes non définies ... »
      Est-ce à dire que tu ne connais pas le contenu de ces lignes, ou que certaines lignes sont vides (non définies) ou que tu ne sais pas combien de lignes il y a ? ou ... ?

      « ... ainsi que plusieurs colonnes ... »
      même question que pour les lignes ?

      « ... j'aimerais tester ... »
      Quel genre de test ?

      « ... une cellule .... »
      Laquelle ?

      « .... et selon résultat de celle-ci ....>
      Quel type de résultat ?

      Patrice
      0
      1. herve27f Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
         
        encore merci de ton implication
        je ne connais pas le nombres lignes
        la cellule a tester( k ) doit etre = a 1 pour copier et coller des cellule de cette meme ligne dans une autre feuille
        ps le tableau a tester comporte + de 200 ligne
        encore merci
        je galere
        0
  4. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Re,

    Si j'ai bien compris ton problème :
    - Tu veux tester chaque cellule de la colonne K d'un tableau dont tu ne connais pas le nombre de lignes.
    - Quand la cellule de la colonne k contient la valeur 1, tu veux copier la ligne correspondante vers une autre feuille.
    Voila un code :
    Option Explicit
    Public Sub CopierSousCondition()
    Dim Plage_à_analyser As Range
    Dim Plage_à_tester As Range
    Dim Cellule_de_destination As Range
    Dim Cellule_à_tester As Range
    Dim Condition_remplie As Boolean
      
      ' Définition des variables
      ' - plage des cellules contenant les données
      Set Plage_à_analyser = _
            ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion
      ' - plage des cellules à tester
      Set Plage_à_tester = Plage_à_analyser.Columns("K")
      ' - cellule de destination
      Set Cellule_de_destination = ThisWorkbook.Worksheets(2).Range("A1")
      
      ' Copie de la ligne des titres
      ' - Copie de la 1° ligne
      Plage_à_analyser.Rows(1).Copy Destination:=Cellule_de_destination
      ' - Définition de la destination suivante
      Set Cellule_de_destination = Cellule_de_destination.Offset(1)
      
      ' Analyse de la plage
      For Each Cellule_à_tester In Plage_à_tester.Cells
        ' - Test de la cellule de la colonne K
        Condition_remplie = Cellule_à_tester.Value = 1
        ' - Copie sous condition
        If Condition_remplie Then
          ' -- Copie de la ligne entière
          Cellule_à_tester.EntireRow.Copy _
              Destination:=Cellule_de_destination
          ' -- Définition de la destination suivante
          Set Cellule_de_destination = Cellule_de_destination.Offset(1)
        End If
      Next Cellule_à_tester
    
    End Sub

    0
    1. herve27f Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
       
      merci encore patrice
      je ne veux pas copier toute la ligne mais plusieurs cellules provenant de cette même ligne en gros exemple(si dans le feuil9 k17 = 1 j'aimerais copier à17, b17, d17, e17 dans feuil6 et ainsi de suite encore 1000 fois merci
      0
      1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784 > herve27f Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
         
        Re,

        Le code ci-dessus est universel et documenté, il suffit que :
        1) tu essaies de le comprendre.
        2) tu l'adaptes à ton besoin
        0
      2. herve27f Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
         
        merci patrice pour ta reponse elle m'aide beaucoup tres explicite et donc je vais essayer de comprendre
        bonne journee
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    Bonjour herve27f,

    Pour cet exemple, tu dois avoir un classeur Excel avec 2 feuilles de calcul. Pour ces 2 feuilles, fais ceci :

    a) Colonne A : Largeur 5    b) Lignes 1 à 7 : Hauteur 18
    c) Zoom de la feuille : 120 % (à adapter selon la taille de ton écran)

    C'est tout pour la feuille 2 : laisses-la vierge. Comme un dessin vaut
    mieux qu'un long discours, voici une copie d'écran de la feuille 1 :


    Tous les nombres de la feuille 1 sont des nombres choisis au hasard.
    La cellule B2 est là pour ce que tu demandais : « sous conditions de résultat d'une cellule ». En effet, c'est elle qui sera testée :
    si B2 <> 75, sortir aussitôt.

    Tu trouveras ci-dessous un code VBA qui contient 4 subs. Et toutes font un copier / coller. Mais pourquoi 4 ?

    ----------------------------------------------------------------------------

    1) Parce que les 2 premières subs font le copier / coller à partir de la feuille 1 alors que les 2 subs suivantes font le copier / coller à partir de la feuille 2. Et par précaution, la 1ère ligne de la sub EssaiN teste la feuille de départ et sort immédiatement de la sub si tu ne la lance pas à partir de la bonne feuille !

    ----------------------------------------------------------------------------

    2) Les subs Essai1 et Essai3 font une copie intégrale, formats compris : formats des nombres, alignement, bordures, motifs
    et autres ; ce sont 2 exemples de Paste (collage).

    Si tu veux faire la copie sans ces formats, avec uniquement
    les valeurs, utilises alors les subs Essai2 ou Essai4 : ce sont
    2 exemples de PasteSpecial (collage spécial).

    ----------------------------------------------------------------------------

    C'est bien sûr Copy qui fait la copie dans le Presse-papiers.

    Et c'est lui qui affiche une bordure de tirets défilants autour de la plage source. 2 solutions pour enlever cette bordure clignottante : manuellement, appui sur la touche Échap ; par le code VBA : Application.CutCopyMode = False.

    Je ne t'ai pas tout dit sur Paste et PasteSpecial : tu trouveras plein d'autres informations complémentaires dans l'aide de Visual Basic.
    Mais c'est quand même un bon début !  😉

    Voici maintenant le code (à toi de bien l'étudier pour en analyser toutes les différences) :

    
    Option Explicit
    
    Sub Essai1()
      If ActiveSheet.Name <> "Feuil1" Then Exit Sub
      If [B2] <> 75 Then Exit Sub
      [B4:D7].Copy
      ActiveSheet.Paste Worksheets("Feuil2").[B4]
      Application.CutCopyMode = False
    End Sub
    
    Sub Essai2()
      If ActiveSheet.Name <> "Feuil1" Then Exit Sub
      If [B2] <> 75 Then Exit Sub
      [B4:D7].Copy
      Worksheets("Feuil2").[B4].PasteSpecial xlPasteValues
      Application.CutCopyMode = False
    End Sub
    
    Sub Essai3()
      If ActiveSheet.Name <> "Feuil2" Then Exit Sub
      With Worksheets("Feuil1")
        If .[B2] <> 75 Then Exit Sub
        .[B4:D7].Copy: .Paste [B4]
      End With
      Application.CutCopyMode = False
    End Sub
    
    Sub Essai4()
      If ActiveSheet.Name <> "Feuil2" Then Exit Sub
      With Worksheets("Feuil1")
        If .[B2] <> 75 Then Exit Sub
        .[B4:D7].Copy: [B4].PasteSpecial xlPasteValues
      End With
      Application.CutCopyMode = False
    End Sub
    

    Bonne chance !  😊
     
    -3