Import/Copier/coller cellule non vide
Bonsoir a tous,
je sollicite votre aide pour une petite macro. Je vous expliques ma demande apres le code :
Sub test1()
If Range("I5").Value Like "*H1a*" And Range("I8").Value Like "*Effet_joules*" Then
ElseIf Range("I24").Value Like "*Est_Ouest*" And Range("I27").Value Like "*S1*" Then
Call CDC0
Else: Call test2
End If
End SubComme vous pouvez le voir, je regarde si les celules sont non vide (cellule I5, I8, I24, et I27).
Sub CDC0()
'ZoneH1aEstOustJoule
Application.Workbooks.Open "fichier1.xls"
Range("tableau1").Select
Selection.Copy
Windows("Outil_FinalV2.xlsm").Activate
Sheets("Zone").Select
Range("A3").Select
ActiveSheet.Paste
Application.CutCopyMode = False 'Vide le presse-papier
Windows("tableau1.xls").Activate
Range("A1").Select
ActiveWorkbook.Close
End SubSuite au premier code, mon tableau est donc coller.
Cependant si l'on revient au premier code, il teste les cellule I5, I8, I24 etI27, cependant j'aimerai qu'il fasse aussi les test jusque Y5, Y8,Y24 et Y27.
Mon probleme c'est que je souhaiterai aussi que comme la Cellule I5 ne sera pas vide, quand la colonne J est tester le tableau2 se mette pas au meme endroit que la precédente procedure, mais aille se mette 13 colonnes plus loins.
En Résumé, si la Colonne A est non vide, le tableau soit collé non plus en A3, mais en M3, puis en Y3 ainsi de suite jusqu'en GK3.
Ainsi le test I collera toujours en A3, le test J collera toujours en M3, le test K collera toujours en Y , etc...
Infos supémentaires :
j'ai donc 17 test à faire et 17 copier coller à faire. Bien entendu les tableaux sont différent à chaque fois.
Merci de l'aide que vous pourrez m'apporter. Je suis assez débutant en VBA, des explications détaillées sont les bienvenues
Bonjour et bienvenue sur le forum
Il serait plus facile d'étudier ton problème si tu joignais les 2 fichiers concernés...
Bye !
Bonjour,
Merci de votre intervention, je ne joindre de fichiers :
- volume de 300 Mo
- plus de 100 fichiers
- confidentialité
Je me doute que c 'est difficile de répondre sans l'aide de fichier pour tester. Je vais tacher de réexpliquer plus clairement. et de fonctionner par étape.
Sub test1()
If Range("I5").Value Like "*H1a*" And Range("I8").Value Like "*Effet_joules*" Then
ElseIf Range("I24").Value Like "*Est_Ouest*" And Range("I27").Value Like "*S1*" Then
Call CDC0
Else: Call test2
End If
End SubCe code permet de tester les cellules, sur la colonne I. Je souhaiterai donc qu'il fasse exactement la même chose pour les colonnes de J a Y, sans avoir a tout réécrire le code pour chaque colonnes.
Si déjà je pouvais une aide pouvait être apportée pour cette partie, ce serait une grande avancé !
Tu écris que tu ne peux pas joindre de fichier pour cause de :
-volume de 300 Mo
mais s’ils sont plus gros, tu peux passer par www .cjoint.com
-plus de 100 fichiers
mais avec 2 fichiers bien choisis, c’est suffisant
-confidentialité
mais tu peux les rendre anonymes,quitte à les alléger…
Je te propose tout de même ce code que je ne peux donc tester moi-même :
Sub test1()
Dim i As Integer
For i = 10 To 25
If Cells(5, i).Value Like "*H1a*" And Cells(8, i).Value Like "*Effet_joules*" Then
ElseIf Cells(24, i).Value Like "*Est_Ouest*" And Cells(27, i).Value Like "*S1*" Then
Call CDC0
Else: Call test2
End If
Next i
End SubS’il ne va pas, je ne peux rien faire de plus sans fichier.
Désolé !
Bye !
Re-bonjour ton code fonctionne correctement : Merci !, cependant, maintenant il faut en venir au 2eme code.
'Colonne I
Sub CDC0()
'ZoneH1aEstOustJoule
Application.Workbooks.Open "fichier1.xls"
Range("tableau1").Select
Selection.Copy
Windows("Outil_FinalV2.xlsm").Activate
Sheets("Zone").Select
Range("A3").Select
ActiveSheet.Paste
Application.CutCopyMode = False 'Vide le presse-papier
Windows("tableau1.xls").Activate
Range("A1").Select
ActiveWorkbook.Close
End SubActuellement, si test1 colonne I remplie les condition alors il lance CDC0. Cependant, si la colonne J remplie elle aussi les conditions, il lance aussi CDC0 ( jusque là OK). Cependant j'aimerai que pour le test1 colonne I, le tableau soit collé en A3 ( jusque la tout marche), mais si J remplie la condition alors il va le copier en M3. Et ceci pour les colonnes de I à Y. (J sera en M3, K sera en Y3 et ainsi de suite, jusque Y soit en GK) dans le but que les Tableaux ne soit pas superposé les uns sur les autres.
J’espère m’être correctement exprimé
Alors, essaie de remplacer :
Range("A3").Selectpar :
Cells(3, 12 * i - 119).SelectMais c’est sans garantie : mon cerveau n’est pas assez puissant pour raisonner sans s’appuyer sur du concret…
Bonne chance !
Bye !
Bonsoir,
Merci j'ai trouvé toutes mes réponses a ce sujet.
J'ai cependant, une autre question.
Est ce qu'l existe une manière d'avoir une fenetre qui nous montre l'exéction de VBA afin de savoir où la macro en est exactement ?
En effet, j'ai une macro qui lance plusieurs macro sous de multiples conditions, le tout dans un ordre bien precis. Est il possible de visualiser ce qu'il est en train de traider?
Un genre de userform avec barre de progression (ou non si compliqué) avec un bouton details ou on aurait les etapes en cours d'exécution. (dans le genre d'instalation d'un programme Intel par exemple).
Merci par avance
Bonjour
Avec l'instruction :
Application.StatusBar = messageTu feras apparaître la valeur de la variable "message" tout en bas, gauche de la fenêtre Excel, sur fond vert.
A toi de lui donner une valeur différente dans chaque sous-macro.
OK ?
Bonjour,
Merci pour vos réponses. Je continue mon code étape par étape
Bonne journée a vous.
Re bonjour, je reviens vers vous une erreur dans mon code
Sub test1()
Dim i As Integer
For i = 10 To 16
If ((Cells(5, i).Value Like "*H1a*") And (Cells(8, i).Value Like "*Effet_joules*") And (Cells(24, i).Value Like "*Est_Ouest*") And (Cells(27, i).Value Like "*S1*") = True) Then
Call CDC1
Else: MsgBox "error"
End If
Next i
End Sub
Je précise que CDC1 fonctionne correctement sans passer par ce code "test1".
Actuellement, meme si je remplie les conditions, le message "error" apparait et CDC1 n'est jamais lancé.
Pouvez vous m'aider ?
Je précise également, que la procédure CDC1 :
Sub CDC1() 'ZoneH1aEstOuestJouleS1
Application.DisplayAlerts = False
Dim wb As Workbook
Dim ws As Worksheet
Set wb = Workbooks.Open("H:\Stage\Données\Données Modifié\Courbes de Charge & COP\H1a\Effet Joule\Est-Ouest\H1a-Joule-EstOuest-S1Ref.xls") 'ourvrir Fichier excel
Set ws = wb.Worksheets("H1a-Joule-EstOuest-S1Ref")
Application.CutCopyMode = False 'Vide le presse-papier
Range("ZoneH1aEstOuestJoule").Copy 'copie le tableau
Worksheets("H1a-Joule-EstOuest-S1Ref").Activate 'active la fenetre du fichier excel copier
Range("A1").Select 'selectionne la case A1
ActiveWorkbook.Close 'Ferme le fichier excel ouvert contenant le tableau copier
Worksheets("Zone").Activate
Call Si0 'Appelle la macro si case vide alors colle, sinon decalle au tableaux suivant
Application.DisplayAlerts = True
End Subouvre donc un classeur avec un copier coller sur un autre classeur. J'ai l'impression que d'abord mon programme test1 n'arrive pas a lire correctement les cellules pour valider les conditions, que si dans l'aboslue test1 fonctionné il ne retournerai pas sur la bnne feuille de pour faire les tests suivant.
Si0 fonctionne aussi tres bien.
Pour eviter toute complications j'ai donc joint un zip, avec l'arborescence des fichiers. Je précise également que c'est une version tres alléger en réalité il ya beaucoups plus de fichier et de paramètre a prendre en compte (voir Matrice au démarage du fichier).
Au vue de la complexcité de ce que je demande, je peux repondre a toutes les questions
De plus si vous avez des modifications pour accélerer l'ouverture, la copie du tableau, la colle, et la fermeture du tableau précédement copier, je suis preneur, car en réalité les tableaux font plus de 50 000 lignes, donc un peu long si l'ont fait la répétition des 12 fois !
Merci