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 de concaténation [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut problème de concaténation
    Bonjour à tous,

    J'ai un petit souci de concaténation :

    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
    Sub Boucle()
    Dim i As Integer, j As Integer
    Dim Plage As Range, Cellule As Range
     
    Sheets("GOOD").Activate
    i = 4
    j = 1
        Do
            If i > 15000 Then Exit Do
                If (Sheets("GOOD").[M & i] = 1) Then
                    Sheets("GOOD").Select
                    Range("E" & i & ":G" & i).Select
                    Selection.Copy
                    Sheets("test").Select
                    Range("D" & j).Select
                    ActiveSheet.Paste
                End If
                j = j + 1
                i = i + 1
        Loop While Cells(i, 2) <> ""
     
    End Sub
    le probleme se situe à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (Sheets("GOOD").[M & i] = 1) Then
    Il ne veut pas prendre le code [M & i], j'ai essayé aussi ["M" & i ] mais sa ne fonctionne pas non plus , l'erreur et la suivante :

    Erreur d'éxécution '13':

    Incompatibilité de type
    Voila en espérant avoir été le plus clair possible.

    Cordialement

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Bonjour,
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("GOOD").Range("M" & i) = 1
    Sinon ton code pique les yeux avec tes slect et ton ecran doit bouger dans tout les sens essaye ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("GOOD").Range("E" & i & ":G" & i).Copy 
    Sheets("test").Range("D" & j).paste
    Ou mieu en une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("GOOD").Range("E" & i & ":G" & i).Copy Sheets("test").Range("D" & j)

  3. #3
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    En faisant ça, Krovax, tu compares aussi un string et une valeur. A peut pas marcher
    Si ça marche, un exemple avec 1 en H1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub i()
    If Range("H1") = 1 Then
    MsgBox "Oui"
    Else
    MsgBox "non"
    End If
    End Sub
    Edit : marche aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Range("H1") = "1" Then

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Visiblement excel est suffisamment malin pour que je n'ai pas besoin de réfléchir trop loin (heureusement d'ailleurs )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    i = 1
    If Range("a" & i) = 1 Then
    MsgBox "Ca marche"
    End If
    Ce code fonctionne même si la cellule contient '1 (ce qui effectivement revient à coup sur à comparer un valeur a une chaine de caractère, mais il faut croire que ceux qui l'ont pondu, on pensait a nous)

  5. #5
    Membre Expert
    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
    Par défaut
    Salut jackall et le forum
    [A1] est une notation abrégée de Range("A1").
    [M & i] revient donc à écrire Range("M & i"). Étonnant qu'Excel ait du mal à comprendre
    Excel fait toujours ce qu'on lui demande... rarement ce que l'on veut!
    Une autre proposition pour ta macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Boucle()
    Dim X As Long
    'Sheets("test").Range("D1:F" & Range("A1").SpecialCells(xlCellTypeLastCell).Row).ClearContents
    Sheets("GOOD").Activate
     
    For X = 4 To Range("M65536").End(xlUp).Row
        If Range("M" & X) = 1 Then
            Range("E" & X & ":G" & X).Copy Sheets("test").Range("D65536").End(xlUp)(2)
    Next X
    'Sheets("test").Range("D1:F1").Delete
    End Sub
    A+

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    Re bonjour à tous,

    Un grand merci à vous pour avoir donné tant de solution, et désolé d'avoir été si long à repondre, étant en stage je viens d'avoir la visite d'un de mes profs pour faire un peu le point ^^

    sinon j'ai modifier le code qui pique les yeux avec un mixte de Krovax et Gorfael :


    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
    Sub Boucle()
    Dim i As Integer, j As Integer
    Dim Plage As Range, Cellule As Range
     
    Sheets("GOOD").Activate
    i = 4
    j = 1
     
        Do
            If i > 15000 Then Exit Do
                If (Sheets("GOOD").["M & i"] = 1) Then
                    Sheets("GOOD").Range("E" & i & ":G" & i).Copy
                    Sheets("test").Range("D" & j).Paste
                End If
                j = j + 1
                i = i + 1
     
        Loop While Cells(i, 2) <> ""
    End Sub
    une fois lancé, aucun message d'erreur, mais je n'ai aussi aucun résultat, il ne me colle rien dans la feuille "test" ...

    lorsque j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("GOOD").Range("E" & i & ":G" & i).Copy
    c'est bien la ligne de E&i à G&i je ne me suis pas trompé ... ?

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loop While Cells(i, 2) <> ""
    cela peut se traduire en : jusqu'à ce qu'il y est une cellule vide dans la 2ème colone c'est bien cela?

    merci pour votre attention
    Cordialement

  7. #7
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Utilises le debuggueur pour voir là ou tu passes et là ou tu ne passes pas.

  8. #8
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    ben le soucis c'est que j'ai utilisé le debogueur et il n'y a aucune erreur, mais rien de collé ...

  9. #9
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Sheets("GOOD").["M & i"] = 1)
    J'ai du mal a croire que cela fonctionne a mon avis tu ne rentre jamais dans ton bloque if


    essaye un bon vieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Sheets("GOOD").Range("M" & i) = 1)

  10. #10
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    alors je viens de faire la modif avec ta solution Krovax, et maintenant l'erreur se situe à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("test").Range("D" & j).Paste
    je ne comprend absolument pas pourquoi étant donné que tout à l'heure il n'y avait pas d'erreur, ou alors comme tu l'a souligné, je ne rentrais pas dans mon bloque if et du coup je ne pouvais pas voir l'erreur ...

  11. #11
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    ben le soucis c'est que j'ai utilisé le debogueur et il n'y a aucune erreur, mais rien de collé ...
    Saperlipopette le debuggueur n'est pas la seulement pour voir les erreurs mais aussi pour controler les valeurs et savoir si tu passes dans tes controles :
    pour voir là ou tu passes et là ou tu ne passes pas.

  12. #12
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Sans trop de conviction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                   Sheets("GOOD").Range("E" & i & ":G" & i).Copy  Sheets("test").Range("D" & j & ":F" & j)
    Vérifie que le nom de ton onglet est bien test et qu'il n'y a pas un espace de perdu quelque part

    Ps : je préfère copier directement au bon endroit sans passer par le presse papier ca évite d'avoir a le vider

  13. #13
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    alors je viens de faire la modif avec ta solution Krovax, et maintenant l'erreur se situe à la ligne :
    Attention parfois les erreurs pourraient se mettre à parler !

    Edit : plus sérieusement elle dit quoi l'erreur ?

    sans passer par le presse papier ca évite d'avoir a le vider
    Ca evite de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.cutcopymode = false

    Sinon pourquoi faire un copy si on a la plage, un = peut convenir non ?

  14. #14
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    en utilisant le debogeur, il parcourt entièrement le code sans sauter une ligne, mais il s'arrete sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("test").Range("D" & j).Paste
    même en modifiant en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("GOOD").Range("E" & i & ":G" & i).Copy  Sheets("test").Range("D" & j & ":F" & j)
    et l'erreur me dit :

    erreur d'éxécution '438':

    Propriété ou méthode non gérée par cet objet

  15. #15
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    ou lala je fatigue je n'avais pas vu ce qui saute aux yeux .paste n'existe pas pour l'objet RAnge


    Edit: avec l'erreur c'est tout de suite plus facile. Merci.

    Essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("GOOD").Range("E" & i & ":G" & i).Copy  destination:=Sheets("test").Range("D" & j & ":F" & j)

  16. #16
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    c'est parfait, cela fonctionne vraiment bien, sa fait vraiment plaisir d'avoir des personnes qui nous donne un coup de main.

    vraiment merci à tous pour votre aide et pour votre patiente.

    Cordialement

  17. #17
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    Bonjour à tous,

    Je revien ici pour une autre petite question, toujours en correspondance avec ce qui précède.
    Une foi les données copiées, j'arrive à des résultats comme ceci dans ma feuille excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
         A   B   C   D   E
    1        3 
    2        5
    3   2        4
    4   7        3
    5        6
    ( J'ai été obligé de mettre ceci dans les balises code car sinon je perdais la mise en forme )

    ou encore directement comme cela mais sa dépend des fichiers que je copie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
         A   B   C   D   E
    1        3   4
    2        5   3
    3        6
    4           
    5

    Et moi je voudrais bien faire ceci avec le premier exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
         A   B   C   D   E
    1    2   3   4
    2    7   5   3
    3        6
    4           
    5
    Mais je n'ai absolument aucune idée de la façon de faire.
    Pourriez vous me donner un coup de main ?

    Cordialement

  18. #18
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Le mieux est sans doute de mettre ce post en résolu et d'ouvrir un nouveau post, ainsi un problème = un sujet c'est plus clair.

    Mon conseil pour ce que tu demande serait de faire une recherche sur le forum sur les cellules vides il existe plusieurs solution qui peuvent te convenir, un boucle sur les cellules, l'utilisation de specialcells, il y a d'ailleur un post récent sur le sujet, si je le retouve je reviens coller le lien ici.

  19. #19
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Sans avoir tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim cel as range
    for each cel in Range("A1:D20") 'tu met ta zone avec le taleau
    if isempty(cel) then : cel.Delete shift:=xlUp
    next cel
    Pour avoir la zone avec le tableau tu peux chercher la dernière ligne et dernière colonne
    Dernière ligne et la dernière colonne renseignées d'une feuille

    Edit : je vien de voir la remarque d'aalex c'est vrai qu'il y a un post qui utilisé les specialcell ca doit dater d'un jour ou deux max

  20. #20
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    merci à vous, je vais essayer de retrouver ce post et de voir avec ce que vous me proposer ^^

    un grand merci

    cordialement

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème de concaténation / conversion
    Par ero-sennin dans le forum C
    Réponses: 5
    Dernier message: 21/03/2006, 11h06
  2. [Tableaux] problème syntaxe concaténation variable
    Par mussara dans le forum Langage
    Réponses: 3
    Dernier message: 01/03/2006, 11h24
  3. Problème de concaténation sous EXCEL
    Par ikki78 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/11/2005, 17h17
  4. [Tableaux] problème de concaténation
    Par ludovik dans le forum Langage
    Réponses: 3
    Dernier message: 13/09/2005, 13h24
  5. Problème de concaténation
    Par Proktor dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 06/07/2005, 15h00

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