Communauté Fb
Follow us on twitter
Les vidéos du site
Le site complément
Dépannage de votre PC

Programmer en vb

Bonjour et bienvenue,

Programmer en VB est le site qui vous fera prendre conscience que vous pouvez concevoir votre programme informatique vous-même, que vous soyez artisan, employé ou étudiant.

Le Visual Basic est un langage informatique très puissant, très flexible et très abordable.
Une version en application se trouve sous Office
Excel pour exemple :
Tapez Alt + F11 à l’aide de votre clavier puis vous voilà dans l’éditeur de code VBA.

Notre forum d’entraide vous offre des tutoriels ainsi que divers exemples tout prêt à adapter à votre projet personnel.
Nous vous demandons uniquement de la bonne humeur et de la bonne volonté pour toutes questions ou toutes aides quelle qu’elle soit.
Sachez que pour progresser rapidement il est conseillé d’aider au mieux les autres membres.
Nous ne sommes pas là pour juger les qualités ou défauts de codes proposés, mais pour trouver ensemble la solution à votre demande.

A vos claviers :

Afin de remplir le forum, nous vous demandons de partager sur les réseaux sociaux et autres.
https://www.facebook.com/AdminPVB/


Merci de nous rejoindre sur http://programmer-en-vb.forumactif.org/
Merci d'avoir pris le temps de lire.
Merci pour votre inscription.

L'équipe de Programmer-en-VB

Forum de programmation VBA et VB.NET

Welcome if you does not speak french,you are able to translate the whole topics with the flags just below of this message. Click to English

Visual Basic Application et VB.net de puissants langages à la portée de tous.

Participez et soyez acteurs des divers forums ci-dessous.

Bienvenue à chaque nouveaux membres et merci à tous ceux qui font vivre ce forum.


Qui est en ligne ?

Il y a en tout 7 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 7 Invités

Aucun


Le record du nombre d'utilisateurs en ligne est de 65 le Mar 8 Juil - 23:40

Statistiques

Nos membres ont posté un total de 5159 messages dans 620 sujets

Nous avons 461 membres enregistrés

L'utilisateur enregistré le plus récent est RACCH

Recherche dans les forums

Utiliser cette méthode afin de trouver rapidement les discussions disponible sur notre forum.


Derniers sujets

» EFFACER LIGNE SUR BASE
par jmcr Hier à 21:54

» Menustrip Vbnet Visual Studio
par Berly Dim 17 Sep - 13:27

» Insertion commentaire dans cellules
par Berly Ven 15 Sep - 20:21

» Chercher un texte dans un commentaire de cellule
par Berly Ven 15 Sep - 20:10

» ameliorer informatique
par jmcr Jeu 14 Sep - 23:19

» question pour le forum
par AdminPVB Jeu 14 Sep - 16:59

» total d'une cellule
par jmcr Lun 11 Sep - 14:51

» CODE ET combobox date enregistrement
par jmcr Lun 11 Sep - 14:49

» compter le nombre de lignes dans un listbox
par jmcr Dim 10 Sep - 11:24

» dossier pdf
par jmcr Mer 6 Sep - 21:40

» suppression d'un fichier txt en cours d'utilisation
par La boc Mar 5 Sep - 20:12

» Boucle sur DataGridView
par AdminPVB Ven 1 Sep - 20:50

» RECHERCHE COMPTABILISER NOMBRE carte
par grisan29 Mar 29 Aoû - 17:49

» ancien temps mis au moderne
par Berly Mar 29 Aoû - 17:18

» Liers des tables dans une BDD
par La boc Mar 29 Aoû - 11:01

Utiliser le bouton résolu

Dans votre message d'origine
cliquer sur le bouton



Ensuite tout en bas sur
Modifier le titre du sujet
cliquer sur le bouton

Résolu !!!

Ensuite changer l’icône du sujet par le bouton

Voilà pas plus compliqué que cela.


Merci pour votre présence ou passage sur le site de programmer-en-vb

Partenaires


créer un forum



Annuaire referencement


Flux RSS


MSN 

Septembre 2017

LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 

Calendrier Calendrier

Menustrip Vbnet Visual Studio

Sam 16 Sep - 21:05 par Berly

Bonsoir le Forum  Very Happy

Je suis actuellement en construction  d'un logiciel pour les enfants en scolarité primaire.(Visual Studio Community 2017)

Je l'ai commencé et il fonctionne parfaitement a ce stade.

J'utilise Le contrôle MenuSrip.

Au commencement il est question d'afficher par catégorie tables de 1 a 10 .
Un Premier Bouton "Tables de Multiplications" Aucun événement 
Puis Ajouts …

[ Lecture complète ]
suppression d'un fichier txt en cours d'utilisation

Mar 5 Sep - 9:51 par La boc

Bonjour,

dans mon application j'ai un fichier txt qui est chargé dans un DataGridView en fonction du n° ID.

Quand je supprime un ID, je dois aussi supprimer ce fichier, quand je fait un delete ça marche bien, le fichier est bien supprimé du dossier mais quand je ferme l'application j'ai un message box:

"Violation de l’accès concurrentiel:
Delete command a effectué 0 des enregistrements …

[ Lecture complète ]
Boucle sur DataGridView

Jeu 31 Aoû - 8:25 par La boc

Bonjour as tous,

J'ai laissé tomber la BDD avec les tables pour mes factures, parce-que j'ai plus de 850 entrées à gérer et ça va être un peu trop lourd.

Je suis donc partis sur des DataGridView pour emplir mes factures, et au lieu d'enregistrer dans une BDD j'enregistre dans un fichier txt et je recharge les fchier en fonction du nom du client.

Jusque là pas de problème.

Je voudrais …

[ Lecture complète ]
Liers des tables dans une BDD

Lun 28 Aoû - 15:08 par La boc

Bonjour à tous,

Je sèche sur un problème visiblement simple, mais impossible de faire quelque chose qui fonctionne!

Voilà dans une base de données access j'ai deux tables, une table client et une table facture, je souhaiterais lier les ID des deux tables pour que quand je choisis un id client j'ai sa facture dans la table facture.

Je fais une application VBNET avec Visulal studio comunity …

[ Lecture complète ]
Application

Lun 15 Mai - 19:02 par Berly

Bonjour le forum

Souci dans une nouvelle application.

Total des énoncés =3

Ecriture de l'énoncé 1 dans un Textbox.

Je voulais créer plusieurs problèmes différents.
Dons pour cela j'ai créé 3 sub  Laughing.

Lors de l'événement clic sur le bouton créé pour visualiser le premier énoncé celui ci s'affiche correctement Very Happy .
Suite a cela l'utilisateur donne le résultat ,et un Msgbox …

[ Lecture complète ]
Obtenir le volume sonore enregistré par le micro

Sam 10 Sep - 13:29 par Nayl.VBcoder

Bonjour,

Je cherche à avoir le volume sonore de la pièce en temps réel, et l'afficher dans une ProgressBar.
Je ne vois pas comme plus décrire mon problème.

Merci de vos réponses.

Petits bidouillages pour ce faciliter La vie ,Astuces et codes pratique

Dim 11 Juin - 12:20 par Berly

Bonjour le Forum  Very Happy.

Lorsque j'écrivais dans mon code Console.Writeline ("Patati,Patata,......) ,j'ai d'abord utilisé le copié collé en changeant la valeur du texte .

Bon d'accord ,c'est bien mais ,ça me saoul un peu ,au fur et a mesure de mes apprentissages ,j'ai découvert les fonctions  Very Happy.

Maintenant je partage celle ci avec vous .

On est la sur un exemple de code en "Mode …

[ Lecture complète ]
Utilisation d'un objet son (Wav)

Jeu 18 Mai - 21:48 par Berly

Bonjour le forum 

Voila , je voudrais savoir si on peut créer un tableau d'objets son.
Difficile de trouver ce genre d'information .

Les sons  sont intégrés en ressources programme.

Merci  Very Happy
Code:
[Module Module1
    Dim son1 = New System.Media.SoundPlayer(My.Resources._0283)
    Dim son2 = New System.Media.SoundPlayer(My.Resources._0863)
    Dim son3 = New …


[ Lecture complète ]
Ressource Vb.net

Ven 5 Mai - 22:29 par Berly

Bonsoir le forum

Toujours a la recherche de ressources ,je partage avec vous une nouvelle ressource  Wink.

Bonne lecture .

https://vbnetpourtous.wordpress.com/2012/12/13/les-variables/


Accélérer un code?

Partagez
avatar
danpom302
Step_Three_VBA
Step_Three_VBA

Localisation : Québec
Messages : 368
Date d'inscription : 23/09/2013
Age : 66

Résolu Accélérer un code?

Message par danpom302 le Sam 26 Nov - 22:32

Bonjour à tous,

Je me demandais si c'était possible d'accélérer l'exécution du code suivant. C'est très long à partir de transposer. Je suis conscient que la macro doit traiter plusieurs lignes mais c'est long entre tous les collage transposé.

Code:
Sub Word_Excel()
'
' Touche de raccourci du clavier: Ctrl+g
'
' Effacer les données B1,D2:DA
    Range("B:B,D2:CBC3000").Select
    Selection.ClearContents
    Range("D2").Select

' Récupérer toutes les données Word
    Dim WordDoc As Word.Document
    Dim WordApp As Word.Application

' Accéder au document Word
    Set WordApp = New Word.Application
    WordApp.Visible = False
    Set WordDoc = WordApp.Documents.Open("C:\Users\Utilisateur\Documents\Examens Sarah\Projet Word vers Excel\Template_6.docx", ReadOnly:=True)

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

    With WordApp
        .Selection.WholeStory
        .Selection.Copy
    End With

    ActiveSheet.Range("B1").Select
    ActiveSheet.Paste
       
' Supprimer_lignes_vides Macro
    Range("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
   
    Range("C4").Select
    Selection.Copy
    Range("C2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.AutoFill Destination:=Range("C2:C5000")
    Range("C2").Select

' Sélectionner et copier A1 puis, coller les formules dans la plage A1:A5000
    Range("A1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("A1:A5000").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Range("A1").Select

' Transposer
    Dim i As Long, j As Integer, k As Integer, m As Integer, e As Integer
    Dim ligne1 As Integer, ligne2 As Integer
      ligne1 = 1
    With Sheets("InfosWord")
      For i = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
        If Left(.Range("A" & i).Value, 1) = 1 Then
        If ligne1 = 1 And ligne2 = 2 Then
        If ligne2 = e Then ligne2 = i - 1
       
    Else:
        ligne1 = ligne2 + 1
        If ligne2 <> 1 Then ligne2 = i - 1
        End If
        k = .Range("D10000").End(xlUp).Row + 1
        For j = ligne1 To ligne2
        .Range("D" & k).Offset(0, m).Value = .Range("B" & j)
        m = m + 1
        Next
        m = 0

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

End If
        Next i

' Décaler vers la droite les cellules contenants QUESTIONS INDÉPENDANTES
Dim ligne As Long
' Trouve la première cellule non vide au bas de la colonne D
ligne = [d:d].Find("*", , , , 1, 2).Row
' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

For i = ligne To 2 Step -1

    If Range("D" & i).Value = "QUESTIONS INDÉPENDANTES" Then Range("E" & i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

Next
' Raffraichir l'écran
Application.ScreenUpdating = True
   
    Sheets("Source").Select
    Range("A1").Select
   
End With

End Sub


Merci pour votre aide,

Dan
avatar
AdminPVB
Admin
Admin

Localisation : France Nord 59
Messages : 1843
Date d'inscription : 24/05/2013
Age : 41

Résolu Re: Accélérer un code?

Message par AdminPVB le Lun 28 Nov - 18:45

Bonjour
On n'oublie pas le poste dès que je trouve du temps je regarderai a moins qu'un autre membre te simplifie le code entretemps
A+


_________________
Avatar


Bienvenue sur

Dans votre message d'origine cliquer sur le bouton

Tout en bas sur Modifier le titre du sujet cliquer sur le bouton : Résolu !!!
Changer l’icône du sujet par le bouton

Tout simplement.


Merci pour votre présence ou passage sur le site de programmer-en-vb

Celui qui croit tout connaitre, ne connait sans doute pas grand chose,chacun apporte son savoir, mais on a tous tout à apprendre ....  

study

avatar
grisan29
Modérateur
Modérateur

Localisation : BRETAGNE Nord 29
Messages : 766
Date d'inscription : 25/07/2013
Age : 54

Résolu Re: Accélérer un code?

Message par grisan29 le Lun 28 Nov - 22:23

bonsoir danpom302, AdminPVB

danpom302 il fallu que je regarde sur un classeur si j'avais autant de colonne que donnes dans ta 1ère partie de code lol! D2:CBC3000 je pense peut etre que C est en trop

bon j'ai essayer d'enlever les .select superflu, maintenant tu n'as plus que essayer car moi et la liaison excel-word il y a un gros fossé entre nous
je m'y suis jamais poser la question

Code:
Sub Word_Excel()
    '
    ' Touche de raccourci du clavier: Ctrl+g
    '
    ' Effacer les données B1,D2:DA
        Range("B:B,D2:CBC3000").ClearContents '=====CBC ???
        
    ' Récupérer toutes les données Word
        Dim WordDoc As Word.Document
        Dim WordApp As Word.Application

    ' Accéder au document Word
        Set WordApp = New Word.Application
        WordApp.Visible = False
        Set WordDoc = WordApp.Documents.Open("C:\Users\Utilisateur\Documents\Examens Sarah\Projet Word vers Excel\Template_6.docx", ReadOnly:=True)

    ' Ne pas raffraichir l'écran
            Application.ScreenUpdating = False

        With WordApp
            .WholeStory
            .Copy
        End With

        ActiveSheet.Range("B1").Select
        ActiveSheet.Paste
            
    ' Supprimer_lignes_vides Macro
        Range("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        
        'Range("C4").Copy
        'Range("C2").Select
 Range("C4").Copy
ActiveSheet.Paste Destination:=Range("C2")
        'ActiveSheet.Paste
   ' Application.CutCopyMode = False
    'Selection.AutoFill Destination:=Range("C2:C5000")
    'Range("C2").Select

    ' Sélectionner et copier A1 puis, coller les formules dans la plage A1:A5000
        Range("A1").Copy 'Select
        'Application.CutCopyMode = False
        'Selection.
        Range("A1:A5000").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
      
    ' Transposer
        Dim i As Long, j As Integer, k As Integer, m As Integer, e As Integer
        Dim ligne1 As Integer, ligne2 As Integer
           ligne1 = 1
        With Sheets("InfosWord")
           For i = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
             If Left(.Range("A" & i).Value, 1) = 1 Then
             If ligne1 = 1 And ligne2 = 2 Then
             If ligne2 = e Then ligne2 = i - 1
            
        Else:
             ligne1 = ligne2 + 1
             If ligne2 <> 1 Then ligne2 = i - 1
             End If
             k = .Range("D10000").End(xlUp).Row + 1
             For j = ligne1 To ligne2
             .Range("D" & k).Offset(0, m).Value = .Range("B" & j)
             m = m + 1
             Next
             m = 0

    ' Ne pas raffraichir l'écran
            Application.ScreenUpdating = False

    End If
             Next i

    ' Décaler vers la droite les cellules contenants QUESTIONS INDÉPENDANTES
    Dim ligne As Long
    ' Trouve la première cellule non vide au bas de la colonne D
    ligne = [d:d].Find("*", , , , 1, 2).Row
    ' Ne pas raffraichir l'écran
            Application.ScreenUpdating = False

    For i = ligne To 2 Step -1

        If Range("D" & i).Value = "QUESTIONS INDÉPENDANTES" Then Range("E" & i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

    Next
    ' Raffraichir l'écran
    Application.ScreenUpdating = True
        
        Sheets("Source").Range("A1").Select
        
        
    End With

    End Sub


si c'est bon enlève le superflu que j'ai mis en commentaire, car c'est un code issu de l'enregistreur si je ne me trompe
peut être que  range ("C4") qui est copié dans ("C2") de la même feuille  ne doit pas être ce que tu attends, mais j'ai fait le teste a partir de cette réduction
qui copie une cellule vers une autre feuille dans le même classeur

Code:
Worksheets("feuil1").Range("C2").Copy
ActiveSheet.Paste Destination:=Worksheets("S1").Range("D7")

ce code avait une flopée de ligne en trop issu de l'enregistreur de macros
j'ai modifié ce morceau de code mais je n'avais pas vu qu'il fallait dupliquer la formule de A1 dans toutes la colonnes A jusque 5000, voici l'original
Code:
' Sélectionner et copier A1 puis, coller les formules dans la plage A1:A5000
    Range("A1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("A1:A5000").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Range("A1").Select
 et dans le même classeur il y aussi un code qui transmets les formules dans les cellules adéquates
tu pourrai peut etre en tirer quelque chose car pour ce soir il est temps pour mes yeux qui commence a se fermer seul

Code:
Sub copyegaleF1versS1()
'
' copyegaleF1versS1 Macro
'

'
    Sheets("Feuil1").SmallScroll ToRight:=5
    With Sheets("S1")
        .Range("E7").FormulaR1C1 = "=Feuil1!R[-5]C[15]"
        .Range("E8").FormulaR1C1 = "=Feuil1!R[-6]C[16]"
        .Range("E9").FormulaR1C1 = "=Feuil1!R[-7]C[19]"
        .Range("E10").FormulaR1C1 = "=Feuil1!R[-8]C[20]"
        .Range("E11").FormulaR1C1 = "=Feuil1!R[-9]C[21]"
        .Range("E14").FormulaR1C1 = "=Feuil1!R[-12]C[22]"
        .Range("E15").FormulaR1C1 = "=Feuil1!R[-13]C[23]"
        .Range("E16").FormulaR1C1 = "=Feuil1!R[-14]C[24]"
        .Range("E18").FormulaR1C1 = "=Feuil1!R[-16]C[25]"
        .Range("E19").FormulaR1C1 = "=Feuil1!R[-17]C[26]"
        .Range("E20").FormulaR1C1 = "=Feuil1!R[-18]C[27]"
        .Range("E21").Select
    End With
End Sub


il ne met la formule que la cellule d'une autre feuille a un emplacement défini par R[-5] mais notre AdminPVb doit avoir autre chose de plus concret dans sa besace


_________________
Pascal
http://vbaddict.altervista.org/Fichier_upload/grisan29/13.php

Comment mettre votre sujet en résolu.
 
Dans votre message d'origine

cliquer sur le bouton



Ensuite tout en bas sur 
Modifier le titre du sujet 
cliquer sur le bouton 

Résolu !!!

avatar
danpom302
Step_Three_VBA
Step_Three_VBA

Localisation : Québec
Messages : 368
Date d'inscription : 23/09/2013
Age : 66

Résolu Re: Accélérer un code?

Message par danpom302 le Mar 29 Nov - 1:12

Bonsoir Grisan29,

Merci pour tes suggestions. J'avais remarqué l'erreur Sad au niveau du D2:CBC3000 après avoir posté ma demande et je l'ai corrigé pour D2:CK3000 car j'ai rajouté des colonnes. Document évolutif pour ma fille qui m'apporte du nouveau à l'occasion.

Je voulais essayer mon code en retirant les .Select superflus mais j'ai un problème avec les For et Next. Selon moi, le ou les Next sont pas placés au bons endroits et je ne parviens pas à corriger le tout pour exécuter mon code. As-tu une idée? Si non, sûrement adminPVB? Very Happy

Pour les copier/coller en C4 vers C2, j'ai insérer une formule en C2 et je la copie jusqu'à C3000. Beaucoup plus simple et rapide et j'ai fait de même avec la cellule C1.

Voici mon code corrigé ci-après.

Code:

Sub Word_Excel()
'
' Touche de raccourci du clavier: Ctrl+g
'
' Effacer les données B1,D2:DA
    Range("B:B,D2:CK3000").ClearContents
    Range("B1").Select

' Récupérer toutes les données Word
    Dim WordDoc As Word.Document
    Dim WordApp As Word.Application

' Accéder au document Word
    Set WordApp = New Word.Application
    WordApp.Visible = False
    Set WordDoc = WordApp.Documents.Open("C:\Users\Utilisateur\Documents\Examens Sarah\Projet Word vers Excel\Template_8.docx", ReadOnly:=True)

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

    With WordApp
        .Selection.WholeStory
        .Selection.Copy
    End With

    ActiveSheet.Range("B1").Select
    ActiveSheet.Paste
       
' Supprimer_lignes_vides Macro
    Range("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
   
' Sélectionner et copier A1 puis, coller les formules dans la plage A1:A5000
    Range("A1").FormulaLocal = "=SI(B1="""";1;SI(GAUCHE(B1;4)=""Mise"";1;SI(DROITE(B1;13)=""INDÉPENDANTES"";1;2)))"
    Range("A1").Select
    Selection.AutoFill Destination:=Range("A1:A3000")
       
' Sélectionner et copier C2 puis, coller les formules dans la plage C2:C3000
    Range("C2").Value = ""
    Range("C2").FormulaLocal = "=SI(A2="""";"""";LIGNE(1:1))"
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C3000")
    Range("D2").Select

' Transposer
    Dim i As Long, j As Integer, k As Integer, m As Integer, e As Integer
    Dim ligne1 As Integer, ligne2 As Integer
      ligne1 = 1
    With Sheets("InfosWord")
      For i = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
        If Left(.Range("A" & i).Value, 1) = 1 Then
        If ligne1 = 1 And ligne2 = 2 Then
        If ligne2 = e Then ligne2 = i - 1
       
    Else:
        ligne1 = ligne2 + 1
        If ligne2 <> 1 Then ligne2 = i - 1
        End If
        k = .Range("D3000").End(xlUp).Row + 1
        For j = ligne1 To ligne2
        .Range("D" & k).Offset(0, m).Value = .Range("B" & j)
        m = m + 1
        Next
        m = 0

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

End If
        Next i

' Décaler vers la droite les cellules contenants QUESTIONS INDÉPENDANTES
Dim ligne As Long

' Trouve la première cellule non vide au bas de la colonne D
        ligne = [d:d].Find("*", , , , 1, 2).Row

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

For i = ligne To 2 Step -1
    If Range("D" & i).Value = "QUESTIONS INDÉPENDANTES" Then
    Range("E" & i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

Next
For j = ligne To 2 Step -1
    If Range("CN" & i).Value = "QUESTIONS INDÉPENDANTES" Then
    Range("CM" & i).Delete Shift:=xlToLeft

' Raffraichir l'écran
Application.ScreenUpdating = True
   
    Sheets("Source").Select
    Range("A1").Select

End Sub

Merci pour votre aide,

Dan



avatar
grisan29
Modérateur
Modérateur

Localisation : BRETAGNE Nord 29
Messages : 766
Date d'inscription : 25/07/2013
Age : 54

Résolu Re: Accélérer un code?

Message par grisan29 le Mar 29 Nov - 6:06

bonjour Danpom302
observe bien ton code car le souci du For next se trouve dans ce bloc a mon avis

Code:
' Transposer
        Dim i As Long, j As Integer, k As Integer, m As Integer, e As Integer
        Dim ligne1 As Integer, ligne2 As Integer
           ligne1 = 1
        With Sheets("InfosWord")
           For i = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
             If Left(.Range("A" & i).Value, 1) = 1 Then
             If ligne1 = 1 And ligne2 = 2 Then
             If ligne2 = e Then ligne2 = i - 1
           
        Else:
             ligne1 = ligne2 + 1
             If ligne2 <> 1 Then ligne2 = i - 1
             End If
             k = .Range("D3000").End(xlUp).Row + 1
             For j = ligne1 To ligne2
             .Range("D" & k).Offset(0, m).Value = .Range("B" & j)
             m = m + 1
             Next
             m = 0

    ' Ne pas raffraichir l'écran
            Application.ScreenUpdating = False

    End If
             Next i


la procédure commence par un "With" mais ne fini pas car il n'y a pas de "end with"
par ailleurs le next i je pense qu'il serai mieux au desus de end if

autrement dans les codes créer a l'enregistreur il y a ceci aussi qui mis quand on créer le code

Code:
 Range("B:B,D2:CK3000").ClearContents
        'Range("B1").Select '=========================== il y en a 2ou4 en tout



voici le codes avec quelques corrections dont celle citées et des plus comme la lecture des codes plus clairs une fois indentées
surtout dans la partie qui te pose des soucis de for next ou if end if, il faut toujours commencer par indenté son code pour voir les manque où les trop

en cadeau je t'ai laisser un défaut de for next  en bas du code et tu devrai le voir il y a 2 for pour 1 next

Code:
Sub Word_Excel()
'
' Touche de raccourci du clavier: Ctrl+g
'
' Effacer les données B1,D2:DA
    Range("B:B,D2:CK3000").ClearContents
   
' Récupérer toutes les données Word
    Dim WordDoc As Word.Document
    Dim WordApp As Word.Application
   
' Accéder au document Word
    Set WordApp = New Word.Application
    WordApp.Visible = False
    Set WordDoc = WordApp.Documents.Open("C:\Users\Utilisateur\Documents\Examens Sarah\Projet Word vers Excel\Template_8.docx", ReadOnly:=True)
   
' Ne pas raffraichir l'écran
    Application.ScreenUpdating = False
'With
    WordApp.WholeStory.Copy
   
    ActiveSheet.Range("B1").Select
    ActiveSheet.Paste
   
' Supprimer_lignes_vides Macro
    Range("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
   
' Sélectionner et copier A1 puis, coller les formules dans la plage A1:A5000
    Range("A1").FormulaLocal = "=SI(B1="""";1;SI(GAUCHE(B1;4)=""Mise"";1;SI(DROITE(B1;13)=""INDÉPENDANTES"";1;2)))"
    Range("A1").AutoFill Destination:=Range("A1:A3000")
           
    ' Sélectionner et copier C2 puis, coller les formules dans la plage C2:C3000
With Range("C2")
    .Value = ""
    .FormulaLocal = "=SI(A2="""";"""";LIGNE(1:1))"
    .AutoFill Destination:=Range("C2:C3000")
End With

' Transposer
Dim i As Long, j As Integer, k As Integer, m As Integer, e As Integer
Dim ligne1 As Integer, ligne2 As Integer
ligne1 = 1
With Sheets("InfosWord")
    For i = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
        If Left(.Range("A" & i).Value, 1) = 1 Then
            If ligne1 = 1 And ligne2 = 2 Then
                If ligne2 = e Then ligne2 = i - 1
               
                Else:
                ligne1 = ligne2 + 1
                If ligne2 <> 1 Then ligne2 = i - 1
            End If
            k = .Range("D3000").End(xlUp).Row + 1
            For j = ligne1 To ligne2
                .Range("D" & k).Offset(0, m).Value = .Range("B" & j)
                m = m + 1
            Next
            m = 0
           
' Ne pas raffraichir l'écran
            Application.ScreenUpdating = False
            Next i
        End If
    End With

    ' Décaler vers la droite les cellules contenants QUESTIONS INDÉPENDANTES
Dim ligne As Long

' Trouve la première cellule non vide au bas de la colonne D
ligne = [d:d].Find("*", , , , 1, 2).Row

' Ne pas raffraichir l'écran
Application.ScreenUpdating = False

For i = ligne To 2 Step -1
    If Range("D" & i).Value = "QUESTIONS INDÉPENDANTES" Then
        Range("E" & i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
       
    Next
    For j = ligne To 2 Step -1
        If Range("CN" & i).Value = "QUESTIONS INDÉPENDANTES" Then
            Range("CM" & i).Delete Shift:=xlToLeft
           
' Raffraichir l'écran
            Application.ScreenUpdating = True
           
            Sheets("Source").Select
'Range("A1").Select
End Sub

c'est comme ces 2 lignes de codes que je n'arrive pas a réduire je me pose la question de leur utilité
 
Code:
ActiveSheet.Range("B1").Select
        ActiveSheet.Paste


pour tes test mets les en commentaire une fois que les for next réglé et re-teste


_________________
Pascal
http://vbaddict.altervista.org/Fichier_upload/grisan29/13.php

Comment mettre votre sujet en résolu.
 
Dans votre message d'origine

cliquer sur le bouton



Ensuite tout en bas sur 
Modifier le titre du sujet 
cliquer sur le bouton 

Résolu !!!

avatar
danpom302
Step_Three_VBA
Step_Three_VBA

Localisation : Québec
Messages : 368
Date d'inscription : 23/09/2013
Age : 66

Résolu Re: Accélérer un code?

Message par danpom302 le Mar 29 Nov - 16:33

Bonjour grisan29,

Merci pour tes suggestions et commentaires.

Mon problème concernant le For, Next et End With est réglé comme suit :

Code:
End If

' Raffraichir l'écran
Application.ScreenUpdating = True

End If
Next
End With
   
' Sélectionner les cellules CM2:DA2 puis les coller en descendant en CM2:DA3000
    Range("CM2:DA2").Select
    Selection.AutoFill Destination:=Range("CM2:DA3000")
   
' Sélectionner la cellule A1 puis enregistrer le classeur
    Range("A1").Select
    ActiveWorkbook.Save
   
End Sub
avatar
grisan29
Modérateur
Modérateur

Localisation : BRETAGNE Nord 29
Messages : 766
Date d'inscription : 25/07/2013
Age : 54

Résolu Re: Accélérer un code?

Message par grisan29 le Mar 29 Nov - 16:41

bonjour danpom302

tant mieux si tu as réglé tes soucis de for next mais les lignes que tu présente
ne sont pas dans le code qui est donné, et la 1ère ligne tu peux l'écrire comme ceci

Code:
' Sélectionner les cellules CM2:DA2 puis les coller en descendant en CM2:DA3000
    Range("CM2:DA2").AutoFill Destination:=Range("CM2:DA3000")

et que penses tu de la lisibilité du code que je t'ai mis en premier pour le manque de "end with"
quand tu le vois dans le code complet


_________________
Pascal
http://vbaddict.altervista.org/Fichier_upload/grisan29/13.php

Comment mettre votre sujet en résolu.
 
Dans votre message d'origine

cliquer sur le bouton



Ensuite tout en bas sur 
Modifier le titre du sujet 
cliquer sur le bouton 

Résolu !!!

avatar
danpom302
Step_Three_VBA
Step_Three_VBA

Localisation : Québec
Messages : 368
Date d'inscription : 23/09/2013
Age : 66

Résolu Re: Accélérer un code?

Message par danpom302 le Mar 29 Nov - 20:04

Bonjour grisan29,

J'utilise toutes tes recommandation et c'est beaucoup mieux ainsi.

J'ai remis le document Excel à ma fille pour essai à son bureau.

Si elle avait entré toutes les données du document Word dans Excel comme la macro le fait, il lui aurait fallu environ deux jours de transcription. Avec la macro, 40 à 60 secondes et pas d'erreur de transcription comme lorsque c'est fait à la main. Incroyable!

Merci à toi et adminpvb qui je crois, travaille toujours sur le code transposer pour accélérer le traitement.

Je vous transmets le dernier code que j'utilise :

Code:

Sub Word_Excel()
'
' Transférer document Word vers Excel et transposer les données
'
' Touche de raccourci du clavier: Ctrl+g
'
' Effacer les données B1,D2:DA
    Range("B:B,D2:CK3000").ClearContents
   
' Récupérer toutes les données Word
    Dim WordDoc As Word.Document
    Dim WordApp As Word.Application

' Accéder au document Word
    Set WordApp = New Word.Application
    WordApp.Visible = False
    Set WordDoc = WordApp.Documents.Open("C:\Users\Utilisateur\Documents\Examens Sarah\Projet Word vers Excel\Template_10.docx", ReadOnly:=True)

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

    With WordApp
        .Selection.WholeStory
        .Selection.Copy
    End With

    ActiveSheet.Range("B1").Select
    ActiveSheet.Paste
       
' Supprimer_lignes_vides Macro
    Range("B1:B3000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
   
' Colonne B renvoyer à la ligne
    Columns("B:B").Select
    With Selection
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = -1
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
   
' Sélectionner et copier A1 puis, coller les formules dans la plage A1:A5000
    Range("A1").FormulaLocal = "=SI(B1="""";1;SI(GAUCHE(B1;4)=""Mise"";1;SI(DROITE(B1;13)=""INDÉPENDANTES"";1;2)))"
    Range("A1").Select
    Selection.AutoFill Destination:=Range("A1:A3000")
       
' Sélectionner et copier C2 puis, coller les formules dans la plage C2:C3000
    Range("C2").Value = ""
    Range("C2").FormulaLocal = "=SI(A2="""";"""";LIGNE(1:1))"
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C3000")
    Range("D2").Select

' Transposer
    Dim i As Long, j As Integer, k As Integer, m As Integer, e As Integer
    Dim ligne1 As Integer, ligne2 As Integer
      ligne1 = 1
    With Sheets("InfosWord")
      For i = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
        If Left(.Range("A" & i).Value, 1) = 1 Then
        If ligne1 = 1 And ligne2 = 2 Then
        If ligne2 = e Then ligne2 = i - 1
       
    Else:
        ligne1 = ligne2 + 1
        If ligne2 <> 1 Then ligne2 = i - 1
        End If
        k = .Range("D3000").End(xlUp).Row + 1
        For j = ligne1 To ligne2
        .Range("D" & k).Offset(0, m).Value = .Range("B" & j)
        m = m + 1
        Next
        m = 0

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

End If
        Next i

' Décaler vers la droite les cellules contenants QUESTIONS INDÉPENDANTES
Dim ligne As Long

' Trouve la première cellule non vide au bas de la colonne D
        ligne = [d:d].Find("*", , , , 1, 2).Row

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

For i = ligne To 2 Step -1
    If Range("D" & i).Value = "QUESTIONS INDÉPENDANTES" Then
    Range("E" & i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    If Range("CN" & i).Value = "QUESTIONS INDÉPENDANTES" Then
    Range("CM" & i).Delete Shift:=xlToLeft
End If

' Raffraichir l'écran
Application.ScreenUpdating = True

End If
Next
End With
   
' Sélectionner les cellules CM2:DA2 puis les coller en descendant en CM2:DA3000
    Range("CM2:DA2").Select
    Selection.AutoFill Destination:=Range("CM2:DA3000")
   
' Sélectionner la cellule A1 puis enregistrer le classeur
    Range("A1").Select
    ActiveWorkbook.Save
   
End Sub


Merci et bonne soirée,

Dan

avatar
grisan29
Modérateur
Modérateur

Localisation : BRETAGNE Nord 29
Messages : 766
Date d'inscription : 25/07/2013
Age : 54

Résolu Re: Accélérer un code?

Message par grisan29 le Mar 29 Nov - 20:41

bonsoir danpom302
tant mieux si le code fonctionne bien mais tu persiste a garder des .select que j'ai déja enlever dans les autres codes

Code:
Sub Word_Excel()
    '
    ' Transférer document Word vers Excel et transposer les données
    '
    ' Touche de raccourci du clavier: Ctrl+g
    '
    ' Effacer les données B1,D2:DA
        Range("B:B,D2:CK3000").ClearContents
       
    ' Récupérer toutes les données Word
        Dim WordDoc As Word.Document
        Dim WordApp As Word.Application

    ' Accéder au document Word
        Set WordApp = New Word.Application
        WordApp.Visible = False
        Set WordDoc = WordApp.Documents.Open("C:\Users\Utilisateur\Documents\Examens Sarah\Projet Word vers Excel\Template_10.docx", ReadOnly:=True)

    ' Ne pas raffraichir l'écran
            Application.ScreenUpdating = False

        WordApp.WholeStory.Copy
       

        ActiveSheet.Range("B1").Select
        ActiveSheet.Paste
           
    ' Supprimer_lignes_vides Macro
        Range("B1:B3000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
       
    ' Colonne B renvoyer à la ligne
        With Columns("B:B")
            .WrapText = True
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = -1
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
       
    ' Sélectionner et copier A1 puis, coller les formules dans la plage A1:A5000
        Range("A1").FormulaLocal = "=SI(B1="""";1;SI(GAUCHE(B1;4)=""Mise"";1;SI(DROITE(B1;13)=""INDÉPENDANTES"";1;2)))"
        Range("A1").AutoFill Destination:=Range("A1:A3000")
           
    ' Sélectionner et copier C2 puis, coller les formules dans la plage C2:C3000
        Range("C2").Value = ""
        Range("C2").FormulaLocal = "=SI(A2="""";"""";LIGNE(1:1))"
        Range("C2").AutoFill Destination:=Range("C2:C3000")
        'Range("D2").Select

    ' Transposer
        Dim i As Long, j As Integer, k As Integer, m As Integer, e As Integer
        Dim ligne1 As Integer, ligne2 As Integer
           ligne1 = 1
        With Sheets("InfosWord")
           For i = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
             If Left(.Range("A" & i).Value, 1) = 1 Then
             If ligne1 = 1 And ligne2 = 2 Then
             If ligne2 = e Then ligne2 = i - 1
           
        Else:
             ligne1 = ligne2 + 1
             If ligne2 <> 1 Then ligne2 = i - 1
             End If
             k = .Range("D3000").End(xlUp).Row + 1
             For j = ligne1 To ligne2
             .Range("D" & k).Offset(0, m).Value = .Range("B" & j)
             m = m + 1
             Next
             m = 0

    ' Ne pas raffraichir l'écran
            Application.ScreenUpdating = False

    End If
             Next i

    ' Décaler vers la droite les cellules contenants QUESTIONS INDÉPENDANTES
    Dim ligne As Long

    ' Trouve la première cellule non vide au bas de la colonne D
            ligne = [d:d].Find("*", , , , 1, 2).Row

    ' Ne pas raffraichir l'écran
            Application.ScreenUpdating = False

    For i = ligne To 2 Step -1
        If Range("D" & i).Value = "QUESTIONS INDÉPENDANTES" Then
        Range("E" & i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        If Range("CN" & i).Value = "QUESTIONS INDÉPENDANTES" Then
        Range("CM" & i).Delete Shift:=xlToLeft
    End If

    ' Raffraichir l'écran
    Application.ScreenUpdating = True

    End If
    Next
    End With
       
    ' Sélectionner les cellules CM2:DA2 puis les coller en descendant en CM2:DA3000
        Range("CM2:DA2").AutoFill Destination:=Range("CM2:DA3000")
       
    ' Sélectionner la cellule A1 puis enregistrer le classeur
        Range("A1").Select
        ActiveWorkbook.Save
       
    End Sub


_________________
Pascal
http://vbaddict.altervista.org/Fichier_upload/grisan29/13.php

Comment mettre votre sujet en résolu.
 
Dans votre message d'origine

cliquer sur le bouton



Ensuite tout en bas sur 
Modifier le titre du sujet 
cliquer sur le bouton 

Résolu !!!

avatar
danpom302
Step_Three_VBA
Step_Three_VBA

Localisation : Québec
Messages : 368
Date d'inscription : 23/09/2013
Age : 66

Résolu Re: Accélérer un code?

Message par danpom302 le Mar 29 Nov - 21:31

Bonsoir grisan29,

Je ne vois pas quel .Select je pourrais enlever dans cette dernière version de mon code.

Code:
Sub Word_Excel()
'
' Transférer document Word vers Excel et transposer les données
'
' Touche de raccourci du clavier: Ctrl+g
'
' Effacer les données B1:B3000,D2:CK3000
    Range("B1:B3000").ClearContents
    Range("D2:CK3000").ClearContents
   
' Récupérer toutes les données Word
    Dim WordDoc As Word.Document
    Dim WordApp As Word.Application

' Accéder au document Word
    Set WordApp = New Word.Application
    WordApp.Visible = False
    Set WordDoc = WordApp.Documents.Open("C:\Users\Utilisateur\Documents\Examens Sarah\Projet Word vers Excel\Template_10.docx", ReadOnly:=True)

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

    With WordApp
        .Selection.WholeStory
        .Selection.Copy
    End With

    ActiveSheet.Range("B1").Select
    ActiveSheet.Paste
       
' Supprimer_lignes_vides Macro
    Range("B1:B3000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
   
' Colonne B renvoyer à la ligne
    Columns("B:B").Select
    With Selection
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = -1
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
   
' Sélectionner et copier A1 puis, coller les formules dans la plage A1:A5000
    Range("A1").FormulaLocal = "=SI(B1="""";1;SI(GAUCHE(B1;4)=""Mise"";1;SI(DROITE(B1;13)=""INDÉPENDANTES"";1;2)))"
    Range("A1").Select
    Selection.AutoFill Destination:=Range("A1:A3000")
       
' Sélectionner et copier C2 puis, coller les formules dans la plage C2:C3000
    Range("C2").Value = ""
    Range("C2").FormulaLocal = "=SI(A2="""";"""";LIGNE(1:1))"
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C3000")
    Range("D2").Select

' Transposer
    Dim i As Long, j As Integer, k As Integer, m As Integer, e As Integer
    Dim ligne1 As Integer, ligne2 As Integer
      ligne1 = 1
    With Sheets("InfosWord")
      For i = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
        If Left(.Range("A" & i).Value, 1) = 1 Then
        If ligne1 = 1 And ligne2 = 2 Then
        If ligne2 = e Then ligne2 = i - 1
       
    Else:
        ligne1 = ligne2 + 1
        If ligne2 <> 1 Then ligne2 = i - 1
        End If
        k = .Range("D3000").End(xlUp).Row + 1
        For j = ligne1 To ligne2
        .Range("D" & k).Offset(0, m).Value = .Range("B" & j)
        m = m + 1
        Next
        m = 0

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

End If
        Next i

' Décaler vers la droite les cellules contenants QUESTIONS INDÉPENDANTES
    Dim ligne As Long

' Trouve la première cellule non vide au bas de la colonne D
        ligne = [d:d].Find("*", , , , 1, 2).Row

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

For i = ligne To 2 Step -1
    If Range("D" & i).Value = "QUESTIONS INDÉPENDANTES" Then
    Range("E" & i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    If Range("CN" & i).Value = "QUESTIONS INDÉPENDANTES" Then
    Range("CM" & i).Delete Shift:=xlToLeft
End If

' Raffraichir l'écran
Application.ScreenUpdating = True

End If
Next
End With
   
' Sélectionner les cellules CM2:DA2 puis les coller en descendant en CM2:DA3000
    Range("CM2:DA2").Select
    Selection.AutoFill Destination:=Range("CM2:DA3000")
   
' Sélectionner la cellule A1 puis enregistrer le classeur
    Range("A1").Select
    ActiveWorkbook.Save
   
End Sub

Peux-tu me dire où et comment et je vais le corriger.

Merci pour ton aide toujours apprécié,

Dan


avatar
grisan29
Modérateur
Modérateur

Localisation : BRETAGNE Nord 29
Messages : 766
Date d'inscription : 25/07/2013
Age : 54

Résolu Re: Accélérer un code?

Message par grisan29 le Mar 29 Nov - 21:44

bonsoir danpom302

mais ton code et celui que je t'ai donner en dernier pour comparer, j'ai mis ceci sur 1 seule ligne
Code:
With WordApp
        .Selection.WholeStory
        .Selection.Copy
    End With


et aussi ici j'ai enlever le .select
Code:
' Colonne B renvoyer à la ligne
    Columns("B:B").Select
    With Selection
Code:
' Sélectionner et copier A1 puis, coller les formules dans la plage A1:A5000
    Range("A1").FormulaLocal = "=SI(B1="""";1;SI(GAUCHE(B1;4)=""Mise"";1;SI(DROITE(B1;13)=""INDÉPENDANTES"";1;2)))"
    Range("A1").Select
    Selection.AutoFill Destination:=Range("A1:A3000")
        
' Sélectionner et copier C2 puis, coller les formules dans la plage C2:C3000
    Range("C2").Value = ""
    Range("C2").FormulaLocal = "=SI(A2="""";"""";LIGNE(1:1))"
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C3000")
    Range("D2").Select


_________________
Pascal
http://vbaddict.altervista.org/Fichier_upload/grisan29/13.php

Comment mettre votre sujet en résolu.
 
Dans votre message d'origine

cliquer sur le bouton



Ensuite tout en bas sur 
Modifier le titre du sujet 
cliquer sur le bouton 

Résolu !!!

avatar
grisan29
Modérateur
Modérateur

Localisation : BRETAGNE Nord 29
Messages : 766
Date d'inscription : 25/07/2013
Age : 54

Résolu Re: Accélérer un code?

Message par grisan29 le Jeu 1 Déc - 22:35

bonsoir Danpom302

as tu fait la comparaison des 2 codes afin que tu voies les différences et si c'est bon tu peux mettre en résolu le post


_________________
Pascal
http://vbaddict.altervista.org/Fichier_upload/grisan29/13.php

Comment mettre votre sujet en résolu.
 
Dans votre message d'origine

cliquer sur le bouton



Ensuite tout en bas sur 
Modifier le titre du sujet 
cliquer sur le bouton 

Résolu !!!

avatar
danpom302
Step_Three_VBA
Step_Three_VBA

Localisation : Québec
Messages : 368
Date d'inscription : 23/09/2013
Age : 66

Résolu Re: Accélérer un code?

Message par danpom302 le Jeu 1 Déc - 23:43

Bonsoir grisan29,

1er code suggéré : Je l'ai mis en dernier ci-après, mais ça ne fonctionne pas. Le message indique : Fonction ou variable attendu à : .WholeStory

Code:
With WordApp
        .Selection.WholeStory.Selection.Copy
    End With

2e code : J'ai enlevé le .Select à la fin de Columns("B:B") mais ça aussi ne fonctionne pas.

3e code : Celui-là aissi ne fonctionne pas losrque j'enlève les .Select

Je ne peux pas cocher Résolu parce que j'attends une réponse d'adminPVA pour accélérer le code suivant :

Code:
Range("B1:B3000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Il m'a proposé un autre code à partir d'une modification de ce code effectué par moi mais qui ne fonctionnait pas. Ce qu'il m'a proposé ne fonctionnait pas non plus. Alors j'attends ses suggestions. Il devrait également me transmettre certaines façon d'éviter les .Select ce que j'apprécierais car lorsque je test, ça ne fonctionne pas toujours et il y a sûrement une raison. Mais laquelle! confused

Merci pour ton aide,

Dan



avatar
AdminPVB
Admin
Admin

Localisation : France Nord 59
Messages : 1843
Date d'inscription : 24/05/2013
Age : 41

Résolu Re: Accélérer un code?

Message par AdminPVB le Sam 3 Déc - 22:09

Bonsoir,
par hazard,le code pour effacer les cellules ne serait il pas sur une feuille encore protéger,car je sais que tu aimes bien utiliser cette fonction ?
As tu par la même occasion un exemple de ton fichier sur lequel on pourrait faire de meilleur test.
Merci et A+


_________________
Avatar


Bienvenue sur

Dans votre message d'origine cliquer sur le bouton

Tout en bas sur Modifier le titre du sujet cliquer sur le bouton : Résolu !!!
Changer l’icône du sujet par le bouton

Tout simplement.


Merci pour votre présence ou passage sur le site de programmer-en-vb

Celui qui croit tout connaitre, ne connait sans doute pas grand chose,chacun apporte son savoir, mais on a tous tout à apprendre ....  

study

avatar
grisan29
Modérateur
Modérateur

Localisation : BRETAGNE Nord 29
Messages : 766
Date d'inscription : 25/07/2013
Age : 54

Résolu Re: Accélérer un code?

Message par grisan29 le Sam 3 Déc - 22:17

bonsoir AdminPVB
notre a ami a préférer revoir sa copie avec sa fille et revenir sur un autre post


_________________
Pascal
http://vbaddict.altervista.org/Fichier_upload/grisan29/13.php

Comment mettre votre sujet en résolu.
 
Dans votre message d'origine

cliquer sur le bouton



Ensuite tout en bas sur 
Modifier le titre du sujet 
cliquer sur le bouton 

Résolu !!!

avatar
danpom302
Step_Three_VBA
Step_Three_VBA

Localisation : Québec
Messages : 368
Date d'inscription : 23/09/2013
Age : 66

Résolu Re: Accélérer un code?

Message par danpom302 le Dim 4 Déc - 4:04

Bonsoir adminPVB et grisans29,

Merci pour votre aide.

1) Mon code n'est pas sur une feuille protégée. C'est juste que je trouve le temps pour supprimer toutes les lignes vides, long soit environ 45 secondes, et à cette étape, le code transposer n'est pas encore fait.

2) Concernant la suppression des lignes vides, j'ai fait une macro permettant à ma fille d'enlever les retours de ligne directement dans son document Word avant de lancer la macro de transfert des données dans Excel. Le tout semble la satisfaire.

Je considère donc ma demande résolue.

Salutation,

Dan
avatar
AdminPVB
Admin
Admin

Localisation : France Nord 59
Messages : 1843
Date d'inscription : 24/05/2013
Age : 41

Résolu Re: Accélérer un code?

Message par AdminPVB le Dim 4 Déc - 20:45

Bonsoir,
ok quelle est donc ton code finale afin de voir si je peux mettre un coup d'accélération ?
A+


_________________
Avatar


Bienvenue sur

Dans votre message d'origine cliquer sur le bouton

Tout en bas sur Modifier le titre du sujet cliquer sur le bouton : Résolu !!!
Changer l’icône du sujet par le bouton

Tout simplement.


Merci pour votre présence ou passage sur le site de programmer-en-vb

Celui qui croit tout connaitre, ne connait sans doute pas grand chose,chacun apporte son savoir, mais on a tous tout à apprendre ....  

study

avatar
danpom302
Step_Three_VBA
Step_Three_VBA

Localisation : Québec
Messages : 368
Date d'inscription : 23/09/2013
Age : 66

Résolu Re: Accélérer un code?

Message par danpom302 le Dim 4 Déc - 23:17

Bonjour adminPVB,

Voici donc le code transmis à ma fille.

Code:
Sub Word_Excel()
'
' Transférer document Word vers Excel et transposer les données
'
' Touche de raccourci du clavier: Ctrl+g
'
' Effacer les données B1,D2:DA
    Range("B:B,D2:CK3000").ClearContents
   
' Récupérer toutes les données Word
    Dim WordDoc As Word.Document
    Dim WordApp As Word.Application

' Accéder au document Word
    Set WordApp = New Word.Application
    WordApp.Visible = False
    Set WordDoc = WordApp.Documents.Open("C:\Users\Utilisateur\Documents\Examens Sarah\Projet Word vers Excel\Template_11.docx", ReadOnly:=True)

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

    With WordApp
        .Selection.WholeStory
        .Selection.Copy
    End With

    ActiveSheet.Range("B1").Select
    ActiveSheet.Paste
       
' Colonne B renvoyer à la ligne
    Columns("B:B").Select
    With Selection
        .WrapText = True
     
    End With
   
' Sélectionner et copier A1 puis, coller les formules dans la plage A1:A5000
    Range("A1").FormulaLocal = "=SI(B1="""";1;SI(GAUCHE(B1;4)=""Mise en situation"";1;SI(DROITE(B1;13)=""INDÉPENDANTES"";1;2)))"
    Range("A1").Select
    Selection.AutoFill Destination:=Range("A1:A3000")
       
' Sélectionner et copier C2 puis, coller les formules dans la plage C2:C3000
    Range("C2").Value = ""
    Range("C2").FormulaLocal = "=SI(A2="""";"""";LIGNE(1:1))"
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C3000")
    Range("D2").Select

' Transposer
    Dim i As Long, j As Integer, k As Integer, m As Integer, e As Integer
    Dim ligne1 As Integer, ligne2 As Integer
      ligne1 = 1
    With Sheets("InfosWord")
      For i = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
        If Left(.Range("A" & i).Value, 1) = 1 Then
        If ligne1 = 1 And ligne2 = 2 Then
        If ligne2 = e Then ligne2 = i - 1
       
    Else:
        ligne1 = ligne2 + 1
        If ligne2 <> 1 Then ligne2 = i - 1
        End If
        k = .Range("D3000").End(xlUp).Row + 1
        For j = ligne1 To ligne2
        .Range("D" & k).Offset(0, m).Value = .Range("B" & j)
        m = m + 1
        Next
        m = 0

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

End If
        Next i

' Décaler vers la droite les cellules contenants QUESTIONS INDÉPENDANTES
Dim ligne As Long

' Trouve la première cellule non vide au bas de la colonne D
        ligne = [d:d].Find("*", , , , 1, 2).Row

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

For i = ligne To 2 Step -1
    If Range("D" & i).Value = "QUESTIONS INDÉPENDANTES" Then
    Range("E" & i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    If Range("CN" & i).Value = "QUESTIONS INDÉPENDANTES" Then
    Range("CM" & i).Delete Shift:=xlToLeft
End If

' Raffraichir l'écran
Application.ScreenUpdating = True

End If
Next
End With
   
' Sélectionner les cellules CM2:DA2 puis les coller en descendant en CM2:DA3000
    Range("CM2:DA2").Select
    Selection.AutoFill Destination:=Range("CM2:DA3000")
   
' Sélectionner la cellule A1 puis enregistrer le classeur
    Range("A1").Select
    ActiveWorkbook.Save
   
End Sub


Merci pour ta proposition,

Dan
avatar
grisan29
Modérateur
Modérateur

Localisation : BRETAGNE Nord 29
Messages : 766
Date d'inscription : 25/07/2013
Age : 54

Résolu Re: Accélérer un code?

Message par grisan29 le Dim 4 Déc - 23:28

bonsoir danpom302
voici ma version en attendant celle que va te donner AdminPVB, j'ai quasi toujours la même version sans les.select

Code:
Sub Word_Excel()
'
' Transférer document Word vers Excel et transposer les données
'
' Touche de raccourci du clavier: Ctrl+g
'
' Effacer les données B1,D2:DA
    Range("B:B,D2:CK3000").ClearContents
   
' Récupérer toutes les données Word
    Dim WordDoc As Word.Document
    Dim WordApp As Word.Application

' Accéder au document Word
    Set WordApp = New Word.Application
    WordApp.Visible = False
    Set WordDoc = WordApp.Documents.Open("C:\Users\Utilisateur\Documents\Examens Sarah\Projet Word vers Excel\Template_11.docx", ReadOnly:=True)

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

    With WordApp
        .WholeStory
        .Copy
    End With

    ActiveSheet.Range("B1").Select
    ActiveSheet.Paste
       
' Colonne B renvoyer à la ligne
    Columns("B:B").WrapText = True
      
      
' Sélectionner et copier A1 puis, coller les formules dans la plage A1:A5000
    Range("A1").FormulaLocal = "=SI(B1="""";1;SI(GAUCHE(B1;4)=""Mise en situation"";1;SI(DROITE(B1;13)=""INDÉPENDANTES"";1;2)))"
    Range("A1").AutoFill Destination:=Range("A1:A3000")
       
' Sélectionner et copier C2 puis, coller les formules dans la plage C2:C3000
With Range("C2")
    .Value = ""
    .FormulaLocal = "=SI(A2="""";"""";LIGNE(1:1))"
    .AutoFill Destination:=Range("C2:C3000")
End With
    Range("D2").Select

' Transposer
    Dim i As Long, j As Integer, k As Integer, m As Integer, e As Integer
    Dim ligne1 As Integer, ligne2 As Integer
       ligne1 = 1
    With Sheets("InfosWord")
       For i = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
         If Left(.Range("A" & i).Value, 1) = 1 Then
         If ligne1 = 1 And ligne2 = 2 Then
         If ligne2 = e Then ligne2 = i - 1
       
    Else:
         ligne1 = ligne2 + 1
         If ligne2 <> 1 Then ligne2 = i - 1
         End If
         k = .Range("D3000").End(xlUp).Row + 1
         For j = ligne1 To ligne2
         .Range("D" & k).Offset(0, m).Value = .Range("B" & j)
         m = m + 1
         Next
         m = 0

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

End If
         Next i

' Décaler vers la droite les cellules contenants QUESTIONS INDÉPENDANTES
Dim ligne As Long

' Trouve la première cellule non vide au bas de la colonne D
        ligne = [d:d].Find("*", , , , 1, 2).Row

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

For i = ligne To 2 Step -1
    If Range("D" & i).Value = "QUESTIONS INDÉPENDANTES" Then
    Range("E" & i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    If Range("CN" & i).Value = "QUESTIONS INDÉPENDANTES" Then
    Range("CM" & i).Delete Shift:=xlToLeft
End If

' Raffraichir l'écran
Application.ScreenUpdating = True

End If
Next
End With
   
' Sélectionner les cellules CM2:DA2 puis les coller en descendant en CM2:DA3000
    Range("CM2:DA2").AutoFill Destination:=Range("CM2:DA3000")
   
' Sélectionner la cellule A1 puis enregistrer le classeur
    Range("A1").Select
    ActiveWorkbook.Save
   
End Sub


_________________
Pascal
http://vbaddict.altervista.org/Fichier_upload/grisan29/13.php

Comment mettre votre sujet en résolu.
 
Dans votre message d'origine

cliquer sur le bouton



Ensuite tout en bas sur 
Modifier le titre du sujet 
cliquer sur le bouton 

Résolu !!!

avatar
AdminPVB
Admin
Admin

Localisation : France Nord 59
Messages : 1843
Date d'inscription : 24/05/2013
Age : 41

Résolu Re: Accélérer un code?

Message par AdminPVB le Mer 7 Déc - 22:47

Bonsoir Danpom302,
le code à tester car j'ai fait les modifications sans test.
Code:
Sub Word_Excel()
'
' Transférer document Word vers Excel et transposer les données
'
' Touche de raccourci du clavier: Ctrl+g
'
' Effacer les données B1,D2:DA
    Range("B:B,D2:CK3000").ClearContents
    
' Récupérer toutes les données Word
    Dim WordDoc As Word.Document
    Dim WordApp As Word.Application

' Accéder au document Word
    Set WordApp = New Word.Application
    WordApp.Visible = False
    Set WordDoc = WordApp.Documents.Open("C:\Users\Utilisateur\Documents\Examens Sarah\Projet Word vers Excel\Template_11.docx", ReadOnly:=True)

' Ne pas raffraichir l'écran
        Application.ScreenUpdating = False

    With WordApp
        .Selection.WholeStory
        .Selection.Copy
    End With

    Range("B1").Paste
    
        
' Colonne B renvoyer à la ligne
    Columns("B:B").WrapText = True
       
' Sélectionner et copier A1 puis, coller les formules dans la plage A1:A5000
    Range("A1").FormulaLocal = "=SI(B1="""";1;SI(GAUCHE(B1;4)=""Mise en situation"";1;SI(DROITE(B1;13)=""INDÉPENDANTES"";1;2)))"
    Range("A1").AutoFill Destination:=Range("A1:A3000")
        
' Sélectionner et copier C2 puis, coller les formules dans la plage C2:C3000
    'Range("C2").Value = ""
    Range("C2").FormulaLocal = "=SI(A2="""";"""";LIGNE(1:1))"
    Range("C2").AutoFill Destination:=Range("C2:C3000")
    'Range("D2").Select

' Transposer
    Dim infosword As Worksheet
    Dim i As Long, j As Integer, k As Integer, m As Integer, e As Integer
    Dim findeligne As Long
    Dim ligne1 As Integer, ligne2 As Integer
       ligne1 = 1
   Set infosword = Sheets("InfosWord")
    With infosword
       findeligne = .Range("A" & .Rows.Count).End(xlUp).Row
       For i = 1 To findeligne
         If Left(.Range("A" & i).Value, 1) = 1 Then
         If ligne1 = 1 And ligne2 = 2 Then
         If ligne2 = e Then ligne2 = i - 1
        
    Else:
         ligne1 = ligne2 + 1
         If ligne2 <> 1 Then ligne2 = i - 1
         End If
         k = .Range("D3000").End(xlUp).Row + 1
         For j = ligne1 To ligne2
         .Range("D" & k).Offset(0, m).Value = .Range("B" & j)
         m = m + 1
         Next
         m = 0

' Ne pas raffraichir l'écran
       ' Application.ScreenUpdating = False

End If
         Next i

' Décaler vers la droite les cellules contenants QUESTIONS INDÉPENDANTES
Dim ligne As Long

' Trouve la première cellule non vide au bas de la colonne D
        ligne = [d:d].Find("*", , , , 1, 2).Row

' Ne pas raffraichir l'écran
        'Application.ScreenUpdating = False

For i = ligne To 2 Step -1
    If Range("D" & i).Value = "QUESTIONS INDÉPENDANTES" Then
    Range("E" & i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    If Range("CN" & i).Value = "QUESTIONS INDÉPENDANTES" Then Range("CM" & i).Delete Shift:=xlToLeft
    



End If
Next
End With
    
' Sélectionner les cellules CM2:DA2 puis les coller en descendant en CM2:DA3000
    Range("CM2:DA2").AutoFill Destination:=Range("CM2:DA3000")
    
' Sélectionner la cellule A1 puis enregistrer le classeur
    Range("A1").Select
' Raffraichir l'écran
Application.ScreenUpdating = True
ActiveWorkbook.Save
    
End Sub
A+ (j'espère avoir gagner un peu si ça fonctionne )


_________________
Avatar


Bienvenue sur

Dans votre message d'origine cliquer sur le bouton

Tout en bas sur Modifier le titre du sujet cliquer sur le bouton : Résolu !!!
Changer l’icône du sujet par le bouton

Tout simplement.


Merci pour votre présence ou passage sur le site de programmer-en-vb

Celui qui croit tout connaitre, ne connait sans doute pas grand chose,chacun apporte son savoir, mais on a tous tout à apprendre ....  

study


Contenu sponsorisé

Résolu Re: Accélérer un code?

Message par Contenu sponsorisé


    La date/heure actuelle est Jeu 21 Sep - 5:17