[excel] recopier une valeur selon un critere

floom26 Messages postés 67 Statut Membre -  
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
A voir également:

5 réponses

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
floom26 Messages postés 67 Statut Membre 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
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
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
Farfadet88 Messages postés 7780 Date d'inscription   Statut Membre Dernière intervention   1 370
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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