[excel] recopier une valeur selon un critere

floom26 Messages postés 59 Date d'inscription   Statut Membre Dernière intervention   -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je vous explique ma problématique.

J'ai une feuille de données en quelque sorte qui comporte 2 colonnes : A et B de la manière qui suis :
A B
12 texte1
23 texte2
0 0
5 texte3
0 0
0 0
69 texte4
... ...

Je souhaite récupérer à l'aide d'une macro (pour pouvoir insérer un bouton qui rafraichisse ma table) toutes les données sur une autre feuille avec les deux mêmes colonnes mais simplement là ou les valeurs de A sont différentes de 0.

Donc ici, sur mon autre feuille :

A B
12 texte1
23 texte2
5 texte3
69 texte4

Je ne maîtrise pas les macros c'est pour ça que je compte sur l'un de vous pour me donner le code avec si possible l'ajout en début de macros du nettoyage de la feuille pour mettre à jour intégralement à chaque fois que je la lance.

Merci beaucoup beaucoup
Configuration: Windows XP
Firefox 3.0.17

5 réponses

  1. Cynlg
     
    Bonjour,

    Je ne veux pas t'empêcher de faire une macro mais il me semble (si j'ai bien compris ta demande sinon excuse moi) que tu peux régler ça avec une formule en utilisant la fonction SI.
    Ca donnerait un truc comme ça :
    Dans la colonne A de ta feuille 2 la formule suivante =SI(feuille1!A1=0;"";feuille1!A1) que tu recopies jusqu'en bas de la feuille
    Dans la colonne B de ta feuille 2 la formule suivante =SI(feuille1!A1=0;"";feuille1!B1) que tu recopies également jusqu'en bas.
    Avantage pas besoin d'un bouton pour raffraichir tes données puisqu'elles sont à jour en permanence.

    J'espère que ça peut t'aider.

    Cynlg
    0
  2. floom26 Messages postés 59 Date d'inscription   Statut Membre Dernière intervention   2
     
    Merci Cynlg pour ta réponse mais le "désavantage" de cette formule est qu'il y a des lignes vides et j'aimerai si possible ne pas les supprimer à la main ou en filtrant...
    0
  3. Cynlg
     
    Dans ce cas je suis désolée car je ne sais pas t'aider.

    J'espère que d'autres pourront le faire.

    A bientôt.

    Cynlg
    0
    1. gilou
       
      bonjour
      peut etre une autre solution facile
      1) faire un cop/col special avec liaison des2colonnes de feuil 1 vers feuil 2
      2) sur la feuille 2 selectionner les 2colonnes puis trier de Z>>A
      3) pour faire beau selectionner les 2 col puis format> personnalisé saisir standard; standars ;"" c'est pour supprimer les 0
      a+
      0
  4. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Trouvé sur ce post et adapté à tes critères

    https://www.commentcamarche.net/

    Sub Bouton1_QuandClic()
    Dim Lig As Long
    Dim Col As String
    Dim NbrLig As Long
    Dim NumLig As Long

    Sheets("feuil2").Activate ' feuille de destination

    Col = "a" ' colonne données non vides à tester'
    NumLig = 2 'alors là ca doit etre le N° de la 1er ligne de données en comptant la ligne 1 = 0 .... ? '
    With Sheets("feuil1") ' feuille source'
    NbrLig = .Cells(65536, Col).End(xlUp).Row
    For Lig = 1 To NbrLig 'n° de la 1ere ligne de données'
    If .Cells(Lig, Col).Value <> 0 Then
    .Cells(Lig, Col).EntireRow.Copy
    NumLig = NumLig + 1
    Sheets("feuil2").Cells(NumLig, 1).Insert Shift:=xlDown
    'ici pour insérer ou .Paste pour coller'
    End If
    Next
    End With
    End Sub
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour
    ci joint solution par macro et solution par formules (feuille3)
    https://www.cjoint.com/?btteNseWsl

    macro proposée:

    Sub recopier_sans0()
    Dim nbre As Long, lig As Long, cptr As Long
    Dim tablo
    
    With Sheets(1)
    derlig = .Range("A65536").End(xlUp).Row
    nbre = Application.CountA(.Range("A1:A" & derlig)) - Application.CountIf(.Range("A1:A" & derlig), 0)
    ReDim tablo(nbre - 1, 1)
    For lig = 1 To derlig
        If .Cells(lig, 1) <> 0 Then
            tablo(cptr, 0) = .Cells(lig, 1)
            tablo(cptr, 1) = .Cells(lig, 2)
            cptr = cptr + 1
        End If
    Next
    End With
    
    Application.ScreenUpdating = False
    With Sheets(2)
        .Range("A1").Resize(nbre, 2) = tablo
        .Activate
    End With
    
    End Sub
    
    0