Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 [Résolu] VBA-copier cellules sous condition d'une autre cellule

CeNedra

XLDnaute Nouveau
Bonjour à tous,

je vous joins un petit fichier en support de ma demande.

J'ai besoin de déplacer certaines information sous la condition qu'une cellule soit remplie. Si la cellule est vide, les infos ne seront donc pas reportées.

J'ai commencé une macro avec le soutien de différents posts de ce forum. Mais je bloque... Ça me déplace la colonne référente mais je n'arrive pas à trouver le code pour déplacer les autres colonnes.

Je précise que je ne touche pas du tout au langage VBA

Si quelqu'un à une petite idée, ça ne me semble pas irréalisable mais là je bloque.

Je vous remercie

CeNedra
 

Pièces jointes

  • remise.xlsm
    22 KB · Affichages: 8

Staple1600

XLDnaute Barbatruc
Bonjour le fil, CeNedra

CeNedra [Bienvenue sur le forum]
Une macro possible
VB:
Sub copie_B()
Dim t, lig&, lig2&, f As Worksheet
t = Feuil2.[A1].CurrentRegion
Set f = Feuil3
lig = f.Cells(Rows.Count, 1).End(3).Row
f.Cells(lig + 1, 1).Resize(UBound(t, 1), UBound(t, 2)) = t
lig2 = f.Cells(Rows.Count, 1).End(3).Row
f.Range(Cells(lig + 2, "G"), Cells(lig2, "G")).FormulaR1C1 = "=IF(COUNTA(RC[-6]:RC[-1])=6,""$"",0)"
f.Columns("G:G").SpecialCells(xlCellTypeFormulas, 1).EntireRow.Delete
f.Columns("G:G").Clear
End Sub
 

Jacky67

XLDnaute Barbatruc
Bonjour,
Hello JM
Une autre possibilitée
La mise à jour se fait à la sélection de la feuille "Resultat"
VB:
Sub copie()
    Application.ScreenUpdating = False
    Sheets("Resultat").Cells.Clear
    With Sheets("Source")
        If .AutoFilterMode Then .ShowAllData
        .UsedRange.AutoFilter Field:=3, Criteria1:="<>"
        .UsedRange.SpecialCells(xlCellTypeVisible).Copy Sheets("Resultat").[a2]
        .AutoFilterMode = False
    End With
End Sub
 

Pièces jointes

  • remise.xlsm
    17.7 KB · Affichages: 9

Staple1600

XLDnaute Barbatruc
Re

Je me permets d'emprunter le code de Jacky67 et de le remanier un chouia à ma sauce
VB:
Sub copie2()
Dim f As Worksheet: Set f = Feuil3
Application.ScreenUpdating = False
    With Sheets("Source")
        If .AutoFilterMode Then .ShowAllData
        .UsedRange.AutoFilter Field:=3, Criteria1:="<>"
        .AutoFilter.Range.Offset(1).Copy f.Cells(Rows.Count, 1).End(3)(2)
        .AutoFilterMode = False
    End With
End Sub
 

CeNedra

XLDnaute Nouveau
Ouh lala, vous avez été super rapides !

Bon et moi qui trouvais certains codes compréhensibles, vous m'avez perdue ^^

Je vais tester ça sur mon fichier complet et je reviens vers vous

et c'est cool de mettre les codes dans les réponses parce que souvent, j'ai voulu télécharger des fichiers "réponse" et malheureusement la source n'existait plus
 

CeNedra

XLDnaute Nouveau
Bon....

Si vos formules fonctionnent toutes très bien, finalement mon fichier est beaucoup plus complexe que ce que je vous avais envoyé. Je pensais que ça suffirait... mais j'avais tort.
Les cellules fusionnées sautent, les données groupées aussi et j'avais oublié de vous préciser que mon fichier contient certaines colonnes que je ne veux pas "déplacer"...

J'ai l'impression de vous avoir fait perdre votre temps :/

Si jamais vous êtes courageux et pas rancuniers je vous laisse un autre fichier, 4 lignes où l'original en contient 120. Vous cassez pas la tête si vous avez autre chose à faire

En tout cas merci vous avez parfaitement répondu à ma demande qui par contre n'était pas assez explicite
 

Pièces jointes

  • remise.xlsm.xlsx
    24.8 KB · Affichages: 5

Staple1600

XLDnaute Barbatruc
Re

Avant d'aller au dodo, imprime ce mantra sur un papier de qualité, encadre le avec du bois flotté et pose le sur ta table de chevet
Ainsi tu seras armé pour tes prochaines questions

 

Jacky67

XLDnaute Barbatruc
Re..
Profitons-en que JM dort

J'ai supposé que les colonnes "adh" étaient manquantes par erreur, je les ai ajoutées, les feuilles de l'année aussi(sinon modifier array() dans le code)
VB:
Sub copie()
    Dim Sh As Worksheet, Derlg&, Col&
    Application.ScreenUpdating = False
    For Each Sh In Sheets(Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"))
        Sh.Cells.Clear
        If IsNumeric(Application.Match(Sh.Name, Feuil1.[1:1], 0)) Then
            Col = Application.Match(Sh.Name, Feuil1.[1:1], 0)
            With Feuil1
                Derlg = .Cells(.Rows.Count, "A").End(xlUp).Row
                .Range("a3:b" & Derlg).Copy Sh.[a2]
                .Range("g3:g" & Derlg).Copy Sh.[c2]
                .Range(.Cells(2, Col), .Cells(Derlg, Col + 3)).Copy
            End With
            Sh.[d1].PasteSpecial Paste:=xlPasteValues
            Sh.[d1].PasteSpecial Paste:=xlPasteFormats
            Sh.Columns.AutoFit
        End If
    Next
End Sub
 

Pièces jointes

  • remise v2.xlsm
    38.2 KB · Affichages: 12
Dernière édition:

CeNedra

XLDnaute Nouveau
Merci beaucoup !!!!

Adh c'est l'adhésion pour l'année, les adhérents sont censés la payer en septembre ou octobre mais effectivement on prend des adhérents en milieu d'année donc les colonnes seront toujours utiles

J'ai modifié un peu mon fichier original pour le code fonctionne

Merci beaucoup en tout cas, ça va vraiment me faciliter la tache

Bonne soirée
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…