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 :

Range de destination pour coller, avec colonne variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut Range de destination pour coller, avec colonne variable
    Bonjour à tous,

    Alors voilà une après midi que je galère sur ce problème que je vais essayer de vous exposer le plus clairement possible.

    Dans une feuille destination, je souhaite copier des données venant de ma feuille source. La commande pour copier les données fonctionne parfaitement, en revanche celle pour coller me pose problème :

    La range de destination qui est C3 ci-dessous, doit pouvoir être variable au niveau de la colonne, afin de fonctionner dans la boucle. Or ce C3 se transforme en D3 puis E3 etc..
    Car la quantité de colonne dont je copie colle les données n'est pas défini en taille, et peut changer dans le temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("blablabla").Worksheets("blablabis").Range("C3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Je n'arrive pas à trouver de syntaxe qui fonctionne pour faire cela, si vous avez des pistes pour y arriver ?

    merci de votre aide

  2. #2
    Membre éprouvé Avatar de Wololol
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 104
    Par défaut
    Pour faire varier la colonne, tu peux utilisé Cells(ligne,colonne) ainsi tu peux choisir la colonne directement.

    Si tu copie plusieurs colonnes, tu peux utiliser un Range avec deux Cells à l'intérieur, comme l'exemple ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(x,y),Cells(z,k))
    Ainsi tu pourra faire varier la plage de cellule destination.

    J'espère que cela t'aura aidé.

    Bonne fin de journée.

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par kyros21 Voir le message
    La range de destination qui est C3 ci-dessous, doit pouvoir être variable au niveau de la colonne, afin de fonctionner dans la boucle. Or ce C3 se transforme en D3 puis E3 etc..
    Car la quantité de colonne dont je copie colle les données n'est pas défini en taille, et peut changer dans le temps.
    Est-ce que ce qui varie c'est la position où placer les données ou est-ce la taille de la zone à copier ?

    Si c'est le second cas, pas de problème : pour un PasteSpecial tout comme dans Excel, il suffit de préciser la cellule en haut à gauche.

    Si c'est le premier cas, il faudrait en dire plus sur les conditions pour sélectionner la position de destination.
    La première case libre vers la droite à partir de C3 ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    Bonjour,

    Désolé pour le retard, alors oui c'est le premier cas c'est la position qui varie on part de C3 en premiere pour passer en D3 etc etc...

    j'ai donc une boucle qui permet de modifier la variable qui contient le numéro de colonne, en fonction du nombre de données disponible dans le fichier source.

    Voici un extrait de mon code ou j'ai gardé que les lignes qui posent problèmes pour rendre cela plus clair, c'eston donc le range(cells(4,j)) qui pose problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    j = 3
        For i = 4 To wksfichier.Range("A4").End(xlDown).Row
            'Copie de la colonne de chaque personne
            Range("D3:D400").Copy
            Workbooks("Synthèse pointage.xlsm").Worksheets("Imputations").Range(Cells(4, j)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            j = j + 1

    merci pour votre aide

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    ben en meme temps c'est pas trop etonnant

    rang(xxxx) ---> les xxx doivent etre le string de l'address
    toi
    .Range(Cells(4, j))
    ce qui donne
    .range(valeur de la cellule) car sans suffixe c'est le ".value" qui est pris en compte

    autrement dit seulememt cells(4,j) .paste.......suffit car la on on est sur un object range ou cells comme tu veux

    autrement dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    j = 3
        For i = 4 To wksfichier.Range("A4").End(xlDown).Row
            'Copie de la colonne de chaque personne
            Range("D3:D400").Copy
            Workbooks("Synthèse pointage.xlsm").Worksheets("Imputations").Cells(4, j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            j = j + 1
    tout simplement
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    Merci beaucoup Patricktoulon, ça fonctionne parfaitement. Maintenant que vous me l'expliquez ça tombe sous le sens , je suis allé chercher un peu compliqué pour rien.

    Bref, le code fonctionne quand je l'active en pas à pas, mais quand je fais tourner ma boucle, celle-ci fait planter Excel à chaque fois. Pourtant rien de fou dans ce code, je ne vois pas d'ou ca vient.
    Je suis en train d'essayer de clarifier un peu le code en parallèle de ce message, alors soyez indulgent sur l'écriture .

    merci de votre aide.

    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
    Sub Mise_a_jour()
        Static wksfichier As Worksheet
        Static wksimput As Worksheet
        Dim position As String
     
    Application.ScreenUpdating = False
     
    Set wksfichier = Worksheets("Fichiers disponibles")
    Set wksimput = Worksheets("Imputations")
        j = 3
        wksimput.Range("C3:ZZ10000").ClearContents
        For i = 4 To wksfichier.Range("A4").End(xlDown).Row
     
            'Ouverture et desactivation des alertes pour mise à jour des classeurs
            Application.Workbooks.Open wksfichier.Cells(i, 1).Value, UpdateLinks:=0
            'Recopie du nom de la personne
            Cells(1, 1).Copy
            Workbooks("Synthèse pointage.xlsm").Worksheets("Imputations").Cells(3, j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            'Copie de la colonne de pointage de chaque personne
            Range("D3:D400").Copy
            Workbooks("Synthèse pointage.xlsm").Worksheets("Imputations").Cells(4, j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            'Désactivation des alertes à la fermeture
            Application.DisplayAlerts = False
            'fermeture du classeur
            Workbooks(Workbooks("Synthèse pointage.xlsm").Worksheets("Fichiers disponibles").Cells(i, 2).Value).Close SaveChanges:=False
            'Activation des alertes à la fermeture
            Application.DisplayAlerts = True
            j = j + 1
        Next i
     
           Columns("C:ZZ").AutoFit
    End Sub

Discussions similaires

  1. [XL-2013] Range avec colonnes variables
    Par lulu85 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/01/2017, 18h44
  2. [XL-2013] Copier coller en valeurs avec colonne variable
    Par Mel33 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/12/2016, 19h18
  3. [XL-2007] rechercheV avec colonne variable
    Par lokura dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2012, 17h58
  4. GridView UpdateMethod avec colonnes variables
    Par laurent_diep dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/10/2010, 23h26
  5. DTS venant d'une table avec colonnes variables
    Par Poussy-Puce dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/08/2007, 23h29

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