erreur dans le code

ldexplorer

XLDnaute Junior
Bonjour les excelliens,

Ca fait toujours plaisir de passer un petit moment avec vous et cela d'autant plus qu'en général il y a toujours quelqu'un qui connaît la réponse à votre question.

Je suis coincé. J'ai le code suivant qui me permets de copier la dernière ligne écrite dans un tableau sur une feuille nommée CE_vierge à l'aide d'un formulaire dans une feuille nommée Recap. A chaque ajout dans la feuille CE_vierge, elle remplace la ligne de la feuille Recap par la plus récente (sorte de mise à jour).

Or, je souhaite qu'elle écrive la première ligne dans la feuille Recap à la ligne A14. Ca ne marche pas, tantôt à la ligne 13,12 mais jamais je n'arrive à la ligne 14. Je ne comprends pas du tout.

Code:
Private Sub IRecap()
 
Dim Nom As String 'déclare la variable nom
Dim li As Integer 'déclare la variable li
Dim dest As Range 'déclare la variable dest
 
Nom = ActiveSheet.Range("B6").Value  'définit la variable nom
li = ActiveSheet.Range("B65536").End(xlUp).Row 'définit la variable li
With Sheets("Recap") 'prend en compte l'onglet Recap"
 
    'boucle sur toutes les cellules éditées de la colonne A (en partant de A14)
 
    For Each cel In .Range("A14:A" & .Range("A65536").End(xlUp).Row)
 
        If cel.Value = Nom Then 'condition : si la valeur de la cellule est egale à nom
            Set dest = cel 'définit la variable dest
            GoTo suite 'va à la balise suite
        End If 'fin de la condition
 
    Next cel 'prochaine cellule de la plage
 
Set dest = .Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest
dest.Value = Nom 'place le nom dans la première cellule vide rencontrée
 
End With
 
suite: 'balise
ActiveSheet.Range(Cells(li, 2), Cells(li, 6)).Copy Destination:=dest.Offset(0, 1) 'copie la ligne
End Sub

Merci de m'aider. A bientôt,
Lionel

PS : je joints le classeur pour vous aider à comprendre.
 

Pièces jointes

  • ce prestations.zip
    23.9 KB · Affichages: 24
  • ce prestations.zip
    23.9 KB · Affichages: 20
  • ce prestations.zip
    23.9 KB · Affichages: 19

Robert

XLDnaute Barbatruc
Repose en paix
Re : erreur dans le code

Bonjour le fil, bonjour le forum,

Voici le code modifié :

Code:
Private Sub IRecap()
 
Dim Nom As String 'déclare la variable nom
Dim li As Integer 'déclare la variable li
Dim dest As Range 'déclare la variable dest
 
Nom = ActiveSheet.Range("B6").Value  'définit la variable nom
li = ActiveSheet.Range("B65536").End(xlUp).Row 'définit la variable li
With Sheets("Recap") 'prend en compte l'onglet Recap"
 
    'boucle sur toutes les cellules éditées de la colonne A (en partant de A13)
 
    For Each cel In .Range("A14:A" & .Range("A65536").End(xlUp).Row)
 
        If cel.Value = Nom Then 'condition : si la valeur de la cellule est egale à nom
            Set dest = cel 'définit la variable dest
            GoTo suite 'va à la balise suite
        End If 'fin de la condition
 
    Next cel 'prochaine cellule de la plage
 
If .Range("A14") = "" Then 'condition : si A14 est vide
    Set dest = .Range("A14") 'définit la variable dest ((A14)
Else 'sinon
    Set dest = .Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest (la première ligne vide rencontrée)
End If 'fin de la condition
dest.Value = Nom 'place le nom dans la première cellule vide rencontrée
 
End With
 
suite: 'balise
ActiveSheet.Range(Cells(li, 2), Cells(li, 6)).Copy Destination:=dest.Offset(0, 1) 'copie la ligne
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : erreur dans le code

Bonjour le fil, bonjour le forum,

Oui c'est vrai ça ne marchait pas car tu n'avais pas mis un VRAI nom, tu avait laissé Nom_CE... J'ai modifié le code :

j'ai remplacé la ligne :
Code:
If cel.Value = Nom Then 'condition : si la valeur de la cellule est egale à nom

par :
Code:
If cel.Value = Nom And cel.Value <> "Nom_CE" Then 'condition : si la valeur de la cellule est egale à nom

Code:
Private Sub IRecap()
 
Dim Nom As String 'déclare la variable nom
Dim li As Integer 'déclare la variable li
Dim cel As Range
Dim dest As Range 'déclare la variable dest
 
Nom = ActiveSheet.Range("B6").Value  'définit la variable nom
li = ActiveSheet.Range("B65536").End(xlUp).Row 'définit la variable li
With Sheets("Recap") 'prend en compte l'onglet Recap"
 
    'boucle sur toutes les cellules éditées de la colonne A (en partant de A13)
 
    For Each cel In .Range("A14:A" & .Range("A65536").End(xlUp).Row)
 
        If cel.Value = Nom And cel.Value <> "Nom_CE" Then 'condition : si la valeur de la cellule est egale à nom
            Set dest = cel 'définit la variable dest
            GoTo suite 'va à la balise suite
        End If 'fin de la condition
 
    Next cel 'prochaine cellule de la plage
 
If .Range("A14") = "" Then 'condition : si A14 est vide
    Set dest = .Range("A14") 'définit la variable dest ((A14)
Else 'sinon
    Set dest = .Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest (la première ligne vide rencontrée)
End If 'fin de la condition
dest.Value = Nom 'place le nom dans la première cellule vide rencontrée
 
End With
 
suite: 'balise
ActiveSheet.Range(Cells(li, 2), Cells(li, 6)).Copy Destination:=dest.Offset(0, 1) 'copie la ligne
End Sub
 

ldexplorer

XLDnaute Junior
Re : erreur dans le code

Ta proposition de code fonctionne Robert mais ... (il y toujours un mais...)

L'intérêt du code de départ était qu'il ne copiait pas chaque acte dans la feuille recap mais qu'il remplacait dans la feuille recap l'acte précédent par le nouveau en fonctionnant du nom.

Ex :

sur la feuille CE_vierge entré d'un acte1 alors copie acte1 sur la feuille recap (en fonction du nom car possibilités plusieurs usagers)
sur la feuille CE_vierge entré d'un acte2 alors copie acte2 à la place de acte 1 sur la feuille recap (en fonction du nom car possibilités plusieurs usagers)

J'espere être plus clair dans mon probleme. Le code de départ fonctionne dans le sens ou il fait cette opération mais impossible de faire démarrer à la ligne 14.

A+
Lionel
 

ldexplorer

XLDnaute Junior
Re : erreur dans le code

J'ai pu modifier le code ainsi :

j'ai remplacé :

Code:
For Each cel In .Range("A14:A" & .Range("A65536").End(xlup).Row)

par
Code:
For Each cel In .Range("A14:A" & .Range("A65536").End(xlDown).Row)

Code final

Code:
Private Sub IRecap()
 
Dim Nom As String 'déclare la variable nom
Dim li As Integer 'déclare la variable li
Dim cel As Range
Dim dest As Range 'déclare la variable dest
 
Nom = ActiveSheet.Range("B6").Value  'définit la variable nom
li = ActiveSheet.Range("B65536").End(xlUp).Row 'définit la variable li
With Sheets("Recap") 'prend en compte l'onglet Recap"
 
    'boucle sur toutes les cellules éditées de la colonne A (en partant de A14)
 
    For Each cel In .Range("A14:A" & .Range("A65536").End(xlDown).Row)
 
        If cel.Value = Nom Then 'condition : si la valeur de la cellule est egale à nom
            Set dest = cel 'définit la variable dest
            GoTo suite 'va à la balise suite
        End If 'fin de la condition
 
    Next cel 'prochaine cellule de la plage
 
Set dest = .Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest
dest.Value = Nom 'place le nom dans la première cellule vide rencontrée
 
End With
 
suite: 'balise
ActiveSheet.Range(Cells(li, 2), Cells(li, 6)).Copy Destination:=dest.Offset(0, 1) 'copie la ligne
End Sub

mais j'ai maintenant le problème suivant, il copie le premier acte à la ligne A13 et tous les suivants il les copie comme je le veux à partir de la ligne 14 et en fonction du nom. Mais pourquoi il copie le permier à la ligne 13 ?

A+

Lionel
 

ldexplorer

XLDnaute Junior
Re : erreur dans le code

Robert, je viens de voir d'ailleurs que c'est toi qui avais modifié une premiere fois le code. Tu m'avais donné le code suivant

Code:
Sub IRecap()
 
Dim nom As String 'déclare la variable nom
Dim li As Integer 'déclare la variable li
Dim dest As Range 'déclare la variable dest
 
nom = ActiveSheet.Range("B5").Value  'définit la variable nom
li = ActiveSheet.Range("B65536").End(xlUp).Row 'définit la variable li
With Sheets("Recap") 'prend en compte l'onglet Recap"
 
    'boucle sur toutes les cellules éditées de la colonne A (en partant de A13)
 
    For Each cel In .Range("A13:A" & .Range("A65536").End(xlUp).Row)
 
        If cel.Value = nom Then 'condition : si la valeur de la cellule est egale à nom
            Set dest = cel 'définit la variable dest
            GoTo suite 'va à la balise suite
        End If 'fin de la condition
 
    Next cel 'prochaine cellule de la plage
 
Set dest = .Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest
dest.Value = nom 'place le nom dans la première cellule vide rencontrée
 
End With
 
suite: 'balise
ActiveSheet.Range(Cells(li, 2), Cells(li, 6)).Copy Destination:=dest.Offset(0, 1) 'copie la ligne
End Sub

il fait la copie à partir de la ligne 13, mais pourquoi je n'arrive pas à le faire copier à partir de la ligne14 ?

Peut être vu comme cela c'est plus simple.

A+ et merci au forum et à toi Robert ,
Lionel
 

ldexplorer

XLDnaute Junior
Re : erreur dans le code

robert
Merci Et Encore Merci

Ca Y Est J'ai Trouve La Solution, C'etait Un Probleme Avec La Feuille Recap. La Macro Fontionnait Bien Mais Simplement Il Y Avait Un Nom Similaire En Ligne 12 Qui Parasitait Son Fonctionnement.

A Tres Bientot Et Encore Merci
Lionel
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : erreur dans le code

Bonjour le fil, bonjour le forum,

Regarde Idexplorer :

Code:
Private Sub BoutAjoutFiche_Click()
'date,heure,duree,intervenant,acte,commentaire
'textdate,textheure,comboduree,combointervenant,co mboactes,textcomment
Dim O As Worksheet
Set O = Sheets("ce_vierge")
ligne = O.Range("B65536").End(xlUp).Row + 1
If ligne < 10 Then ligne = 10
O.Cells(ligne, 2).Value = Me.TextDate
O.Cells(ligne, 3).Value = Me.TextHeure
O.Cells(ligne, 4).Value = Me.ComboDurée
O.Cells(ligne, 5).Value = Me.ComboIntervenant
O.Cells(ligne, 6).Value = Me.ComboActes
O.Cells(ligne, 7).Value = Me.TextCommentaires
Set O = Nothing
IRecap
grisage
End Sub

Aucune ligne dans ce code ne permet de modifier le nom de la textbox TextNom. Comme à l'initialisation Il récupère Nom_CE. Si tu le modifies dans l'Userform cela n'est pas répercuté donc dans la macro IRecap on a TOUJOURS Nom= Nom_CE. Dans l'Userform que je t'avais proposé,la modification était répercutée dans l'onglet CE_Vierge. Moi je t'avoue que je ne comprends plus . On tourne en rond mais j'ai l'impression que tu modifie tout et n'importe quoi. En tous cas la dernière modif dont tu parles ne risque pas de fonctionner.

Remplace Nom_CE par un autre nom : DUPONT, DUGLAND ou DUNOEUD, que sais-je ! Et tu verras ça marche !!!!

Modifie cette ligne de IRecap (pour copier aussi le commentaire)

Code:
ActiveSheet.Range(Cells(li, 2), Cells(li, 7)).Copy Destination:=dest.Offset(0, 1) 'copie la ligne
 

ldexplorer

XLDnaute Junior
Re : erreur dans le code

Cher Robert,

le problème ne vient pas de toi ... si jamais tu en doutes.

pour que tu comprennes, le nom_ce vient d'une feuille ce_vierge qui me sert de modèle pour appliquer une macro qui crée automatiquement les nouveaux usagers.

En faite, si j'avais fait les choses dans l'ordre et fait la macro en question, je n'aurais pas tourné en rond pendant un temps certain et je n'aurais pas fait tourné en bourrique (pardonne moi l'expression).

Comme tu l'as très justement fait remarquer, une fois que nom_ce est remplacé par tartempion, il n'y a plus de problèmes..

Sorry, mega sorry,
A bientôt,
Lionel
 

Discussions similaires

Réponses
6
Affichages
165
Réponses
7
Affichages
356

Statistiques des forums

Discussions
312 453
Messages
2 088 551
Membres
103 881
dernier inscrit
malbousquet