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 :

Problème macro erreur code


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Points : 16
    Points
    16
    Par défaut Problème macro erreur code
    Bonjour à tous et merci d'avance pour les réponses.

    Donc voici mon problème j'ai en fait une macro qui fonctionne mais qui me pose certains soucis pour une modification, voici le code.

    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
    Sub Compacoller
     
    Dim i, j As Integer
     
        Sheets("analyse").Select
        Range("A1").End(xlDown).Select
            i = ActiveCell.Value
        Sheets("FI").Select
        Range("A1").End(xlDown).Select
            j = ActiveCell.Value
     
                If i >= j Then
     
                ElseIf i < j Then
                Sheets("FI SNCF").Select
                Cells.Find(what:=i).Select
                ActiveCell.Offset(1, 1 - ActiveCell.Column).Select
                Range(Selection, Selection.End(xlDown)).EntireRow.Copy
                Sheets("analyse").Select
                Range("A1").End(xlDown).Offset(1, 0).Select
                ActiveSheet.Paste
                End If
     
    End Sub
    En fait le soucis est déjà que lorsque i>=j alors je souhaite stopper la macro car aucune cellule n'a besoin d'etre copié dans l'autre onglet.

    Si i<j alors la les cellules nouvelles se trouvant dans l'onglet "FI sont copiées puis collées dans l'onglet analyse. Or il arrive un cas ou lors de la recherche de i excel me retourne une erreur en me disant qu'il n'a pas trouvé la valeur de i dans l'onglet "FI".
    Lorsque ce cas ce présente j'aimerai pouvoir faire autre chose à savoir copier toutes les lignes de l'onglet FI et les coller a la suite des lignes de l'onglet "analyse"

    P.S : La recherche de i est infructueuse car kelkes fois lors de la mise à jour de l'onglet "FI" la ligne ou se trouve la valeur de i est effacée du fait justement de la mise à jour, par exemple :

    1er cas, i=4858 ("analyse") j=4858 ou 4551 ("FI") arret macro (il n'a rien a faire)
    2eme cas, i=4858("analyse") j=4995("FI"), recherche de i dans ("FI"), i trouvé, copie des lignes de 4858 à 4995 dans '"FI") collage dans ("analyse") à la suite des lignes présentes.
    3eme cas, i=4858 ("analyse") j=5112 ("FI"), recherche de i dans ("FI"), i non trouvé, copie de toutes les lignes de ("FI"), collage dans ("analyse") à la suite des lignes présentes.

    J'espère avoir été clair.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut yayasiano et le forum
    Comprends pas l'explication, par rapport à la macro. Là, on travaille sur A. Dans le reste de ta macro on ne travaille pas forcément sur A, alors qu'on copie la ligne ??? on travaille sur "FI SNCF", mais pas dans tes explications ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Compacoller()
    Dim i As Long, j As Long
    i = Sheets("analyse").Range("A1").End(xlDown).Row
    j = Sheets("FI").Range("A1").End(xlDown).Row
    If i >= j Then Exit Sub
    'traitement de i<j
    End Sub
    Le début : i doit avoir aussi la dénomination du type de variable. I et J étant des lignes, il est préférable d'utiliser une variable qui ne plantera pas si le nombre de ligne dépasse les 32767 (2^15=> sur 2003 tu es limité à 65536).
    A+

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    en fait FI et FI SNCF sont le meme onglet!!! désolé...

    Et je travaille toujours sur A ceci étant la seule liaison que j'ai entre les deux onglets par contre lorsque je copie les données ce sont les lignes entières qu'il me faut.
    Concernant ma variable elle dépassera sans doute les 32000 et quelques donc merci du conseil je doit changer le Integer par un koi en fait ??
    Et concernant le problème tu n'a toujours pas compris ??
    Voici quelques explications qui je l'espère t'aideront:

    Je pense que tu as bien compris les 3 cas qui doivent être pris en compte par ma macro. Le fait est que le cas 3 qui intervient lorsque la valeur de i n'est pas trouvée dans l'onget "FI SNCF" est liée au cas 2 car dans ce cas 2 je cherche la cellule dont la valeur est identique à i. Si il ne trouve pas cette valeur le code beugue.

    Merci d'avance pour ta réponse jespere.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut yayasiano et le forum
    Concernant ma variable elle dépassera sans doute les 32000 et quelques donc merci du conseil je doit changer le Integer par un koi en fait ??
    Je les ai déclarés en Long, parce que j'avais fait la macro sans l'analyser . C'est pas la ligne, mais le contenu de la dernière cellule, et la déclaration en intéger, allié à des noms qu'on attribue généralement à des lignes...

    Pour définir tes variables, regarde dans l'aide à "Résumé des types de données" (ou tu surlignes integer => F1 et tu le cherche dans "voir aussi)

    La macro
    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
    Sub Compacoller()
    'Déclarations -----------------------------------
    Dim i As Long, j As Long
    Dim F1 As Worksheet, FA As Worksheet
    Dim Cel As Range
    'MEI --------------------------------------------
    Set F1 = Sheets("F1")
    Set FA = Sheets("analyse")
    ' Validité --------------------------------------
    i = FA.Range("A" & FA.Rows.Count).End(xlUp)
    j = F1.Range("A" & F1.Rows.Count).End(xlUp)
    If i >= j Then Exit Sub
    'traitement de i<j ------------------------------
    'Recherche de i dans F1
    Set Cel = F1.Range(F1.[A1], F1.Range("A" & F1.Rows.Count).End(xlUp)).Find(i, LookIn:=xlValues)
    'cel= cellule dont le contenu=i dans la plage A1:dernière de A de F1
    If Cel Is Nothing Then
    'Si cel est vide
        F1.Range(F1.[A1], F1.Range("A" & F1.Rows.Count).End(xlUp)).EntireRow.Copy _
                                        FA.Range("A" & FA.Rows.Count).End(xlUp)(2)
        'copier toutes les lignes de F1 de la ligne 1 à la dernière non vide en A dans la feuille
        'FA à partir de la ligne qui suit la dernière non vide en A
    Else
        F1.Range(Cel.Offset(1, 0), F1.Range("A" & F1.Rows.Count).End(xlUp)).EntireRow.Copy _
                                        FA.Range("A" & FA.Rows.Count).End(xlUp)(2)
        'copier toutes les lignes de F1 de la ligne suivant la ligne contenant i en A à la dernière
         'non vide en A dans la feuille FA à partir de la ligne qui suit la dernière non vide en A
    End If
    J'ai mis des commentaires, mais si ça ne suffit pas demande des explications supplémentaires.
    Je n'aime pas utiliser xlDown, mais tu peux adapter
    .Copy n'accepte pas .Offset() pour la destination, mais End(xlUp)(2)
    revient à End(xlUp).offset(1,0), et il est accepté par .copy

    Je suis parti du principe que tu ne voulait pas recopier la ligne contenant l'égalité, mais sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        F1.Range(Cel.Offset(1, 0), F1.Range("A" & F1.Rows.Count).End(xlUp)).EntireRow.Copy _
                                        FA.Range("A" & FA.Rows.Count).End(xlUp)(2)
    devient, en la recopiant dessus l'existante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        F1.Range(Cel, F1.Range("A" & F1.Rows.Count).End(xlUp)).EntireRow.Copy _
                                        FA.Range("A" & FA.Rows.Count).End(xlUp)
    A+

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    J'ai bien compris ce que tu veux me dire mais ma macro fonctionne bien concernant mes copies de cellules.
    Ce que je veux juste en fait c ke le code ne beugue pas lorsqu'il ne trouve pas la valeur de i dans l'autre onglet mais ke je puisse faire autre chose à savoir enchainer sur le 3eme cas c'est tout

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup en fait ta macro du haut m'a aidé vraiment à ce que je voulais cela fonctionne parfaitement tout les cas sont pris en compte encore merci.

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Problème résolu?

    Bouton , en bas de discussion!

    Merci

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

Discussions similaires

  1. Problème de mémoire (code erreur: 0403-031)
    Par bertinblb dans le forum AIX
    Réponses: 1
    Dernier message: 06/05/2013, 13h03
  2. Problème d'erreur code
    Par Vanessa48 dans le forum Android
    Réponses: 13
    Dernier message: 12/02/2011, 09h44
  3. [SQLServer 2008 R2] Problème de blocage - code erreur 1222
    Par Marco46 dans le forum Développement
    Réponses: 5
    Dernier message: 03/02/2011, 12h07
  4. [XL-2007] problème dans du code en VBA dans une macro
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/12/2010, 19h05
  5. Réponses: 24
    Dernier message: 27/01/2009, 10h18

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