Pouvez vous me commenter un code ? :)

naiik - 19 mars 2013 à 15:41
 fabiendag - 21 mars 2013 à 13:28
Bonjour

Serais t'il possible quue vous me commentiez ce code ?
Je suis nul en VB et je n'y comprends rien...

Sub En_revue()

Dim Fichier_traité As String, j As Integer
Dim Chemin As String, DerLig_Fichier_traité As Integer, DerLig As Integer
Dim Première_Ligne As Integer, Dernière_Ligne As Integer, i As Integer, DerLig_IP As Integer

Application.ScreenUpdating = False

ThisWorkbook.Sheets("Feuil1").Range("A2:F1048576").ClearContents
ThisWorkbook.Sheets("Feuil2").Range("A1:C1048576").ClearContents

Chemin = ThisWorkbook.Path & ""
Fichier_traité = Dir(Chemin & "*.*")

Do While Fichier_traité <> ""
        If Fichier_traité = ThisWorkbook.Name Then GoTo Etiquette
    
        Workbooks.Open Chemin & Fichier_traité
        DerLig_Fichier_traité = ActiveWorkbook.ActiveSheet.Range("A1048576").End(xlUp).Row
        For j = 1 To DerLig_Fichier_traité
        If ThisWorkbook.Sheets("Feuil2").Range("A1048576").End(xlUp) = "" Then
            DerLig = 1
        Else
            DerLig = ThisWorkbook.Sheets("Feuil2").Range("A1048576").End(xlUp).Row + 1
        End If
        
        ThisWorkbook.Sheets("Feuil2").Range("A" & DerLig) = CDate(Mid(ActiveWorkbook.ActiveSheet.Range("A" & j), 10, 17))
        ThisWorkbook.Sheets("Feuil2").Range("B" & DerLig) = Mid(ActiveWorkbook.ActiveSheet.Range("A" & j), 179, 11)
        ThisWorkbook.Sheets("Feuil2").Range("C" & DerLig) = Fichier_traité
        Next
        Workbooks(Fichier_traité).Close False
Etiquette:
Fichier_traité = Dir

Loop

Sheets("Feuil2").Activate
Range("A1:C" & Range("A1048576").End(xlUp).Row).Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlNo, Key2:=Range("A1"), Order1:=xlAscending, Header:=xlNo
   
Range("B1").Activate

Retour:

Première_Ligne = ActiveCell.Row

Do Until ActiveCell.Offset(1, 0) <> ActiveCell
    If ActiveCell = "" Then GoTo Etiquette_bis
    ActiveCell.Offset(1, 0).Activate
Loop

Dernière_Ligne = ActiveCell.Row

    With Sheets("Feuil1")
        DerLig_IP = .Range("A1048576").End(xlUp).Row + 1
        
        .Range("A" & DerLig_IP) = Range("B" & Première_Ligne)
        .Range("B" & DerLig_IP) = Dernière_Ligne - Première_Ligne + 1
        .Range("C" & DerLig_IP) = Range("A" & Première_Ligne)
        .Range("D" & DerLig_IP) = Range("C" & Première_Ligne)
        
        If .Range("B" & DerLig_IP) > 1 Then
            .Range("E" & DerLig_IP) = Range("A" & Dernière_Ligne)
            .Range("F" & DerLig_IP) = Range("C" & Dernière_Ligne)
        End If
    
    End With


ActiveCell.Offset(1, 0).Activate

GoTo Retour

Etiquette_bis:

Cells.ClearContents

Sheets("Feuil1").Activate

End Sub

21 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 mars 2013 à 17:01
Bonjour,
Serais t'il possible quue vous me commentiez ce code ?

Le seul commentaire justifié qu'appelle l'examen de ce code est celui-ci :
Code "spaghetti", écrit par un apprenti.
Il vaudra bien mieux que tu définisses tes tenants et aboutissants et que l'on t'aide à écrire un code plus normal que ce "machin", qui n'est pas seulement laid, mais dont l'écriture "à la hussarde" fera qu'il plantera par exemple sur une autre machine qui tournerait avec Excel 2003.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
j'ai une question très technique: le "spaghetti" c'est un nouveau langage ? je connais pas...
et une petite remarque, je sais pas ce qu'en pense les autres, mais moi je ne mets jamais d'accent sur les variables, comme ça moins de risque d'erreurs.


Fabien
0
Si vous etes si malin commenté le
parce que chez moi il fonctionne
0
C'est pas en nous parlant comme cela qu'on va t'aider... je te faisais juste une remarque technique.
Après malin ou pas, c'est toi qui a besoin de nous... moi commenté ce code ne m'apportera rien.
Comme disais ucfoutu, il faudrait mieux que tu nous dises ce que tu veux faire... plutot que nous balancer un code comme ça.
C'est un forum d'aide et non un forum de "faites le a ma place"


Fabien
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dernière remarque, on a jamais dit que ca fonctionnait pas :)


Fabien
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mars 2013 à 14:12
A fabiendag,
On appelle code spaghetti un code qui fonctionne sur le base de "Goto", doublé en plus ici de retours en arrière.
A naiik :
Si vous etes si malin commenté le
parce que chez moi il fonctionne

1) Oui ? personne ne te dira le contraire.
Mais si tu sais qu'il "fonctionne", tu sais ce qu'il fait et rien ne doit alors te freiner dans l'expression de ce qui t'a été demandé :
que tu définisses tes tenants et aboutissants et que l'on t'aide à écrire un code plus normal que ce "machin"

2) je persiste et signe : ce code, utilise une ligne qui
fera qu'il plantera par exemple sur une autre machine qui tournerait avec Excel 2003

Enfin et surtout : ce code est on ne peut plus "simplet" et je ne vois pas ce que n'y comprendrait pas même un débutant de chez débutant !
Alors : quelle est exactement la ligne de code que tu ne comprends pas, toi ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ok ok :p

Ce code dois me permettre de récupérer les adresses IP se trouvant dans plusieurs fichiers d'un meme repertoire
Ensuite déterminer la frequence d'apparition des adresse IP avec la date au plus tot de l'apparition de chaque adresse IP et la date au plus tard

Le probleme que ce code découpe mal les adresse IP


Le fichier a traité :

Le resultat :
0
euh... c'est moi où tu avais déjà ouvert un topic la dessus ?.


Fabien
0
En lancant un autre fichier similaire j'ai une erreur sur cette ligne la :

ThisWorkbook.Sheets("Feuil2").Range("A" & DerLig) = CDate(Mid(ActiveWorkbook.ActiveSheet.Range("A" & j), 10, 17))
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mars 2013 à 14:22
Bonjour, fabiendag,
Sois rassuré : tu ne rêves pas.
A naiik :
curieux, cela :
parce que chez moi il fonctionne

et
Le probleme que ce code découpe mal les adresse IP

Et dis-nous : où, selon toi, est la ligne qui "découpe" ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Aucune idee
C'est du chinois pour moi le vb
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mars 2013 à 14:28
un indice (et je regrette d'avoir à mentionner un point d'aussi bas niveau de connaissances) :
Ouvre ton aide VBA sur le mot Mid. Lis.
(Sans préjudice de ce qyue j'ai eu l'occasion de dire en ce qui concerne TOUT le reste d'un tel "code") !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Aucune idee
C'est du chinois pour moi le vb
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mars 2013 à 14:30
Et si :
C'est du chinois pour moi le vb

passe la main à quelqu'un d'autre ou apprends le, plutôt que de faire ce que tu fais, de surcroît en "relais" d'un véritable "apprenti" !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Aucune idee
C'est du chinois pour moi le vb
0
bon ok le MID renvoie une valeur contenant un nombre indiqué de caractères extraits d'une chaîne de caractères.

mais je sais pas comment modifier sa ...
0
dsl pour les posts "Aucune idee
C'est du chinois pour moi le vb"

Ils se sont envoyé tout seul...
0
dsl pour les posts "Aucune idee
C'est du chinois pour moi le vb"

Ils se sont envoyé tout seul...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mars 2013 à 14:43
Alors : isole donc ton problème. Techniquement et uniquement techniquement (sans rien du reste du code et sans aucune autre "explication"). Uniquement pour découper une chaîne de caractères, quelle qu'elle soit.
Et tu auras une réponse sur ce seul point technique.
Quant au reste : cela ne regarde que ta conscience (celle qui t'a fait accepter sans broncher la maintenance ou l'évolution d'une appli dont tu ignores tout de son langage de développement).
Nous ne somme là :
- ni pour nous substituer à toi
- ni pour t'expliquer un "code" au demeurant (déjà dit) à la fois "simplet" et l'oeuvre d'un autre apprenti.
C'est TOUT ce que, décemment, j'ai à te proposer. A toi de voir, maintenant,n hein ...
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mars 2013 à 14:52
EZt si (et seulement si) tu es prêt à te mettre dans ce que tu as accepté :
1) relis mon message de 14:28:25. As-tu au moins ouverrt, comme demandé, ton aide VBA sur le mot Mid ?
et
2) intéresse-toi à ces deux lignes de code
ThisWorkbook.Sheets("Feuil2").Range("A" & DerLig) = CDate(Mid(ActiveWorkbook.ActiveSheet.Range("A" & j), 10, 17))
        ThisWorkbook.Sheets("Feuil2").Range("B" & DerLig) = Mid(ActiveWorkbook.ActiveSheet.Range("A" & j), 179, 11)

voilà voila !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Rejoignez-nous