Macro VBA Excel

D'accord merci, je viens d'essayé mais le problème est que la ligne de la procédure que je met à jour disparaît quand je l'a met à jour

Pas étonnant donc, il n'y a rien en colonne 25, donc tu recopies du vide

Option Explicit

Sub miseAJourProcedure()
Dim procedure As String
Dim ligneprocedure As Integer
Dim maxcolum As Integer
Dim lignelibre As Integer
Dim versioninit As Integer
Dim prfound As Range
Dim c As Integer, j As Integer

    procedure = InputBox("Quelle procedure voulez-vous mettre à jour?", "Saisie")
    Set prfound = Worksheets(2).Range("B6:B25").Find(What:=procedure, LookIn:=xlValues)

        If prfound Is Nothing Then
            MsgBox ("Nous n’avons pas trouvé la procédure demandée.")
        Else
            ' ligne concernée par la procédure
            ligneprocedure = prfound.Row

            ' première ligne libre dans Archive
            lignelibre = Worksheets(3).Cells(Rows.Count, "B").End(xlUp).Row + 1

            ' dernière colonne à recopier
            maxcolum = Worksheets(2).Cells(ligneprocedure, Columns.Count).End(xlToLeft).Column

            ' recopie
            For c = 1 To maxcolum
                Worksheets(3).Cells(lignelibre, c).Value = Worksheets(2).Cells(ligneprocedure, c).Value
            Next

            ' incrément du n° de version
            Worksheets(2).Cells(ligneprocedure, 3).Value = Worksheets(2).Cells(ligneprocedure, 3).Value + 1

            ' recopie de la formule stockée colonne 25 ou maxcolum + 1
            For j = 6 To maxcolum
                Worksheets(2).Cells(ligneprocedure, maxcolum + 1).Copy Worksheets(2).Cells(ligneprocedure, j)
            Next

            ' message de fin
            MsgBox ("La version de la procedure" + procedure + " Mise à jour effectuée")
        End If

End Sub

Je t'ai volontairement tout détaillé étape par étape pour t'apprendre les base du débogage.

Un tout grand merci, (https: //yo u t u. be/O7 xkV6WxG28 ) sans les espaces, mais je ne pouvais pas mettre de liens sinon , seulement quand je fais mise à jour, je ne comprends pas pourquoi la ligne de la procédure qui est mise à jour disparaît et normalement elle ne doit pas disparaître .

Je ne sais pas comment vous expliquer par écrit donc voila la vidéo d'explication du professeur où il montre le résultat auquel nous devons arrivé "Je ne peux pas mettre le liens ici je vous l'envoie en mp " le résultat commence à +ou- 10 min jusque la fin .

Et voila mon exel maintenant pour voir ce que ça fais quand je met mise à jour .

Un schmilblick !

Si on recopie jusqu'à la dernière colonne maxcolum ... forcément la suivante il n'y a rien et cela efface !

Passe alors maxcolum comme suit :

maxcolum = Worksheets(2).Cells(ligneprocedure, Columns.Count).End(xlToLeft).Column

et mets une formule dans cette fameuse "dernière" colonne cachée que tu ne recopies pas.

Un schmilblick !

Si on recopie jusqu'à la dernière colonne maxcolum ... forcément la suivante il n'y a rien et cela efface !

Passe alors maxcolum comme suit :

maxcolum = Worksheets(2).Cells(ligneprocedure, Columns.Count).End(xlToLeft).Column

et mets une formule dans cette fameuse "dernière" colonne cachée que tu ne recopies pas.

Une formule? Je ne vois pas ce que vous voulez dire ?

v.Vous réinitialisez la formule de la ligne en copiant et en collant la formule de base (stockée en fin de ligne de chaque procédure => Colonne masquée)

Il faut donc que tu copies (à la main, pas dans le programme) d'abord la formule utilisée dans une colonne supplémentaire que tu masques.

v.Vous réinitialisez la formule de la ligne en copiant et en collant la formule de base (stockée en fin de ligne de chaque procédure => Colonne masquée)

Il faut donc que tu copies (à la main, pas dans le programme) d'abord la formule utilisée dans une colonne supplémentaire que tu masques.

Comme ceci? Et après je dois la masqué et cela fonctionnera?

v.Vous réinitialisez la formule de la ligne en copiant et en collant la formule de base (stockée en fin de ligne de chaque procédure => Colonne masquée)

Il faut donc que tu copies (à la main, pas dans le programme) d'abord la formule utilisée dans une colonne supplémentaire que tu masques.

Ah voila j'ai compris, un tout grannnnnd merci , ça fais la mise à jour ça fais tout comme il faut, le truc que je ne comprend pas c'est que maintenant elle ne se copie plus dans mon archive ( tableau) et je ne comprends pas pourquoi?

Pose toi la question ... qu'est-ce que tu as changé ?

Je vois surtout que tu as mis en place un en-tête dans Archives AVEC DES CELLULES FUSIONNEES beurk !

Donc quand tu recherches la première ligne vide, ne pense pas qu'excel prenne la ligne 6 ! non non non non non que nenni, il prendra la ligne 4 ! Car dans les cellules fusionnées, excel considère que seule la cellule en haut et à gauche est renseignée.

Mets donc ceci ...

            lignelibre = Application.Max(6, Worksheets(3).Cells(Rows.Count, "B").End(xlUp).Row + 1)

Je te donne la solution mais j'aurais dû te laisser mariner ...

Et supprime Module1, Module2, Module3, cela ne sert à rien.

Pose toi la question ... qu'est-ce que tu as changé ?

Je vois surtout que tu as mis en place un en-tête dans Archives AVEC DES CELLULES FUSIONNEES beurk !

Donc quand tu recherches la première ligne vide, ne pense pas qu'excel prenne la ligne 6 ! non non non non non que nenni, il prendra la ligne 4 ! Car dans les cellules fusionnées, excel considère que seule la cellule en haut et à gauche est renseignée.

Mets donc ceci ...

            lignelibre = Application.Max(6, Worksheets(3).Cells(Rows.Count, "B").End(xlUp).Row + 1)

Je te donne la solution mais j'aurais dû te laisser mariner ...

Et supprime Module1, Module2, Module3, cela ne sert à rien.

Aaaaah ouiiiii d'accord, tout fonctionne nickel maintenant ! Un tout grand merci à vous en tout cas ! Je pense que je n'aurai jamais réussi seul!

Un conseil ... quand tu es bloqué, n'hésite pas à mettre des msgbox la_valeur pour savoir ce qui se passe.

Une punition ... c'est de continuer à t'intéresser au codage et à excel. Je ne sais pas quel est ton niveau d'études et quelles sont tes études, mais cela sera toujours utile.

Épilogue ....

En quoi le fait d'avoir copié en valeurs a effacé la formule ?

Cette formule ne dépend ni directement ni indirectement de la version en colonne C !

Donc pourquoi la recopier ? Stupide ...

Rechercher des sujets similaires à "macro vba"