IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Utilisation de find


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Sadr'ihel
    Homme Profil pro
    AQSSE
    Inscrit en
    Juin 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : AQSSE

    Informations forums :
    Inscription : Juin 2016
    Messages : 56
    Par défaut Utilisation de find
    Bonjour,

    J'ai un soucis d'utilisation de Find, j'imagine que je ne l'utilise pas correctement.
    Ce qui est "amusant" c'est que cette syntaxe fonctionne sur une centaine de ligne et parfois ca bloque avec l'erreur variable objet ou variable de bloc with non défini.

    Comme vous pouvez le voir dans ce code je cherche une chaîne de caractère et je sélectionne/copie la valeur adjacente vers un autre classeur avec la même chaîne de caractère.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Cells.Find(what:=tri2).Offset(0, 9).Select
    Selection.Copy
    Windows("modele NO gestion.xlsm").Activate
    Sheets(tri).Select
    Cells.Find(what:=tri2).Offset(0, -1).Select
    Selection.PasteSpecial Paste:=xlPasteAll
     
    Windows("inventaire.xlsm").Activate
     
    Cells.Find(what:=tri2).Offset(0, 4).Select
    Selection.Copy
    Windows("modele NO gestion.xlsm").Activate
    Sheets(tri).Select
    Cells.Find(what:=tri2).Offset(0, 1).Select
    Selection.PasteSpecial Paste:=xlPasteAll
    Merci de votre aide

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    bonjour
    toujours utiliser find dans une condition d'existence sinon c'est le crash assuré en find de find next
    ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Cells.Find(what:=tri2).Offset(0, 9).Select
    Selection.Copy
    Windows("modele NO gestion.xlsm").Activate
    Sheets(tri).Select
    Cells.Find(what:=tri2).Offset(0, -1).Select
    Selection.PasteSpecial Paste:=xlPasteAll
    mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set c=Cells.Find(what:=tri2)
    if not c is nothing then c.Offset(0, 9).Copy
    Windows("modele NO gestion.xlsm").Activate
    Sheets(tri).Select
    set c2=Cells.Find(what:=tri2)
    if not c2 is nothing then 
    c2.Offset(0, -1).Select
    Selection.PasteSpecial Paste:=xlPasteAll
    end if
    et je suis casiment sur que l'on peut se passer des activate de window et select sur classeur differents ,je vais faire des tests

    re
    bon ben c'est bien ce que je pensait on a pas besoins de select ou activate et tout le toin toin

    un exemple vite fait comme ca pour la demo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    Sub test()
    Dim Wbk1 As Workbook, Wbk2 As Workbook, c As Range, c2 As Range, tri2 As String
     
    Set Wbk1 = ThisWorkbook
    Set Wbk2 = Workbooks("Classeur2")
     
    tri2 = "toto"
     
    Set c = Wbk1.Sheets(1).Cells.Find(what:=tri2)
    If Not c Is Nothing Then
    Set c2 = Wbk2.Sheets(2).Cells.Find(what:=tri2)
    If Not c2 Is Nothing Then c.Offset(0, 9).Copy Destination:=c2.Offset(0, -1)
    End If
    End Sub
    en gros c'est simple

    tu declare deux workbook (les concernés)
    tu fait un find sur le sheets que tu veux du classeur 1 c'est C1
    si c'a n'est pas rien alors tu peux aller faire le find dans le classeur2 .sheets(que tu veux)sera C2
    si c2 n'est
    pas rien alors on copie destination directement

    tu ne peut pas avoir d'erreur soulevée car on teste l'existence des deux donc si l'une des deux n'existe pas ben rien du tout alors
    a noter que l'on pourrais encore plus simplifier l'ecriture en faisant les deux find d'affillé et faire le if nothing apres

    edit:
    voila pour etre precis tu peux faire comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    Dim Wbk1 As Workbook, Wbk2 As Workbook, c As Range, c2 As Range, tri2 As String
    Set Wbk1 = ThisWorkbook
    Set Wbk2 = Workbooks("Classeur2")
    tri2 = "toto"
    Set c = Wbk1.Sheets(1).Cells.Find(what:=tri2)
    Set c2 = Wbk2.Sheets(2).Cells.Find(what:=tri2)
    critere = Not c Is Nothing And Not c2 Is Nothing
    If critere = True Then c.Offset(0, 9).Copy Destination:=c2.Offset(0, -1)
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre confirmé Avatar de Sadr'ihel
    Homme Profil pro
    AQSSE
    Inscrit en
    Juin 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : AQSSE

    Informations forums :
    Inscription : Juin 2016
    Messages : 56
    Par défaut
    merci pour ces exemples je vais les tester de suite.
    Je reviens vite.

    Edit

    Ca marche super bien.
    Je modifie tout mon projet et mes projets avec les wbk1 et 2 et 3 .... quand ce sera possible evidement.

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utilisation de Find
    Par Beluga_71 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/05/2008, 17h03
  2. utilisation de find pour trouver date
    Par ouioui_cmoi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/03/2008, 14h23
  3. Utilisation de find
    Par Fry dans le forum Administration système
    Réponses: 2
    Dernier message: 02/11/2006, 15h39
  4. [C++ .NET] Comment utiliser fonction Find ?
    Par thecrax dans le forum Framework .NET
    Réponses: 3
    Dernier message: 17/08/2006, 09h02
  5. [VBA-E] Pb avec l'utilisation de .Find
    Par belfaigore dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/07/2006, 07h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo