Copier avec condition VBA

lucieaup -  
 lucieaup -
Bonjour à tous,

Je vous solicite pour un conseil (une correction de formule je pense). Je suis en train de coder un fichier en VBA et je pense que je ne compose pas mon code correctement.

Je voudrais que toutes les valeurs de ma colonne X qui ne sont pas dans ma colonne AC egalement remontent sur une feuille à part.

J'ai cherché sur le forum et j'ai esayé deux méthodes ( Autofilter et range count), mais aucune ne marche .

Pourriez-vous m'aider?

merci

3 réponses

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour Lucieaup

    Une possibilité :
    Dim Ligne As Long
    Ligne = Sheets("Feuil1"). Columns(24).Find("*", , , , xlByColumns, xlPrevious).Row  ' derniere ligne remplie col X
    For n= 2 to Ligne ' boucle sur lignes depuis la 2eme jusqu'à la dernière
    If Sheets("Feuil1").range("X" & n) <> Sheets("Feuil1").range("AC" & n) then '' si valeurs différentes en X et AC
    x=x+1
    Sheets("Feuil2").Range("A") & x = Sheets("Feuil1").range("X" & n) 'place valeur en col A de feuil2
    End If
    Next
    

    Cdlmnt
    Via
    0
  2. lucieaup
     
    Bonjour,

    Merci pour votre réponse, j'ai essayé mais ca ne fonctionne pas. De plus si je comprend bien votre code il teste que la valeur de X2 par exemple ne soit pas égale à AC 2, hors je voudrais qu'il t'este toute la colonne car cette valeur pourrait être ailleurs.

    Je vous ai mis mon fichier en pièce jointe, il y a d'autres macros c'est la dernière dont on parle.

    https://www.cjoint.com/c/HGmoJx0661H

    merci
    0
  3. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Dans ce cas il faut passer par un NB.SI

    Sub finalbatch()
    x = 3
    Dim Ligne As Long
    Ligne = Sheets("ZPOCL").Columns(24).Find("*", , , , xlByColumns, xlPrevious).Row ' derniere ligne remplie col X
    For n = 2 To Ligne ' boucle sur lignes depuis la 2eme jusqu'à la dernière
    If Application.WorksheetFunction.CountIf(Sheets("ZPOCL").Range("AC:AC"), Sheets("ZPOCL").Range("X" & n)) = 0 Then ' si valeurs n'existe pas dans AC
    x = x + 1
    Sheets("Database").Range("A" & x) = Sheets("ZPOCL").Range("X" & n) 'place valeur en col A de feuil2
    End If
    Next

    End Sub
    0
    1. Lucieaup
       
      Bonjour,

      Merci c'est génial ca marche impeccable et sans erreur. J'ai juste un point, ca me remonte des cases blanches, comment les lui faire enlever?

      merci
      0
    2. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      Bonjour

      C'est que tu dois avoir des vides dans ta colonne X, alors complète le IF ainsi :

      If Application.WorksheetFunction.CountIf(Sheets("ZPOCL").Range("AC:AC"), Sheets("ZPOCL").Range("X" & n)) = 0 And Sheets("ZPOCL").Range("X" & n) <>"" Then

      Cdlmnt
      Via
      0
    3. lucieaup
       
      C'est parfait ca marche, merci beaucoup!

      Bonne journée,

      lucie
      0