Comparer cellule avec plage vb

Résolu
Bonjour le forum,

Encore besoin de votre aide sur une maccro exel.

Je m'explique je cherche à comparer une cellule avec une plage pour ensuite la copier.

Voici la partie du code avec la ligne en gras posant problème:

If .Cells(Lig, Col).Value = Range("D3:D80").Value Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Cells(NumLig + 127, 2).Select
ActiveSheet.Paste Link:=True
End If

Merci de votre aide!

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour
    Dim plage As Range
    Dim cel
    
    St plage = Range("D3:D81")
    '....
    For Each cel In plage
       If cel.Value = .Cells(Lig, Col).Value Then
       'blabla ..
       End If
    Next cel
    
    '....


    ;o)
    1. Contributeur
      Bonjour,
      Essaies:

      if application.countif(range("D3:D80"),cells(lig,col))>0 then
      1. Merci pour ta réponse écoute rien ne se passe je te donne le code complet:

        Sub REGROUPB()

        Dim Lig As Long
        Dim Col As String
        Dim NbrLig As Long
        Dim NumLig As Long

        Sheets("REGROUP B").Activate 'feuille de destination
        NumLig = 0
        Col = "B" ' colonne feuille source à parcourir
        NumLig = 0
        With Sheets("carnet de dep a") ' feuille source
        NbrLig = .Cells(65536, Col).End(xlUp).Row
        For Lig = 1 To NbrLig
        If Application.CountIf(Range("D3:D81"), Cells(Lig, Col)) Then
        .Cells(Lig, Col).EntireRow.Copy
        NumLig = NumLig + 1
        Cells(NumLig + 127, 2).Select
        ActiveSheet.Paste Link:=True
        End If
        Next
        End With

        End Sub

        Merci de ton aide!
        1. Contributeur
          Dans ta demande, on ne savait pas que ta ligne était dans with -end with
          donc
          If Application.CountIf(.Range("D3:D81"), .Cells(Lig, Col)) Then 


          et d'autre part, j'aurais plutôt mis col=2 que "B" (ce n'est pas obligatoire)

          ensuite tu copies une ligne entière
          .Cells(Lig, Col).EntireRow.Copy
          sur une zone commençant colonne 2...
          Cells(NumLig + 127, 2).Select

          enfin "numlig" semble inutile, tu pourrais le remplacer par "lig"
      2. Je te remercie ,je teste mais toujours pas de résultat le décalage de colonne est voulu je prend compte de tes remarques.

        C'est vraiment cette ligne qui pose problème il faut que je trouve pour l'appliquer à une plage une idée?

        If .Cells(Lig, Col).Value = Range("D121").Value Then

        Merci
        1. Salut Polux31

          J'ai juste un problème avec St plage marche pas peut tu m'aider?

          Merci
          1. oups autant pour moi ...

            Set plage = ....

            et faire Set plage = Nothing juste avant le End Sub

            ;o)
        2. Désolé d'abuser mais ca ne fonctionne pas n'ya til pas une fontion à ton connaissance permettant de dire:
          Si .Cells(Lig, Col).Value est égal à une des valeurs de la plage alors copier ligne.

          Merci
          1. Contributeur
            Désolé, la ligne que j'avais eu l'impertinence de te donner fonctionne; mais tu as eu raison de me jeter de cette discussion, je suis trop nul pour toi
          2. Houla je ne jette personne je t'ai remercié et te remercie encore pour ton aide et si je fais appel au forum c'est que je n'arrive pas à le faire tout seul. J'essaye juste d'explorer plusieurs soltuions pour arriver au bon résultat.

            Donc ne le prend pas mal

            Bonne après midi
          3. Dire que ça ne fonctionne pas ou "toujours pas de résultats" est un peu court ...
            Je n'ai pas pris l'option "don divinatoire" dans mon cursus...

            Je t'ai donné une façon différente de michel pour parcourir une plage, à toi de l'adapter.

            Tout comme la proposition de michel qui curieusement fonctionne quand elle est bien appliquée.
          4. ça devient un linchage collectif je débute en programmation donc je mais pas mal de temps à adapter le code c'est dans le cadre professionnel donc je n'ai pas tout mon temps non plus donc j'essaye de faire au plus vite. J'ai réussi au final avec ton code Polux31 et aucun moment je n'ai remis en doute vos compétences à tous les deux. Maintenant si vous êtes sentis froissez mes plates escuses.

            Merci et bon week end à tous les deux :)