Macro qui ne s'applique pas au bon classeur

Bonsoir,

Je n'arrive pas à m'expliquer que ma macro ne s'applique pas au bon classeur....

J'ai besoin de créer des numéros uniques, grace à Jean Eric, c'est chose faite.

Son code fonctionne parfaitement, mais je n'arrive pas à l'appliquer à un autre classeur.

Dim iRow As Integer, num As Integer, _
    dossier As String
Workbooks.Open Filename:=ThisWorkbook.Path & "\main courante.xls"
dossier = Me.ComboBox1 & "_" & Me.ComboBox2 & "_" & Year(Date) & "_" & Me.ComboBox3

    For Each W In Workbooks
        If W.Name = "main courante.xls" Then
                With Workbooks("main courante.xls").Sheets("2014")
    iRow = Range("D" & Rows.Count).End(xlUp).Row + 1
        Range("D" & iRow).Value = "intervenant"
        Range("E" & iRow).Value = "libellé"
    num = Application.CountIf(Range("F:F"), "=*" & dossier & "*")
    If num = 0 Then
        Me.TextBox2 = dossier
    Else
        Me.TextBox2 = dossier & Format(num, "00")
    End If

    Cells(iRow, 6) = Me.TextBox2
            End With
            ActiveWorkbook.Save
    'ActiveWorkbook.Close
            MsgBox "Main courante renseignée"
            End
        End If
    Next W
    MsgBox "Main courante introuvable"

End Sub

Merci pour votre aide,

Bonsoir,

Personne?

J'avoue y être arrivé sous excel 2003 avec l'aide du forum mais pas sous 2007

Voilà ce que j'ai réussi à faire, j'arrive bien à exporter les données vers le classeur "main courante"

Et pour éditer un numéro unique, je suis obligé de cliquer sur la feuille "2014" pour activer la macro.

Sauf que le code édite un nouveau numéro à chaque clic...

Le code fonctionne parfaitement dans le classeur test n° dossier, mais à partir du moment ou je veux éditer mon numéro unique à partir du fichier "main courante", je n'y arrive plus..

Merci à ceux qui se prendront le temps de m'aider

18test-n-dossier.xlsm (36.21 Ko)
17main-courante.xlsm (14.80 Ko)

Bonjour,

Si j'ai bien compris... Voir classeur joint.

A+

Bonjour Galopin et merci pour ton aide,

ça resoud partiellement mon problème, ce que j'aurais aimé c'est faire le tout en une seule opération.

Alimenter le classeur "main courante" créer un numéro unique et le récupérer, le tout depuis le classeur "Test n° dossier".

J'ai essayé toutes sortes de combinaison de code, j'y ai passé des heures, sans succès.

Je ne vois pas pourquoi ça ne serait pas possible, qu'en penses-tu?

C'est par défaut, que j'ai affecté la macro au classeur "main courante"...

Merci encore pour ton aide,

Désolé je n'ai rien compris à ton problème, mais ça à quand même l'air un peu compliqué !

Si tu veux adresser un autre classeur, inutile de faire un For Each... Next

Ce code conviendra pour CommandButton3

Private Sub CommandButton3_Click()
Workbooks.Open Filename:=ThisWorkbook.Path & "\main courante.xlsm"
   With Workbooks("main courante.xlsm").Sheets("2014")
       Ln = .Range("A" & Rows.Count).End(xlUp).Row + 1
       .Cells(Ln, 1) = ComboBox1
       .Cells(Ln, 2) = ComboBox2
       .Cells(Ln, 3) = ComboBox3

       .Cells(Ln, 5) = TextBox2
   End With
      Workbooks("main courante.xlsm").Save
      Workbooks("main courante.xlsm").Close
MsgBox "Tableau bord renseignée"
End Sub

... Ne pas oublier de supprimer la macro Worksheet_SelectionChange dans la feuille 2014 de "main courante"

A+

Je conçois que ma demande n'est pas simple à formuler.

Mon soucis principal reste entier puisque les données son sur le classeur "test n dossier" et que le numéro est lié à la main courante.

En gros il faut tester la main courante pour pouvoir éditer le bon numéro.

C'est quand même un peu bordélique ton truc. Sans compter que tu n'expliques rien du tout :

Il sert à quoi ce classeur test n° dossier ?

La colonne A tu en a vraiment besoin ?

Dans ce cas il faut servir la main courante avant de remplir la colonne A et le textBox2 ne servira à rien.

Et tous ces boutons ils servent à quoi ? Tu as vraiment besoin de 2 boutons ?

Prière de mieux définir l'utilité de ce classeur test n° dossier car je déteste travailler pour rien.

Je reformule ma question : Faut-il rentrer ce N° de dossier dans la "main courante" et dans la conne A de test n° dossier ou seulement dans la "main courante" ?

A+

Merci beaucoup pour ton aide.

Je vais essayer d'expliquer au mieux mon besoin, je comprend très bien que ton temps est précieux.

J'ai crée le classeur "test" justement pour ajuster au mieux le code.

Je n'ai pas besoin des deux boutons, il ne me faut que celui qui exporte les données sur le classeur"main courante"

J'ai donc besoin de créer des numéros de dossier qui se doivent d'être uniques.

Ils sont composés en grande partie des infos issues du classeur "test", combobox1 puis 2, l'année, la combobox3 et pour finir le numéro à la fin vient du classeur "main courante" colonne F.

Pour résumer, le numéro est constitué selon les infos du classeur" test" et archivé sur la main courante avec une terminaison 01, 02 et ainsi de selon si le numéro existe déjà ou non.

La textbox2 m'est essentielle pour récupérer le numéro de dossier complet, pour faire le lien entre la main courante et le dossier à proprement parler.

La colonne A ne sert à rien sur le classeur "test".

Merci infiniment pour ton aide plus que précieuse

Voir le classeur joint.

A+

Ta macro fonctionne parfaitement!!!!!!!!

Merci infiniment pour le temps que tu as passé sur ma problématique.

J'ai encore une petite question,

J'ai essayé de déclarer une variable pour la feuille de la façon suivante:

feuille = Year(Date)
   Workbooks.Open Filename:=ThisWorkbook.Path & "\main courante.xlsm"
      With Workbooks("main courante.xlsm").Sheets(feuille)

Ce que je ne comprend pas c'est que ça fonctionne parfaitement sous excel 2003, qu'excel récupère bien 2014, mais pourtant ça ne fonctionne.

Ceci dit, c'est un détail pour le moment.

Bonne soirée à toi.

Bonjour,

C'est un pur problème de déclaration ! Et une déclaration de variable se fait avec Dim

En fait je suppose que tu n'a pas déclaré ta variable "feuille" (avec Dim feuille)

Même si tu l'a déclaré en variant (sans la typer) Year renvoie un Integer

Donc ton code recherche la feuille avec l'Index 2014 au lieu de la feuille nommée "2014"

Il faut donc faire soit une conversion dans le type KIVABIEN

Sub test()
Dim feuille
feuille = CStr(Year(Date))
Worksheets(feuille).Activate
End sub

... Soit une déclaration explicite du type :

Sub test()
Dim feuille As string
feuille = Year(Date)
Worksheets(feuille).Activate
End sub

La deuxième solution est bien sur préférable : il vaut toujours mieux faire ses déclarations de manière explicite plutôt que s'en remettre au hasard d'une auto-conversion parfois aléatoire.

Dans ce deuxième cas il y a bien quand même un genre de trans typage :

feuille = Year(Date)

... mais au moins celle-ci est à sens unique : ou ça passe ou ça casse ! En fait selon Microsoft Year() serait un Variant fortement teinté d'Integer donc le fait d'avoir déclaré "feuille As String" force VBA à digérer ce codage un peu olé olé...

En fait même dans le deuxième cas

feuille = CStr(Year(Date))

... ne serait pas incongru ! Mais les programmeurs VBA/Excel sont souvent peu formalistes...

A+

A+

Merci Galopin pour ses éléments de réponse.

J'avoue ne pas du tout être familiarisé du tout avec les déclarations...

Avec les éléments que tu viens de m'apporter, je vais me débrouiller.

Encore une fois merci pour ton aide plus que précieuse.

Bonjour galopin01,

Je me permet de revenir vers toi pour essayer d'apporter un petite modification au code que tu avais su m'éditer.

Il fonctionne parfaitement, seulement je me suis rendu compte que le numéro de dossier unique qui est générer se devait dans tous les cas finir pas un chiffre.

Aujourd'hui il édite le premier numéro de dossier sans chiffre à la fin.

Serait-il possible de modifier cela pour qu'il édite le premier numéro de dossier avec une terminaison "01"?

Merci pour ton aide précisuese.

Rechercher des sujets similaires à "macro qui applique pas bon classeur"