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 :

Copier coller les valeurs de ligne [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut Copier coller les valeurs de ligne
    Bonjour,

    Dans un tableau nommé "ORDINATEUR", je cherche à copier coller les valeurs d'une ligne si cette dernière est renseignée en colonne X.

    Voici mon code mais je bloque au niveau de la sélection des lignes dont la colonne X est ou non renseignée à ârtir de la ligne 11 :
    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
    Option Explicit
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    'Copie et colle les valeurs de la ligne entière si la date de clôture est renseignée (colonne X)
    Dim rng As Range
    Me.Unprotect "1234"
    ' La variable KeyCells contient la colonne (Ici X) qui déclenchera  le "Copier/Coller les valeurs" si elle est renseignée.
    Set rng = Range("X:X")
    If Not Application.Intersect(rng, Range(Target.Address)) Is Nothing Then
     
    'Sélection du tableau "Ordinateur"
        Application.Goto Reference:="Ordinateur"
        Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
                                                                             , SkipBlanks:=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                        :=False, Transpose:=False
     
    End If
    Me.Protect "1234"
    End Sub
    Quelqu'un peut il m'aider pour que mon code fonctionne ?

    Cordialement.

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonsoir
    je suis débutant et je peux pas adapter ton code
    pour moi si je veux envoyer ligne entière autre feuille selon condition je fais comme suit :
    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 test()
    ' nétoyer feuille 2 qui recevera les données
    Sheets("feuil2").Cells.Clear
     
    'copier si la colonne x est non vide
     
    Dim i As Long
    Dim k As Integer
    k = 1
    With Sheets("feuil1") 'ici données en feuil1 à adapter si nécessaire
    i = .Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To i
    If .Cells(i, 24) <> "" Then
      .Cells(i, 1).EntireRow.Copy
       Sheets("Feuil2").Activate
       Sheets("Feuil2").Cells(k, 1).Select
       ActiveSheet.Paste
        k = k + 1
        End If
    Next i
    End With
    End Sub
    j'espère que ça te résoudre le problème
    si non bonne soiré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 graphikris Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Application.Intersect(rng, Range(Target.Address)) Is Nothing Then
    Petite rectification liminaire : Range(Target.Address), c'est un peu comme si tu appelais quelqu'un au téléphone pour lui demander son numéro de téléphone.
    Ca peut se simplifier ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Application.Intersect(rng, Target) Is Nothing Then
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Application.Goto Reference:="Ordinateur"
    Je pense que cette partie est inutile.
    Il suffit de faire un Range("Ordinateur") pour accéder aux données de ton tableau dans ton code.
    La logique de VBA n'est pas la même que celle d'une utilisation classique d'Excel. Inutile (dans 99% des cas) de sélectionner une cellule pour utiliser ce qu'elle contient ou la modifier.

    Pour vérifier toutes les lignes de ton tableau, il faudra faire une boucle.
    La plus simple est un For To sur le nombre de lignes du tableau (même s'il serait plus efficace de faire un For Each sur toutes les cellules non vides de la colonne X en utilisant un SpecialCells).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Ligne As Long
    For Ligne = 1 To Range("Ordinateur").Rows.Count
     
    ... le code ...
     
    Next Ligne
    Pour le test, il suffira de faire un If en vérifiant le contenu de la cellule souhaitée.
    Par exemple, si tu veux tester la colonne 5 du tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Range("Ordinateur").Cells(Ligne, 5).Text = "" Then
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme
        Selection.PasteSpecial Paste:=xlPasteValues
    Là, tu fais un collage sans avoir fait de copie. Ca ne peut pas marcher.
    Mais comme dans ta demande tu n'indiques pas où tu veux coller, difficile de t'aider plus.

  4. #4
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Bonjour,

    Je veux faire le collage spécial sur la même ligne que celle testée.
    Si X2 est rempli (date de destruction) alors le collage spécial se fait sur la ligne 2
    Si X45 est rempli (date de destruction) alors le collage spécial se fait sur la ligne 45
    En fait je veux que les formules de la ligne dont la colonne X est remplie devienne une ligne avec des valeurs.
    Cordialement.

  5. #5
    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
    Dans mon post précédent, tu as tous les éléments pour le faire.

  6. #6
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Bonjour Menhir,
    J'ai suivi tes explications mais ça ne fonctionne pas.
    De plus dans ce code (ligne 13) je lui ai dit que si le texte etait "OK" mais en fait c'est pas OK mais une date (je ne sais pas comment lui dire en vba)
    Toujours dans mon code aux lignes 14, 15 et 16 je lui dit de sélectionner et copier la ligne A2 à AA2 mais en fait je ne dois pas lui dire, c'est a la macro de savoir quelle colonne sélectionner.

    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
    Option Explicit
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    'Copie et colle les valeurs de la ligne entière si la date de clôture est renseignée (colonne X)
        Dim rng    As Range
        Dim Ligne  As Long
        Me.Unprotect "1234"
        ' La variable KeyCells contient la colonne (Ici X) qui déclenchera  le "Copier/Coller les valeurs" si elle est renseignée.
        Set rng = Range("X:X")
        If Not Application.Intersect(rng, Target) Is Nothing Then
     
            For Ligne = 1 To Range("Ordinateur").Rows.Count
                If Range("Ordinateur").Cells(Ligne, 23).Text = "OK" Then
                    Range("A2:AA2").Select
                    Range("AA2").Activate
                    Selection.Copy
                    Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
                                                                                         , SkipBlanks:=False, Transpose:=False
                    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                                    :=False, Transpose:=False
     
                End If
            Next Ligne
        End If
        Me.Protect "1234"
    End Sub

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    J'adore la copie sur soi-même que fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Selection.Copy
                    Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
                                                                                         , SkipBlanks:=False, Transpose:=False
                    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                                    :=False, Transpose:=False
    En admettant (ce que je veux croire lorsque l'on montre un code) que le code montré est un copié/collé rigoureux du code écrit

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par graphikris Voir le message
    Voici mon code mais je bloque au niveau de la sélection des lignes
    Surtout ne pas bloquer sur la sélection car elle totalement superflue, inutile même !
    Rien qu'en ouvrant l'aide VBA de la méthode Copy par exemple,
    rien que dans les nombreux exemples dans les discussions de ce forum dont notamment tes propres discussions !

    Juste bien définir source et destination puis si nécessaire l'expliquer enfin clairement …

    ___________________________________________________________________________________________________________
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

  9. #9
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Salut Marc-L
    Que dire lorsque l'on va en outre jusqu'à agir sur une selection non faite ? Regarde le code présenté en message 9. Il en dit énormément sur le sérieux, le soin, etc ... et s'apparente plus à du tâtonnement (incompris) dans tous les sens.
    La seule "chose" qui est comprise, la seule "pédagogie" qui est "acceptée" sont dans certains cas très nets le bout de code à copier/coller.
    Si ma "brutalité" contribue à faite tomber de l'arbre quelques noix de coco, tant mieux. Dans le cas contraire, il n'y a plus vraiment grand-chose à espérer...

    EDIT : et le plus fort (si j'ai bien deviné la finalité qu'il a du mal à exprimer) est qu'il n'a besoin ni de sélection, ni même de boucle. Encore lui faut-il comprendre le sens pourtant clair de ce qui lui a été dit en mon message N° 17
    Amitiés

  10. #10
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Merci Marc
    peux tu juste me dire si le reste du code est correct hormis le copier coller.
    En te remerciant.

  11. #11
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Si la feuille de calculs est bien conçue, respectant Excel, il suffit juste d'appliquer un filtre pour les X
    puis un simple Range.Copy, cette dernière instruction ne tenant compte que du visible …

    Si tu ne t'en sors toujours pas pour une simple copie,
    une explication digne de ce nom - claire & exhaustive des tenants & aboutissants - ne serait pas du luxe !

  12. #12
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Ok merci à toi. J'essaie de faire au mieux. Et te tiens au courant. Encore merci pour ton aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/02/2015, 14h19
  2. [XL-2007] Réaliser une recherche dans une colonne et copier coller les lignes
    Par Georges50 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 13/11/2013, 15h39
  3. 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
  4. Réponses: 5
    Dernier message: 16/12/2011, 12h22
  5. Copier/coller les valeurs, pas les formules
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/01/2011, 07h26

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