Bug dans une macro .find
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Bug dans une macro .find



  1. #1
    Varchamb

    Bug dans une macro .find


    ------

    Bonjour à tous

    J'ai réalisé une petite macro pour copier coller des données d'un onglet à un autre.
    Lorsqu'une cellule de la Feuil1 contient une donnée (peu importe quoi, dès qu'il y a quelque chose : <>"")
    les cellules d'à coté sont collés dans un autre onglet (dénommé ds mon code ActiveSheet)
    Pour trouver la ligne où ces cellules vont être collées, je cherche dans ActiveSheet le même contenu qu'une cellule de la ligne que je vais copier.
    Pour cette recherche, j'utilise .find. Alors que le code fonctionne pour certaine ligne, pour certaine il m'affiche des résultats étonnants (erreur de ligne) et finalement la macro plante (erreur 91).
    Quelqu'un voit il le problème ds ce code ?
    Code:
    Sub R()
    
    Dim ligne As Integer
    Dim Cell As Range
    
    For Each Cell In Feuil1.Range("N2:N" & [B7000].End(xlUp).Row)
        If Cell.Value <> "" Then
        ligne = ActiveSheet.Range("B2:B" & [B7000].End(xlUp).Row).Find(Cell.Row)
        Range(Cell.Offset(0, -1), Cell.Offset(0, 6)).Copy Destination:=ActiveSheet.Range("M" & ligne)
        End If
    Next Cell
    End Sub
    Merci d'avance

    -----

  2. #2
    cherbe

    Re : Bug dans une macro .find

    Citation Envoyé par Varchamb Voir le message
    Lorsqu'une cellule de la Feuil1 contient une donnée (peu importe quoi, dès qu'il y a quelque chose : <>"")
    les cellules d'à coté sont collés dans un autre onglet (dénommé ds mon code ActiveSheet)
    ActiveSheet est un mot réservé. Il désigne la feuille active dans le langage. Commence par renommer cet onglet pour éviter la confusion.
    Ensuite, il est préférable de se rendre sur l'onglet à utiliser même si ça consomme un peu de temps d'exécution. Je ne suis pas sûr que ce soit obligatoire mais ça limite les risques.
    Petite astuce : je nomme tous mes éléments en Français ce qui limite le risque d'utilisation de mots réservés.

  3. #3
    Varchamb

    Re : Bug dans une macro .find

    Ok Cherbe

    En fait, je n'ai pas "dénommé" mon onglet ActiveSheet contrairement à ce que j'ai dit mais il s'appelle ainsi dans la macro puisque ce sera l'onglet actif lors du lancement de la macro (ce qui rejoint ton deuxième conseil).

    A tout le forum

    Après quelques tests sur la macro je me rends compte que les trois premières valeurs que la variable Ligne prend sont :
    211 au lieu de 11
    122 au lieu de 12
    131 au lieu de 13
    Quelqu'un a t il une explication ?

  4. #4
    cherbe

    Re : Bug dans une macro .find

    Citation Envoyé par Varchamb Voir le message
    Ok Cherbe

    En fait, je n'ai pas "dénommé" mon onglet ActiveSheet contrairement à ce que j'ai dit mais il s'appelle ainsi dans la macro puisque ce sera l'onglet actif lors du lancement de la macro (ce qui rejoint ton deuxième conseil).
    Ok c'est noté. N'empêche qu'il y a un problème dans ton code puisque tu ne changes pas explicitement d'onglet ce qui revient à cherche dans la feuille active une valeur déjà trouvée.
    Lorsque tu trouves une cellule non vide au début de la macro, stocke cette valeur dans une variable (ma_variable=cell.value) (*)
    Ensuite, déplace-toi dans le second onglet : Sheet("onglet2").Activate et relance une recherche de cellule contenant ma_variable.
    (ou alors je n'ai rien compris à ton objectif !)

    (*) Je crois que cell est également un mot réservé. Remplace-le par cellule.

  5. A voir en vidéo sur Futura
  6. #5
    Pauldair

    Re : Bug dans une macro .find

    Bonjour,

    La méthode Find renvoie un objet Range or ta variable ligne est un Integer, il est bien possible que ton problème vienne de là.

  7. #6
    Varchamb

    Re : Bug dans une macro .find

    Merci pour ces réponses qui m'ont permis de faire évoluer mon projet de macro.
    Surtout de mieux vous le décrire d'ailleurs :
    Code:
    Option Explicit
    Sub R()
    
    Dim Ligne As Range
    Dim Cellule As Range
    Dim NFact As Integer
    
    'Pour la colonne contenant les commentaires (feuille1),
    For Each Cellule In Feuil1.Range("N2:N" & [B7000].End(xlUp).Row)
    'je cherche si une cellule contient un commentaire
        If Cellule.Value <> "" Then
    'si oui,alors je repère le numéro de facture dont il s'agit
        NFact = Feuil1.Range(Cellule.Offset(0, -12).Address).Value
    'je repère le numéro de ligne dans le nouveau tableau qui correspond à ce numéro de facture
        Ligne = ActiveSheet.Range("B2:B" & [B7000].End(xlUp).Row).Find(NFact)
    'je colle les commentaires sur cette ligne dans le nouveau tableau
        Feuil1.Range(Cellule.Offset(0, -1), Cellule.Offset(0, 6)).Copy Destination:=Feuil3.Range("M" & Ligne)
        End If
    Next Cellule
    End Sub
    L'erreur persiste dans la ligne : "Ligne = ...." Et lorsque je remplace .Find(NFact) par .Select, la sélection se fait sur le fichier mais l'erreur est toujours présente (probablement parce que la sélection se fait pour chaque cellule de la plage "N2:N" & [B7000].End(xlUp).Row.
    Mais je ne comprends pas pourquoi et comment régler le problème.

    Merci d'avance

  8. #7
    Varchamb

    Re : Bug dans une macro .find

    Pourquoi dans mon message précédent les commentaires dans mon code n'apparaissent pas en vert ?

  9. #8
    Varchamb

    Re : Bug dans une macro .find

    Elément de réponse :
    En changeant la nature de la variable Ligne en Variant, le code ne bug plus !

  10. #9
    Varchamb

    Re : Bug dans une macro .find

    A priori, ainsi, cela fonctionne :
    Code:
    Option Explicit
    Sub R()
    
    Dim Ligne As Variant
    Dim Cellule As Range
    Dim NFact As Integer
    
    'Pour la colonne contenant les commentaires (feuille1),
    For Each Cellule In Feuil1.Range("N2:N" & [B7000].End(xlUp).Row)
    'je cherche si une cellule contient un commentaire
        If Cellule.Value <> "" Then
    'si oui,alors je repère le numéro de facture dont il s'agit
        NFact = Feuil1.Range(Cellule.Offset(0, -12).Address).Value
    'je repère le numéro de ligne dans le nouveau tableau qui correspond à ce numéro de facture
        Ligne = ActiveSheet.Range("B2:B" & [B7000].End(xlUp).Row).Find(NFact).Row
    'je colle les commentaires sur cette ligne dans le nouveau tableau
        Feuil1.Range(Cellule.Offset(0, -1), Cellule.Offset(0, 6)).Copy Destination:=ActiveSheet.Range("M" & Ligne)
           
        End If
    Next Cellule
    End Sub

  11. #10
    Pauldair

    Re : Bug dans une macro .find

    Ton problème est-il donc résolu ?

  12. #11
    JPL
    Responsable des forums

    Re : Bug dans une macro .find

    Citation Envoyé par Varchamb Voir le message
    Pourquoi dans mon message précédent les commentaires dans mon code n'apparaissent pas en vert ?
    Pourquoi voudrais-tu qu'ils apparaissent en vert ?
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  13. #12
    cherbe

    Re : Bug dans une macro .find

    Citation Envoyé par JPL Voir le message
    Pourquoi voudrais-tu qu'ils apparaissent en vert ?
    Sans doute parce qu'ils apparaissent en vert dans l'éditeur VBA ?

  14. #13
    Varchamb

    Re : Bug dans une macro .find

    Oui mon problème est résolu Pauldair. Je ne vois pas comment l'indiquer.

    Oui, je pensais que ce qui apparaissait en vert dans l'éditeur vba serait apparu en vert avec la fonction code sur le forum. Cela aurait facilité la lecture.

    Merci à tous.
    Dernière modification par Varchamb ; 28/07/2015 à 10h01.

Discussions similaires

  1. macro dans une macro pour un microcontrôleur Pic
    Par arzew dans le forum Électronique
    Réponses: 16
    Dernier message: 19/04/2014, 19h00
  2. Plusieurs macro dans une même page excel
    Par mmtvaldivienne dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 23/07/2012, 15h36
  3. Appel d'une fonction Excel dans une macro
    Par Calia_Eowyn dans le forum Programmation et langages, Algorithmique
    Réponses: 8
    Dernier message: 26/10/2011, 10h01
  4. Macro dans PowerPoint
    Par Albatour37 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 31/03/2010, 22h07
  5. Macro gestion de onglet dans excel
    Par invite7eac5b19 dans le forum Logiciel - Software - Open Source
    Réponses: 10
    Dernier message: 21/04/2008, 15h49