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 une ceullule dans une autre feuille si une condition est verifiée


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2016
    Messages : 61
    Points : 41
    Points
    41
    Par défaut Copier une ceullule dans une autre feuille si une condition est verifiée
    Bonjour,

    Je dois créer un fichier csv qui contient certains informations que je dois importer de differentes feuilles Pour cela j'ai pensé a creer un tableau excel d'abord et apres le transformer en csv

    En effet, Mon tableau que j ai créé sur la feuille"nombredetr"doit contenir en 1ere colonne le Nom et Prénom que je veux copier de la feuille "détails" si la colonne C qui est le matricule est renseignée.
    En gros Si la colonne C de la feuille "details" n est pas vide Copier le nom et prénom dans lafeuille "nombredetr" Sinon passer a la ligne suivante
    J ai fait ce code, ça me donne aucun résultat et aucun erreur . Je pense j'ai un problème avec l'algo que j ai fait
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    Sub Presentation()
    Worksheets("nombredetr").Cells.Clear
     
    Columns("A:A").ColumnWidth = 25
     
    Worksheets("nombredetr").Range("A1").Value = "Nom et Prénom"
    Worksheets("nombredetr").Range("B1").Value = "Code VAT System"
    Worksheets("nombredetr").Range("C1").Value = "Code Salarié"
    Worksheets("nombredetr").Range("D1").Value = "Code Rubrique"
    Worksheets("nombredetr").Range("E1").Value = "Date de début"
    Worksheets("nombredetr").Range("F1").Value = "Date de Fin"
    Worksheets("nombredetr").Range("G1").Value = "Plage de début"
    Worksheets("nombredetr").Range("H1").Value = "Plage de Fin"
     
        With Worksheets("nombredetr").Range("A1:H1").Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 6299648
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        With Worksheets("nombredetr").Range("A1:H1").Font
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = 0
           ' .HorizontalAlignment = xlCenter
          '  .Borders.Weight = xlThin
        End With
     
    For j = 2 To lastlign
    For i = 2 To lastlign
    If Worksheets("Détails").Range("C" & i) = "" Then
    i = i + 1
    Else
    Worksheets("nombredetr").Range("A" & j) = Worksheets("Détails").Range("A" & i) & " " & Worksheets("Détails").Range("A" & i)
     
    End If
    Next i
    Next j
     
     
     
    End Sub

    Merci d'avace pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For j = 2 To lastlign
    For i = 2 To lastlign
    Il me semble que tu n'as pas donné de valeur à "lastlign" donc tes boucles ne font rien
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2016
    Messages : 61
    Points : 41
    Points
    41
    Par défaut
    oui j'ai changé entre temps j ai affecté mis ma boucle de i=2 to 80
    Mais ça me donne que la derniere cellule de mon tableau détails

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Je ne comprends pas l'interet de la boucle j

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Worksheets("Détails").Range("C" & i) = "" Then
    i = i + 1
    Tu te rends que tu saute des lignes en faisant ça?
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Je vais en ce qui me concerne me contenter (et c'est déjà beaucoup) de l'inviter à mettre en langage naturel (en français, donc) chaque partie de cette ligne de code que tu as écrite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("nombredetr").Range("A" & j) = Worksheets("Détails").Range("A" & i) & " " & Worksheets("Détails").Range("A" & i)
    ce seul tout petit "effort" (c'est un minimum) devrait déjà te permettre de prendre conscience de ce que tu écris.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2016
    Messages : 61
    Points : 41
    Points
    41
    Par défaut
    Si tu parles des que j ai mis en double, oui c'était ue faute et je me suis rendue compte quand j ai eu le résultat et je l'ai changé.
    Mais c'est pas ce qui pose problème.
    Sinon si tu veux me donner une indication pour m'aider, je suis prenante et c'est pour ça que j'ai posté mon message. Si c'était juste une remarque sur mes "efforts" Merci c'est noté.

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Si c'était juste une remarque sur mes "efforts" Merci c'est noté.
    Ah !
    oui c'était ue faute et je me suis rendue compte quand j ai eu le résultat et je l'ai changé
    Hé bien : montre donc comment tu l'as "changé", ce code (puisqu'il est "changé").
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2016
    Messages : 61
    Points : 41
    Points
    41
    Par défaut
    A ce qui parait, tu veux vraiment m'aider!

    Alors j ai eu comme résultat NOM NOM et moi je voulais nom prénom Donc j'ai changé le 2ème A par B.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets("nombredetr").Range("A" & j) = Worksheets("Détails").Range("A" & i) & " " & Worksheets("Détails").Range("B" & i)

  9. #9
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Citation Envoyé par hs.hs Voir le message
    Si tu parles des que j ai mis en double, oui c'était ue faute et je me suis rendue compte quand j ai eu le résultat et je l'ai changé.
    Le problème n'est pas là.

    Il y a un problème de logique dans ton code, avant d'écrire un code dans un certain langage on écrit (au moins dans sa tête) l'algorithme en français que l'on traduit par du code, ton problème ici se situe pas dans la traduction algo -> code, mais dans l'écriture de l'algo d'où la question de unparia sur la traduction de la ligne pour que tu rendes compte par toi même du problème.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  10. #10
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Je vais t'aider, oui, mais par un exemple et à toi d'adapter à tes données (ultra facile) :
    regarde ce que fait ceci sur un classeur neuf, avec tes données en feuil1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim plage_a_copier As Range, c As Range
      With Worksheets("Feuil1")
        For Each c In .Columns("C").SpecialCells(xlCellTypeConstants)
          If plage_a_copier Is Nothing Then
            Set plage_a_copier = .Range("A" & c.Row & ":B" & c.Row)
          Else
            Set plage_a_copier = Union(plage_a_copier, .Range("A" & c.Row & ":B" & c.Row))
          End If
        Next
      End With
       If Not plage_a_copier Is Nothing Then plage_a_copier.Copy Destination:=Worksheets("Feuil2").Range("A1")
    lance et regarde ce que tu as en feuil2. Tu devrais comprendre vite
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2016
    Messages : 61
    Points : 41
    Points
    41
    Par défaut
    Oui je savais que j'ai un problème avec mon algo, et je l'ai dit dans mon premier message.
    Je vais recommencer .
    Merci a vous deux pour vos retours.

    oui j'ai compris, je les ai adapté et ça marche très bien maintenant
    Merci beaucoup

  12. #12
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Oui je savais que j'ai un problème avec mon algo, et je l'ai dit dans mon premier message
    Conclusion digne de la sagacité de Monsieur de La Palice
    Ma solution ne fait quant à elle appel à aucun "algo" et utilise simplement des méthodes de VBA/Excel.
    En ce qui concerne ton "algo" : relis l'invitation que je t'avais faite plus haut à traduire en langage naturel une certaine ligne de code. Elle devrait te permettre de ne pas te contenter de repérer la faute d'étourderie que tu as corrigée, mais de prendre entre autres conscience de l'évolution de ta variable j, qui s'incrémente de 1 unité, que la ligne concernée soit ou non à retenir.
    Un peu de réflexion conduit :
    - à supprimer la boucle for i
    - à initialiser i à 0 et l'augmenter de une unité dans la boucle j si la colonne c est vide
    - à remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("nombredetr").Range("A" & j) = Worksheets("Détails").Range("A" & i) & " " & Worksheets("Détails").Range("A" & i)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("nombredetr").Range("A" & j-i) = Worksheets("Détails").Range("A" & j) & " " & Worksheets("Détails").Range("A" & j)
    Je te suggère de t'exercer (ce sera un bon exercice) à apporter à ton "algo" originel les corrections nécessaires. Il fonctionnera alors.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

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

Discussions similaires

  1. [XL-2013] Retrouver une feuille puis une cellule dans un autre fichier
    Par bolide7 dans le forum Excel
    Réponses: 19
    Dernier message: 17/02/2014, 18h54
  2. VBA Copier plusieurs cellules dans uen autre feuille
    Par Tm7555555 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/09/2013, 19h25
  3. Réponses: 9
    Dernier message: 07/08/2013, 18h52
  4. Réponses: 13
    Dernier message: 09/11/2011, 12h06
  5. Réponses: 17
    Dernier message: 12/07/2006, 22h04

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