Copier cellule depuis un autre fichier

Résolu
zertozerto Messages postés 39 Statut Membre -  
zertozerto Messages postés 39 Statut Membre -
Bonjour,

Alors j'ai un tableau de ce type:
JAN -W01 - W02 -W03 - W04 - W05 - FEV - W06 -W07 ...

Pour ma combobox j'ai fais cela:

Private Sub UserForm_Initialize() 
Dim i 
    For i = 9 To 75 
        ComboBox1.AddItem Sheets("Data Entry").Cells(7, i) 
    Next 

End Sub


Je ne veux pas selectionner les noms des mois.

- je me tape les 57 semaines a la mano
- je fais un "if" + noms des mois et je dis que je ne les selectionne pas
- je dis que je selectionne de la 2eme colonne a la 6 et de la 7eme a la 12 etc.

qu'est-ce qui est le mieux?

a la mano je vais y arriver, mais pour les autres solutions j'aurai besoin d'aide.

Ou encore une autre solution.

Merciiii

4 réponses

Résumé de la discussion

Une macro VBA est envisagée pour remplir une combobox à partir d'un ensemble de colonnes tout en excluant les noms des mois et en gérant potentiellement l'ouverture et l'échange entre deux classeurs. Des solutions essentielles suggèrent d'utiliser un module VBA et des références explicites aux classeurs (Workbooks, Sheets, Range) afin d'opérer sur deux fichiers sans dépendre de l'actif. Il est recommandé d'ouvrir le fichier B, puis copier les valeurs via des références précises (par exemple Workbooks("Fichier A").Sheets("SheetA").Range("K10") = Workbooks("Fichier B").Sheets("SheetB").Cells(9, 14).Value), d'enregistrer et de fermer. En cas de manipulation entre deux classeurs, la structure With...End With et des noms complets des classeurs et feuilles peut éviter les erreurs et faciliter le débogage.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Salut,
    1- je me tape les 57 semaines a la mano Mmmh intéressant! Sur ma planète et dans mon pays je ne compte que 52 semaines... de toutes façons cette méthode "à la main" est proscrite d'emblée.
    2- je fais un "if" + noms des mois et je dis que je ne les selectionne pas Voilà qui est intéressant! C'est, selon moi, la meilleure méthode. Ou plutôt que de ne pas sélectionner les "mois", peut être serais ce plus aisé de sélectionner uniquement les semaines? Même résultat...
    Comme ceci, si tes semaines commencent tous par un "W" et qu'aucun mois ne commence par un "W" (comme le mois de Waout par exemple...)
    Private Sub UserForm_Initialize()
    Dim Col As Integer
        For Col = 9 To 75
            If Left(Sheets("Data Entry").Cells(7, Col), 1) = "W" Then
                ComboBox1.AddItem Sheets("Data Entry").Cells(7, Col)
            End If
        Next Col
    End Sub

    --> J'ai au passage corrigé deux horreurs (erreurs pardon) qui n'en sont pas vraiment mais qui sont tout de même plus VBA... Variables = nom d'au moins 3 lettres (Col au lieu de i) et il convient de leur attiruber un type (= Integer).
    --> !!! Ne fonctionnera pas si un espace inutile farfelu et superflu se glisse avant le W de ta semaine !!!
    3- je dis que je selectionne de la 2eme colonne a la 6 et de la 7eme a la 12 etc Faisable, mais fastidieux! inutile si la solution 2 fonctionne.
    Ca te va?
    0
  2. zertozerto Messages postés 39 Statut Membre
     
    1)
    57... parce que je suis innovant!
    ... ou parce que j'ai mis au hasard

    2)
    Oui c'est la meme idée en fait, mais ta solution est mieux je pense.

    Je débute en codage, donc merci de tes remarques :)
    C'est comme ca qu'on apprend :)
    il n'y a pas de raison qu'un "espace" se glisse, personne ne doit toucher ses valeurs. Ha moins que quelqu'un d'innovant comme moi souhqite créer la 53 eme semaine ;-)

    3)
    Ca me va tres bien.

    Merci beaucoup
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      1- de rien
      2- si quelqu'un a glissé un espace, tu peux le tester :
      If Left(Sheets("Data Entry").Cells(7, Col), 1) = " " Then 
          MsgBox "Quel est le con qui a mis un espace ici" 
      End If

      A+, n'hésite pas à revenir
      0
    2. zertozerto Messages postés 39 Statut Membre
       
      Simple
      Efficace

      Vu que je suis en Angleterre et qu'ils savent pas lire le francais ca peut marcher tu me diras!
      0
  3. zertozerto Messages postés 39 Statut Membre
     
    Je réouvre le sujet:

    alors voila mon code:
    Dim MonMois As String
    Dim mavariable As String
    
    '------ Look for the column of the current week ------
    Dim I As Integer
    Dim Colweek As Integer
        
            For I = 4 To 73
                 If Worksheets("TMUK Detail I-O WIP").Cells(4, I) = mavariable Then
                         Colweek = Column.Active
                 End If
            Next I
        
    '------ Look for the column of the current Month ------
        Dim J As Integer
            For J = Colweek To 10
                If Left(Sheets("TMUK Detail I-O WIP").Cells(4, J), 1) <> "W" Then
    MonMois = ActiveCell.Value
    MsgBox "on a " & MonMois
            End If
            Next J


    a partir de la colonne ou je trouve MaVariable (colonne appellé Colweek)
    je veux chercher de cette colonne a 7, l'unique valeur qui ne commence pas par W.
    et cette valeur je veux la mettre dans la variable MonMois.

    cela compile plus a :
    Colweek = Column.Active

    >>> Object required

    Je dois avoir des problemes dans la declaration des variables egalement.
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut,
      Hop hop hop... Tu dis d'abord:
      For I = 4 To 73 bleble Cells(4, I) ==> tu sous entends là que la colonne trouvée peut être la 42ème.
      et ensuite : For J = Colweek To 10 ==> Si Colweek = 2 oK mais si colweek = 42 ça ne fonctionnera pas.
      corrige déjà : Colweek = Column.Active
      par : Colweek = I
      Et reviens expliquer la suite...
      0
  4. zertozerto Messages postés 39 Statut Membre
     
    Yep

    alors finalement je suis parti sur une seule boucle, plus logique.
    J'ai réussi à faire ce que je voulais de cette maniere:

        Dim I As Integer
        Dim K As Integer
        
        For I = 4 To 73
            If Worksheets("TMUK Detail I-O WIP").Cells(4, I) = mavariable Then
                K = I
                            
            Dim J As Integer
            Dim L As Integer
                 For J = K To K + 6
                    If Left(Sheets("TMUK Detail I-O WIP").Cells(4, J), 1) <> "W" Then
                        MonMois = Sheets("TMUK Detail I-O WIP").Cells(4, J).Value
                        MsgBox "mon mois = " & MonMois & "J = " & J
                        L = J
                    End If
                Next J
            End If
            'Exit For
        Next I


    mes mois sont en fonction de la variable L
    mes semaines sont en fonction de la variable K

    Ca marche comme cela :)
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Si ça marche, ça marche. Petit commentaire néanmoins :
      Concernant tes variables, elles devraient être plus explicite. Dans l'état, ton code est difficilement compréhensible. On s'en fiche puisqu'il marche. Mais lorsque tu voudras revenir dessus dans 3 ans, ce sera pas évident.
      De plus, une variable est habituellement composée de 3 caractères minimum etc...
      Je te propose donc de suite de prendre des bonnes habitudes.
      regarde ce code, c'est un copier/coller du tien en tenant compte de ma remarque :

      Dim ColA As Integer, ColB As Integer
      Dim L as Integer ' à quoi sert cette variable???
          For ColA = 4 To 73
              If Worksheets("TMUK Detail I-O WIP").Cells(4, ColA) = mavariable Then
                   For ColB = ColA To ColA + 6
                      If Left(Sheets("TMUK Detail I-O WIP").Cells(4, ColB), 1) <> "W" Then
                          MonMois = Sheets("TMUK Detail I-O WIP").Cells(4, ColB).Value
                          MsgBox "mon mois = " & MonMois & "J = " & ColB
                          L = ColB
                      End If
                  Next ColB
              End If
              'Exit For
          Next ColA
      0
    2. zertozerto Messages postés 39 Statut Membre
       
      ho oui c'est vrai tu m'avais deja fait la remarque pour les 3 caracteres en plus.

      Le L j'en ai besoin, je m'en sert plus tard dans mon code.



      question:
      je voudrais que ma macro (sur fichier A) s'execute sur ce fichier A ET sur un fichier B d'un autre dossier.
      Je veux la meme structure de code (les range vont changer par contre donc je ferais un copier-coller de la forme et modifierai les plages de données)

      une piste?
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      je voudrais que ma macro (sur fichier A) s'execute sur ce fichier A ET sur un fichier B d'un autre dossier. En même temps? Tu veux que la macro cherche dans 2 fichiers différents?
      Dis m'en davantage...
      0
    4. zertozerto Messages postés 39 Statut Membre
       
      Oui voila.
      La macro actuelle est sur un fichier A. elle remplie une feuille de ce fichier a partir des données des feuilles A. Et je veux qu'elle remplisse une partie de cette feuille a partir d'un fichier B qui se trouve dans un autre dossier.

      Les informations a prendre dans le dossier B sont dans un tableau de la meme forme que le tableau utilisé dans la table A.
      "Alors j'ai un tableau de ce type:
      JAN -W01 - W02 -W03 - W04 - W05 - FEV - W06 -W07 ...
      "


      donc je veux que a partir du fichier A, ma macro cherche les infos dans un fichier B et les copi dans le fichier A
      0
    5. zertozerto Messages postés 39 Statut Membre
       
      je voudrais faire une code de ligne disant que maintenant je travaille sur le fichier B,
      et apres refaire ma boucle qui cherche la semaine et le mois
      0