Fonction .FIND ne fonctionne pas

Bonjour,

Une autre proposition à étudier.

Cdlt.

test (1).xlsm

Bonjour Jean-Eric,

Merci pour ta proposition, mais je n'ai pas compris.

pourrais-tu m'expliquer ?

merci

Bonjour,

Avec la copie du résultat d'un filtrage (Sub "Test()") :

Sub Test()

    Dim Plage As Range
    Dim Critere As String

    Critere = "411000"

    Set Plage = DefPlage(Worksheets("SAGE_CEP"))

    With Worksheets("SAGE_CEP")

        Plage.AutoFilter 4, "=" & Critere

        .AutoFilter.Range.EntireRow.Copy Worksheets("411000").Cells(1, 1)

        Plage.AutoFilter

    End With

End Sub

Function DefPlage(Fe As Worksheet, Optional L As Long = 1, Optional C As Long = 1) As Range

    On Error GoTo Fin

    With Fe

        Set DefPlage = .Range(.Cells(L, C), _
                       .Cells(.Cells.Find("*", .[A1], -4123, , _
                       1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
                       2, 2).Column))

    End With

    Exit Function

Fin:

    Set DefPlage = Nothing

End Function

Bonjour,

Avec la copie du résultat d'un filtrage (Sub "Test()") :

Sub Test()

    Dim Plage As Range
    Dim Critere As String

    Critere = "411000"

    Set Plage = DefPlage(Worksheets("SAGE_CEP"))

    With Worksheets("SAGE_CEP")

        Plage.AutoFilter 4, "=" & Critere

        .AutoFilter.Range.EntireRow.Copy Worksheets("411000").Cells(1, 1)

        Plage.AutoFilter

    End With

End Sub

Function DefPlage(Fe As Worksheet, Optional L As Long = 1, Optional C As Long = 1) As Range

    On Error GoTo Fin

    With Fe

        Set DefPlage = .Range(.Cells(L, C), _
                       .Cells(.Cells.Find("*", .[A1], -4123, , _
                       1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
                       2, 2).Column))

    End With

    Exit Function

Fin:

    Set DefPlage = Nothing

End Function

Bonjour Theze,

Merci pour ta réponse.

pourrais-tu me donner quelques explications notamment :

Set DefPlage = .Range(.Cells(L, C), _

.Cells(.Cells.Find("*", .[A1], -4123, , _

1, 2).Row, .Cells.Find("*", .[A1], -4123, , _

2, 2).Column))

le VBA n'est pas mon point fort.

Merci

Cette fonction recherche la cellule la plus basse et celle la plus à droite qui ne sont pas vides donc, si tu as par exemple une valeur dans la cellule E50 qui est la plus basse et une valeur dans la cellule Z2 qui est la plus à droite, la plage sera A1:Z50 même si Z50 est vide ceci afin de prendre en compte toute la zone utilisée dans la feuille. Les deux paramètres optionnels permettent de débuter la plage à la ligne Y et la colonne X, par défaut c'est la cellule A1 (1 et 1).

On pourrait utiliser la propriété "UsedRange" mais elle est, à mon sens, sournoise car il suffit de formater une cellule sans y entrer une quelconque valeur pour que la plage soit définie par rapport à cette cellule !

Cette fonction recherche la cellule la plus basse et celle la plus à droite qui ne sont pas vides donc, si tu as par exemple une valeur dans la cellule E50 qui est la plus basse et une valeur dans la cellule Z2 qui est la plus à droite, la plage sera A1:Z50 même si Z50 est vide ceci afin de prendre en compte toute la zone utilisée dans la feuille. Les deux paramètres optionnels permettent de débuter la plage à la ligne Y et la colonne X, par défaut c'est la cellule A1 (1 et 1).

On pourrait utiliser la propriété "UsedRange" mais elle est, à mon sens, sournoise car il suffit de formater une cellule sans y entrer une quelconque valeur pour que la plage soit définie par rapport à cette cellule !

Merci Theze pour ta réponse.

on est bien d'accord que cette macro ne supprime pas les erreurs de copie coller qui apparaissent comme dans la capture ci-dessous :

erreur copie coller

Je ne comprend pas ce que tu veux dire par :

on est bien d'accord que cette macro ne supprime pas les erreurs de copie coller qui apparaissent comme dans la capture ci-dessous

voici le résultat que j'obtiens après filtrage sur la feuill "411000" :

Capture retirée (données personnelles)

Bonjour,

si ta question est convertir en numérique ta colonne D :

  • copier une cellule vide
  • sélectionner la plage et collage spécial addition.

Mais vu que le critère de filtre est "411000" et non 411000 ça ne devrait pas te poser de problème.

eric

Bonjour,

Ma proposition est un filtre (automatique).

La liste déroulante en A3 permet le choix du critère.

Jj'ai utilisé Power Query et un soupçon de VBA pour l'actualisation.

Cdlt.

Bonjour,

Ma proposition est un filtre (automatique).

La liste déroulante en A3 permet le choix du critère.

Jj'ai utilisé Power Query et un soupçon de VBA pour l'actualisation.

Cdlt.

bonjour Jean-Eric,

Merci pour ta proposition. Le fichier mis en ligne est un extrait de mon fichier principal.

Ce qui explique que tu n'a pas la meme chose.

Bonjour,

si ta question est convertir en numérique ta colonne D :

  • copier une cellule vide
  • sélectionner la plage et collage spécial addition.

Mais vu que le critère de filtre est "411000" et non 411000 ça ne devrait pas te poser de problème.

eric

Bonjour eriiic,

Merci pour ta réponse, mai sais comment faire intégrer dans la macro.

comme déja annoncé , je suis novice en VBA.

pourrais-tu m'aider a l'intégrer stp ?

Déjà teste et donne ton retour sur les différentes propositions.

Si une est correcte pas besoin de modifier quoique ce soit...

Et s'il y a des anomalies résiduelles, précises lesquelles.

eric

Déjà teste et donne ton retour sur les différentes propositions.

Si une est correcte pas besoin de modifier quoique ce soit...

Et s'il y a des anomalies résiduelles, précises lesquelles.

eric

Bonjour eriiic,

Merci pour ton retour.

Alors j'ai testé plusieurs combinaison et celle qui me convient c'est celle-ci :

ub Macro1()

TOPO_REP = 411000

START_LINE = 1

NBR_LINE_CEP = Sheets("SAGE_CEP").Cells(1, 1).End(xlDown).Row

With Sheets("SAGE_CEP")

For i = 1 To NBR_LINE_CEP

If .Cells(i, 4).Value = TOPO_REP Then

For k = 1 To 8

Sheets("411000").Cells(START_LINE, k) = Sheets("SAGE_CEP").Cells(i, k)

Next k

START_LINE = START_LINE + 1

End If

Next i

End With

End Sub

quand j'ai intégré cette macro, elle fonctionné sur le fichier que j'ai mis dans le forum, mais des que je l'intègre dans mon fichier original elle ne fonctionne pas.

l'explication : lors de l'importation des différentes données, ils sont collés en tant que texte.

quand je les transforme en cliquant sur erreur icone verte image ci-dessous , la macro fonctionne.

pourrais-tu m'aider avec une macro a transformer la colonne entière en nombre ... ?

merci

erreur copie coller

Bonjour,

en règle générale il est préférable d'agir lors de l'importation.

Ceci dit :

With [D1].Resize(Cells(Rows.Count, 4).End(xlUp).Row)
    .Value = .Value
End With

eric

Rechercher des sujets similaires à "fonction find fonctionne pas"