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 :

Erreur dans le code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut
    Bonjour, j'ai une erreur dans le code et je ne sais pas comment la résoudre.
    Est-ce que à vue d'oeil quelqu'un voit mon erreur?Merci.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Sub test()
     
    Dim i As Integer
    Dim k As Integer
    Dim derli As Integer
    Dim cel As Range
    Dim sh As Worksheet
    Dim x As String
    Dim recherche As Range
    x = "YES"
    k = 8
     
    Set sh = Worksheets("data")
        With sh
           For Each cel In sh.Range("v5:v" & sh.Range("v5").End(xlDown).Row)
            Set recherche = cel.Find(x)
            Next cel
        End With
     
    derli = Columns(1).Find("*", , , , , xlPrevious).Row
            For i = 5 To derli
                If Cells(i, 22).Value = x Then
                sh.Range("a&i, n&i, o&i, al&i, ad&i, ae&i, af&i, ag&i, ah&i, ai&i, am&i, an&i, ao&i, ar&i, as&i, at&i, ak&i, aj&i, m&i").Select
                Selection.Copy
                Worksheets("Fully Redeemed").Activate
                Cells(k, 1).Activate
                ActiveSheet.Paste
                End If
            Next i
        i = i + 1
        k = k + 1
    End Sub
    le debogeur inscrit pour la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sh.Range("a&i, n&i, o&i, al&i, ad&i, ae&i, af&i, ag&i, ah&i, ai&i, am&i, an&i, ao&i, ar&i, as&i, at&i, ak&i, aj&i, m&i").Select
    error 1004
    method 'range' of object'_worksheet'failed
    J'ai essayé avec juste: Range("a&i....m&i").select mais ca me donne également une erreur

  2. #2
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Pourquoi ne mets tu pas?
    a la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sh.Range("a&i, n&i, o&i, al&i, ad&i, ae&i, af&i, ag&i, ah&i, ai&i, am&i, an&i, ao&i, ar&i, as&i, at&i, ak&i, aj&i, m&i").Select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim rang1 as string
    rang1 = "a" + CStr(i) + ":" + "m" + CStr(i)
    sh.Range(rang1).Select
    tu ne peux mélanger des string avec des integer donc il faut faire une conversion des integer en string

  3. #3
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sh.Range("a" & i, "n" & i, ..., "m" & i).Select

  4. #4
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour à tous

    la ligne complète
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sh.Range("a" & i & ", n" & i & ", o" & i & _
      ", al" & i & ", ad" & i & ", ae" & i & ", af" & _
      i & ", ag" & i & ", ah" & i & ", ai" & i & ", am" & _
      i & ", an" & i & ", ao" & i & ", ar" & i & ", as" & _
      i & ", at" & i & ", ak" & i & ", aj" & i & ", m" & i).Select
    cordialement

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    A quoi te sert la boucle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
           For Each cel In sh.Range("v5:v" & sh.Range("v5").End(xlDown).Row)
                Set recherche = cel.Find(x)
           Next cel
    Ensuite, les cellules que tu colles après copies seront dans des colonne consécutives. Est-ce que tu veux ?
    Si oui, tu peux simplifier ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set sh = Worksheets("data")
    'là tu cherches la dernière ligne de la colonne 1 et lance la recherche sur cette colonne, ok ?
    derli = Columns(1).Find("*", , , , , xlPrevious).Row
          For each Cell in sh.range("A5:A" & DerLig)
                If Cell.offset(0,22).value = x Then _
                sh.Range("a&i, n&i, o&i, al&i, ad&i, ae&i, af&i, ag&i, ah&i, ai&i, am&i, an&i, ao&i, ar&i, as&i, at&i, ak&i, aj&i, m&i").Copy Worksheets("Fully Redeemed").Cells(k, 1)
          Next
    Mais comme je te l'ai dit, le résultat de ta copie se trouvera dans des colonnes consécutives.
    Si tu veux utiliser Find (plus rapide) la syntaxe est différente (!)
    Pour aller vite, un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With sh.range("A5:A" & DerLig)
         Set c = .find(x)
         if not c is nothing then
    sh.Range("a&i, n&i, o&i, al&i, ad&i, ae&i, af&i, ag&i, ah&i, ai&i, am&i, an&i, ao&i, ar&i, as&i, at&i, ak&i, aj&i, m&i").Copy Worksheets("Fully Redeemed").Cells(k, 1)
             else
                  'donnée non trouvée
          endif
    end with
    Bonne après-midi

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut
    Merci à tous pour la rapidité de vos réponses.

    Voila le code que je garde car c'est plus simple pour moi

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Sub test2()
     
    Dim i As Integer
    Dim k As Integer
    Dim derli As Integer
    Dim cel As Range
    Dim sh As Worksheet
    Dim x As String
    Dim recherche As Range
    x = "YES"
    k = 8
     
    Set sh = Worksheets("data")
     
    derli = Columns(1).Find("*", , , , , xlPrevious).Row
            For i = 5 To derli
            Worksheets("data").Activate
                If Cells(i, 22).Value = x Then
                sh.Range("a" & i & ", n" & i & ", o" & i & _
                ", al" & i & ", ad" & i & ", ae" & i & ", af" & _
                i & ", ag" & i & ", ah" & i & ", ai" & i & ", am" & _
                i & ", an" & i & ", ao" & i & ", ar" & i & ", as" & _
                i & ", at" & i & ", ak" & i & ", aj" & i & ", m" & i).Select
                Selection.Copy
                Worksheets("FB Fully Redeemed").Activate
                Cells(k, 1).Activate
                ActiveSheet.Paste
                End If
                k = k + 1
            Next i
        i = i + 1
     
    End Sub
    Le code fonctionne bien mais le probleme est le suivant:

    les cellules que je colle apres copie ne sont pas dans des lignes consécutives et donc j'ai des lignes vident qui s'intercallent.

    J'ai rajouté le code suivant pour supprimer ces lignes mais la encore j'ai une erreur de type mismatch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub SupprimerBlanks()
     
    derli = Columns(1).Find("*", , , , , xlPrevious).Row
     
        For i = derli To 8 Step -1
            If Rows(i).Value = Empty Then
            Rows(i).Delete Shift:=xlUp
            End If
        Next i
     
    End Sub

    Mon erreur est sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Rows(i).Value = Empty Then

  7. #7
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Il faut que tu fasses un collage spécial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveSheet.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            True, Transpose:=False

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut
    J'ai rectifié mon erreur pour les lignes vides qui s'intercallent et je viens de comprendre mon autre erreur, que m'a fai remarquer ouskel'n'or concernant les colonnes consécutives:

    Ensuite, les cellules que tu colles après copies seront dans des colonne consécutives. Est-ce que tu veux ?
    Si oui, tu peux simplifier ton code

    En effet je ne veux pas que les copies de mes cellules soient dans des colonnes consécutives.


    Citation Envoyé par Lou Pitchoun
    Il faut que tu fasses un collage spécial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveSheet.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            True, Transpose:=False
    je viens de le faire mais j'ai une erreur 1004: application defined or object defined error

    J'apporte une précision parceque je n'ai pas été très clair.
    Je veux que mes cellules se collent dans l'ordre que je les ai copié

    Dans Worksheets("FB Fully Redeemed") en colonne A je veux mes cellules de la collone A du Worksheets("data"). En colonne B je veux mes cellules de la colonne "n" du Worksheets("data") et ainsi de suite.

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour,

    adapte ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets(1).Range("a" & i & ",n" & i & ",p" & i).Activate

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

Discussions similaires

  1. [vb.net] erreur dans un code
    Par lou87 dans le forum Windows Forms
    Réponses: 36
    Dernier message: 24/04/2006, 10h56
  2. erreur dans mon code
    Par sacco dans le forum C
    Réponses: 4
    Dernier message: 14/04/2006, 11h50
  3. [VBA][Débutant][export]erreurs dans mon code?
    Par Christophe93250 dans le forum Access
    Réponses: 4
    Dernier message: 06/01/2006, 19h52
  4. Erreur dans du code
    Par claralavraie dans le forum ASP
    Réponses: 4
    Dernier message: 23/12/2005, 09h32
  5. [VBA] Erreur dans un code. Hierarchie DAO.
    Par snoopy69 dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/10/2005, 22h28

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