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 avec la méthode "RANGE" [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 33
    Par défaut Problème avec la méthode "RANGE"
    Bonjour à tous!!!

    Je viens vers vous car j'ai un petit souci avec un petit code vba,étant novice dans cet art j'aurais besoin d'une petite aide s'il vous plait.

    Mon souci:je souhaiterais sur une meme feuille Excel coller des données sur différentes plages de cellules.
    Par exemple:mon code permet via un UserForm de coller des données sur la Feuil2 à partir de la cellule A2,et j'aurais aimé coller aussi des données en H2 et P2.
    Le message d'erreur afficher est "impossible de coller les infos car les zones copier et de collage sont de formes et tailles différentes..."

    Donc j'ai essayé d'utiliser la méthode Range sous toutes ces formes ,impossible de réussir.

    voici mon codesouhaitant coller à partir de la cellule P2)

    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
    Private Sub CommandButton13_Click()
    Dim Tabl(): j = 0
        With Me.ListBoxLocataire
            For i = 0 To .ListCount - 1
                If .Selected(i) = True Then
                    j = j + 1
                    ReDim Preserve Tabl(0 To j)
                    Tabl(j) = .List(i, 0)
                    .Selected(i) = False
                End If
            Next
        End With
        Sheets("EXTRACTION").Activate
        Range([A1], [A65536].End(xlUp)).Select
        Set Plg = Selection
        For w = 1 To j
            For Each cell In Plg
                If CStr(cell.Value) = Tabl(w) Then
                    Rows(cell.Row & ":" & cell.Row).EntireRow.Select
                    Set maPlage = Selection
                    'LE METTRE EN P2
                    Set Destination = Sheets("URGENCE").Range("P65536").End(xlUp).Offset(1, 0)
                    maPlage.Copy Destination
                    Exit For
                Else
                End If
            Next cell
        Next w
        Call Reaffiche
    End Sub
    Merci beaucoup pour votre aide futur!!!!

  2. #2
    Expert éminent 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
    Par défaut
    Sans tester le code (avec des Select et activate) non nécessaires; tu veux copier une ligne entière dans une cellule de la colonne P
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Destination = Sheets("URGENCE").Range("P65536").End(xlUp).Offset(1, -15)
    c'est à dire la cellule correspondante de la colonne A

  3. #3
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 33
    Par défaut
    SLT mercatog,

    J'ai essayé ton code cad en modifiant mon offset ,et désolé ça ne fonctionne pas ,il me le colle la ligne entiere à partir de A2.
    C'est exactement ce que tu m'as décrit ,c'est de coller à partir de P2 la ligne entière,puis qu'il s'incrémente comme dans A pour P.

    Merci de ta réponse en tout cas!

  4. #4
    Expert éminent 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
    Par défaut
    Non, je n'avais pas répondu
    J'avais montré que tu ne peux pas copier une ligne entière (256colonnes en excel 2003) et la coller à partir de la colonne P
    tu veux copier une plage de 256 colonnes dans une autre plage ne contenant que 241 colonnes.

    J'ai modifié ton code sans pouvoir tester ce que tu veux faire. d'abord, déclaration des variables, ensuite choix des noms des variables, ensuite indenter le code, virer les Select et activate et enfin libérer les plages.
    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
     
    Private Sub CommandButton13_Click()
    Dim i As Integer, j As Integer, w As Integer
    Dim Plg As Range, MaPlage As Range, Cel As Range, Destin As Range
    Dim Tabl()
     
    With Me.ListBoxLocataire
        For i = 0 To .ListCount - 1
            If .Selected(i) = True Then
                j = j + 1
                ReDim Preserve Tabl(0 To j)
                Tabl(j) = .List(i, 0)
                .Selected(i) = False
            End If
        Next
    End With
    With Sheets("EXTRACTION")
        Set Plg = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp))
        For w = 1 To j
            For Each Cel In Plg
                If CStr(Cel.Value) = Tabl(w) Then
                    Set MaPlage = .Range("A" & Cel.Row & ":P" & Cel.Row)    '???? ICI à VOIR ce que tu veux copier
                    Set Destin = Sheets("URGENCE").Range("P65536").End(xlUp).Offset(1, -15)  '??? Où tu veux coller?
                    MaPlage.Copy Destin
                    Set MaPlage = Nothing
                    Set Destin = Nothing
                    Exit For
                End If
            Next Cel
        Next w
        Set Plg = Nothing
    End With
    Call Reaffiche
    End Sub
    PS: j'ai mis des questions en commentaire.

    Edit: Tu peux utiliser Find (F1 pour la synthaxe) au lieu de la boucle sur les cellules de la colonne A

  5. #5
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 33
    Par défaut
    re,

    Ah ok excuse moi mercatog,si j'ai bien compris ce que tu m'as expliqué,si je ne copie pas la ligne entière mais seulement le nombre de colonnes (donc le nombre d'éléments) ça pourrait fonctionner?!

    j'essaye ton code et je te tiens au courant!!merciiiiiii

    Bonjour Gorfael,

    Oui justement mercatog m'expliquer cela,donc sous la version 2007 ça peut fonctionner?et si je choisis q'un nombre de colonnes limités ça peut marcher?

    merci

  6. #6
    Expert éminent 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
    Par défaut
    Tu adaptes les 2 lignes où j'ai mis des questions en commentaire dans le code

  7. #7
    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 mikapwel2004 et le forum
    Pour avoir accès aux balises de code, clique simplement sur le # de la barre de mise en forme (ou édite un poste qui en contient et regade).
    Le message d'erreur affiché est "impossible de coller les infos car les zones copier et de collage sont de formes et tailles différentes..."
    Les messages d'erreur de microsoft ne veulent pas toujours dire ce qu'ils "expliquent"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Range([A1], [A65536].End(xlUp)).Select
    Set Plg = Selection
    For w = 1 To j
        For Each cell In Plg
            If CStr(cell.Value) = Tabl(w) Then
                Rows(cell.Row & ":" & cell.Row).EntireRow.Select
                Set maPlage = Selection
                'LE METTRE EN P2
    Hormis les select/selection qui ne servent à rien à part rendre illisible un code et à le ralentir...
    je copie une ligne dans MaPlage. Soit, sous les versions avant 2007, 256 cellules. et je veux les copier à parir de P, jusqu'à la dernière soit mettre 256 cellules sur 240. À moins d'avoir un bon chasse-pied...
    Regarde dans l'aide à Resize, propriété
    A+

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

Discussions similaires

  1. [XL-2010] Problème avec la méthode find d'un objet Range dans une zone filtrée
    Par stargates01 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/02/2014, 23h27
  2. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59
  3. Problème avec la méthode pack()
    Par tomca dans le forum Langage
    Réponses: 5
    Dernier message: 15/09/2005, 10h58

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