Copier cellule depuis un autre fichier

Résolu/Fermé
zertozerto Messages postés 34 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 21 mars 2011 - Modifié par zertozerto le 17/03/2011 à 17:54
zertozerto Messages postés 34 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 21 mars 2011 - 21 mars 2011 à 16:39
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
A voir également:

4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
9 mars 2011 à 11:29
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
zertozerto Messages postés 34 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 21 mars 2011
9 mars 2011 à 16:20
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 9/03/2011 à 16:25
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
zertozerto Messages postés 34 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 21 mars 2011
9 mars 2011 à 16:38
Simple
Efficace

Vu que je suis en Angleterre et qu'ils savent pas lire le francais ca peut marcher tu me diras!
0
zertozerto Messages postés 34 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 21 mars 2011
16 mars 2011 à 18:11
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
17 mars 2011 à 08:44
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
zertozerto Messages postés 34 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 21 mars 2011
17 mars 2011 à 10:22
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
17 mars 2011 à 10:35
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
zertozerto Messages postés 34 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 21 mars 2011
17 mars 2011 à 10:58
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
17 mars 2011 à 11:10
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
zertozerto Messages postés 34 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 21 mars 2011
17 mars 2011 à 12:05
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
zertozerto Messages postés 34 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 21 mars 2011
17 mars 2011 à 12:11
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