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 :

[VBA] Bug dans Copier/Coller automatique


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 51
    Points : 33
    Points
    33
    Par défaut [VBA] Bug dans Copier/Coller automatique
    Bonjour

    Voila encore un probléme, ce coup ci je voudrais copier un texte contenue en Feuil4 plusieurs fois sur une même ligne de la feuil2 avec des intervalle régulier.

    Voici mon code
    Il comporte des erreurs mais étant débutant j'ai beaucoup de mal à les trouver.

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Sub testy2()
     
    'Declaration variable:
    '---------------------
    Dim NumControle As Long              
    Dim NumFrequence As Long           'C'est la frequence de collage au sein de la ligne
    Dim Temp As Long
    Dim DecalageALOrigine As Integer   'C'est l'écart avec lequel les répétion de collage vont commencer    
     
    'Declaration des compteur
    Dim i As Integer
    Dim j As Integer
     
    'Init de svariable:
    '------------------
    NumControle = 0
    NumFrequence = 0
    DecalageALOrigine = 0
     
    '
     
    '-->Boucle de lecture des tâches préventives
    MsgBox "i init=" & i
    For i = 6 To 150
     
        Temp = Worksheets("Feuil2").Range("A1").Offset(i, 1).Value
     
        '-->Numéro de tâches = numùéro de lignes listing
        Worksheets("Feuil4").Range("A1").Offset(Temp, 3).Select
        Selection.Copy
     
     
        '-->Demarage du collage de la tâche au frequence voulu + decalage
        Worksheets("Feuil2").Activate
        DecalageALOrigine = Worksheets("Feuil2").Range("A1").Offset(i, 3).Value
     
        j = 4 + DecalageALOrigine
     
            While j < 52
               '-->Collage au frequence
               Worksheets("Feuil2").Range("A1").Offset(i, j).Select
               ActiveSheet.Paste
               j = j + NumFrequence
        Wend
    Next
     
    End Sub

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Un premier constat: j = j + NumFrequence
    avec NymFrequence=0
    ne s'incrémentera jamais, et tu te trouve avec une boucle infinie.

    certes des amélioration au code sont possible (sans les select)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Oui effectivement #2 c'est une faute de frappe il suffit de el remplacer par un entier au quelconque, 4 par exemple c'est ce qui va me donner l'écartement entre chaque collage (nombre de colonne).

    Reste qu'il me dit que c'est une erreur inconnue, et que celle ci n'y figure pas car c'est pas a execution mais a la compilation que ca bug.

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    J'ai essayé de supprimer les select

    j'ai mis 2 msgbox pour vérifier le contenu de Temp et j
    à tester
    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
    Sub testy3()
    Dim Temp As Integer, i As Integer, j As Integer, NumFrequence As Integer
    Dim ws2 As Worksheet, ws4 As Worksheet
     
    Application.ScreenUpdating = False
    NumFrequence = 4
    Set ws2 = Worksheets("Feuil2")
    Set ws4 = Worksheets("Feuil4")
    With ws2
        For i = 6 To 150
            Temp = .Range("B" & i + 1).Value
            MsgBox Temp
            j = 4 + .Range("D" & i + 1).Value
            MsgBox j
            While j < 52
                .Cells(i, j).Value = ws4.Range("D" & Temp + 1).Value
                j = j + NumFrequence
            Wend
        Next i
    End With
    Set ws2 = Nothing
    Set ws4 = Nothing
    End Sub
    à l'aide du pas à pas (F8), tu peux suivre l'évolution de tes variables

    EDIT: j'ai relu ton post, j'ai rectifié le code; à tester

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Voila je vien de tester et j'ai une erreur:

    Voici le texte de la fenetre d'erreur:
    Eurreur d'exécution '13':
    incompatibilité type
    Voici ou il me la localise:
    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
    Sub testy3()
    Dim Temp As Integer, i As Integer, j As Integer, NumFrequence As Integer
    Dim ws2 As Worksheet, ws4 As Worksheet
     
    Application.ScreenUpdating = False
    NumFrequence = 4
    Set ws2 = Worksheets(2)
    Set ws4 = Worksheets(3)
    With ws2
        For i = 6 To 150
            Temp = .Range("B" & i + 1).Value
            MsgBox Temp
            j = 4 + .Range("D" & i + 1).Value
            MsgBox j
            While j < 52
                .Cells(i, j).Value = ws4.Range("D" & Temp + 1).Value
                j = j + NumFrequence
            Wend
        Next i
    End With
    Set ws2 = Nothing
    Set ws4 = Nothing
    End Sub

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    As-tu des données seulement des entiers de la plage B7:B151?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    OUi il n'y a que des entiers dans cette plage.

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Encore, je ne fais que modifier ton code
    il faut s'assurer que NumFrequence contient un entier >0 pour toutes les lignes de 4 à 144 de la colonne C
    Essayes comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With Worksheets("Feuil2")
        For i = 4 To 144
            NumControle = .Range("E" & i).Value
            NumFrequence = .Range("C" & i).Value
            DecalageOrigine = .Range("D" & i).Value
     
            'Copie des interventions
            For j = 7 To 51 Step NumFrequence
                .Cells(i, j) = 1
            Next j
        Next i
    End With

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Oui tu avais raison pour le deuxieme code mais il y avais effectivement un entier qui etais pas la du coup il comprenait plus.

    Reste que le premier code que tu as posté ne marche pas

    peut etre parce que tu mis ".Range(...)" au lieu de "Range(....)"

  10. #10
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    en général, au lieu d'activer la feuille pour travailler dessus, il est mieux d'indiquer la feuille à qui se rapporte la plage de cellule.
    ici par exemple on veut écrire dans les cellules a1 et a2 de feuil1
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sheets("feuil1").activate
    range("a1").value=5
    range("a2").value="toto"
    ....
    sans activer la feuille, on peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sheets("feuil1").range("a1")=5
    sheets("feuil1").range("a2")="toto"
    ce qui revient à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With sheets("feuil1")
       .range("a1")=5
       .range("a2")="tot"
    end with
    .

    Pour le premier code, je ne vois pas ton classeur pour pouvoir tester
    as-tu fais le pas à pas (à l'aide de la touche F8) pour pouvoir connaitre le déroulement du code et où ça bloque.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Il m'est impossible d'utiliser F8 ca bloque

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    sans fichier exemple, je ne saurai avancer dans l'aide.
    si tu peux joindre un extrait (non confidentiel) de ton fichier

  13. #13
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Voila désolé du retard mais je clôture la question.

    "mercatog" avait bien raison pour sa solution en #11, merci beaucoup dailleur de m'avoir dépanné. Le souci venait de mon coté, en effet c’était juste une grosse faute de d’inattention (de ma part) qui faisait bloquer le programme (Boucle infinie a l'ouverture de la sheet, gg l'abrutis).

    Cordialement
    Novo

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

Discussions similaires

  1. Outil VBA sur ArcGis : Copier/coller les lignes dans une table attributaire
    Par Alexiis dans le forum SIG : Système d'information Géographique
    Réponses: 2
    Dernier message: 26/09/2013, 16h15
  2. Réponses: 1
    Dernier message: 27/01/2011, 22h30
  3. Réponses: 1
    Dernier message: 19/12/2006, 16h12
  4. [VBA-E]échec copier-coller entre 2classeurs
    Par touche_a_tout dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 06/12/2006, 23h22
  5. VBA-E: Pb copier-coller entre Excel et .csv
    Par tiger118 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2006, 11h08

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