[excel] recopier une valeur selon un critere

Fermé
floom26 Messages postés 61 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 25 janvier 2011 - 18 janv. 2010 à 14:50
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 19 janv. 2010 à 19:07
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

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 61 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 25 janvier 2011 2
18 janv. 2010 à 15:37
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
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
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 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 369
19 janv. 2010 à 16:51
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
19 janv. 2010 à 19:07
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