Executer une partie de la macro en fonction d'une cellule

Yes

XLDnaute Nouveau
Bonjour à tous,

J'ai crée ce fichier en PJ "Base2.1xlsm"

Je rencontre un problème avec un copier/coller selon condition dans une macro "importation".

En fait ma macro :
- ouvre un fichier importation de txt. en xls,
- copie colle dans base 2.1.xlsm l'onglet -Importation Opéra-
- Ensuite il y a une colonne G qui peut contenir des noms "Bernard, Durand" ou pas.
Je veux que cela se transforme en colonne G "Bernard" et H "Durand"
ça j'arrive à le faire quand il y a des noms,

Mais le problème est quand il n'y a pas de nom en colonne G car il plante.

J'ai mis en ("G102") vrai ou faux suivant du texte sur la colonne G1:G100
Donc, je souhaiterai que G102 est vrai appliquer la séparation des nom des cellules G1 à G100 - si faux qu'il ne fasse rien dans la macro et passe à l'étape suivante de la macro.

Je pense qu'il y a d'autre macro à simplifier peut être ?
je ne peux pas dire lors de l'imporatation copie colle de passer toutes les "," virgules en tabulation colonne car j'ai besoin de ces virgules dans d'autres cases.

C'est marrant mais en écrivant je viens de me rendre compte qu'il est peut-être préférable de faire des tabulations et ensuite "concatener" certaines cases quitte à tout décaler serait plus rapide non ?!!!!

Au passage je vais créer un autre sujet mais depuis Excel je cherche a exécuter un publipostage avec impression sans avoir a ouvrir Word et lancer la macro publipostage impression de Word.

Merci pour votre aide toujours aussi précieuse !
 

Pièces jointes

  • base 2.1.xlsm
    225.8 KB · Affichages: 56

Lone-wolf

XLDnaute Barbatruc
Bonsoir Yes

D'après ce que j'ai compris, peut-être comme ceci, pour éviter les cellules vides.

VB:
With Feuil1
Set plage = .range("G2:G" & Range("G" & Rows.Count).End(xlUp).Row)
For each cel In plage
if IsEmpty(cel) then 
Exit for
Else
La suite du code
End If
Next Cel
End With
 

Yes

XLDnaute Nouveau
Merci mais je ne comprend pas trop comment faire pour l'insérer ??

Sub importation()
'
' importation Macro
'

'
Application.ScreenUpdating = False
Workbooks.OpenText Filename:= _
"G:\1009 Hôtel\Stéphane Fichiers pour Excel\Reception\importationarrivées.txt" _
, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, OtherChar:=",", FieldInfo:= _
Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7 _
, 1), Array(8, 1), Array(9, 1)), TrailingMinusNumbers:=True
Columns("B:I").Select
Selection.Copy
Windows("base 2.1.xlsm").Activate
Sheets("Importation Opéra").Select
Columns("A:A").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Windows("importationarrivées.txt").Activate
Application.CutCopyMode = False
ActiveWindow.Close
If Range("g102").Value Like "*vrai*" Then Columns("G:G").Select
Selection.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:=",", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
End If
Next
Sheets("Importation Opéra").Select
Range("C1:C100").Select
Selection.Copy
Sheets("Première Page").Select
Range("b3").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Sheets("Importation Opéra").Select
Range("G1:G100").Select
Selection.Copy
Sheets("Première Page").Select
Range("d3").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("e3").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-3]>0,""Oui"","""")"
Range("e3").Select
Selection.AutoFill Destination:=Range("e3:e100"), Type:=xlFillDefault
Range("e3:e100").Select
ActiveWindow.SmallScroll Down:=-99
Range("e3").Select
Range("C3:C100").Select
Selection.ClearContents
Range("J3").Select
ActiveCell.FormulaR1C1 = "='Mise en Page'!R[-2]C[3]"
Range("J3").Select
Selection.AutoFill Destination:=Range("J3:J100"), Type:=xlFillDefault
Range("J3:J100").Select
ActiveWindow.SmallScroll Down:=-84
Range("e3").Select
End Sub
 

Lone-wolf

XLDnaute Barbatruc
Re

Code corrigé

VB:
Sub importation()
Application.ScreenUpdating = False
Workbooks.OpenText Filename:= _
"G:\1009 Hôtel\Stéphane Fichiers pour Excel\Reception\importationarrivées.txt" _
, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, OtherChar:=",", FieldInfo:= _
Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7 _
, 1), Array(8, 1), Array(9, 1)), TrailingMinusNumbers:=True
ActiveWorkbook.Columns("B:I").Copy
With Windows("base 2.1.xlsm").Sheets("Importation Opéra")
.Columns("A:A").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = 0
ActiveWindow.Close
End With
Windows("importationarrivées.txt").Activate
With ActiveWindow
If .Range("g102").Value Like "*vrai*" Then .Columns("G:G").Select
Selection.TextToColumns Destination:=.Range("G1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:=",", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
.Range("C1:C100").Copy
Sheets("Première Page").Range("b3").PasteSpecial _
Paste:=xlPasteValuesAndNumberFormats
derlig = .Range("G" & Rows.Count).End(xlUp).Row
Set plage = .range("G2:G" & Range("G" & Rows.Count).End(xlUp).Row)
For each cel In plage
if IsEmpty(cel.offset(0, 0)) then 
Exit for
Else
cel.Copy
Sheets("Première Page").Range("d3").PasteSpecial _
Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = 0
End If
Next cel
.Range("e3").FormulaR1C1 = "=IF(RC[-3]>0,""Oui"","""")"
Range("e3").AutoFill .Range("e3:e100"), xlFillDefault
ActiveWindow.SmallScroll Down:=-99
.Range("C3:C100").ClearContents
.Range("J3").FormulaR1C1 = "='Mise en Page'!R[-2]C[3]"
.Range("J3").AutoFill .Range("J3:J100"), xlFillDefault
ActiveWindow.SmallScroll Down:=-84
End With
End Sub
 

Lone-wolf

XLDnaute Barbatruc
Re Yes,

J'ai des doutes concernant l'extention des fichiers, ce n'est pas .csv au lieu de .txt. ? .txt est un fichier texte fait avec Notepad. Ensuite, tu as plusieurs classeurs d'après ce que j'ai vu. Le mieux, c'est d'expliquer par étape ce que tu veux faire au juste.

EDIT: refait un test en modifiant la macro comme ceci.

VB:
For each cel In plage
if IsEmpty(cel.offset(0, 0)) then
Exit for
Else
cel.Copy
Sheets("Première Page").Range("d3").PasteSpecial _
Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = 0
.Range("e3").FormulaR1C1 = "=IF(RC[-3]>0,""Oui"","""")"
Range("e3").AutoFill .Range("e3:e100"), xlFillDefault
ActiveWindow.SmallScroll Down:=-99
.Range("C3:C100").ClearContents
.Range("J3").FormulaR1C1 = "='Mise en Page'!R[-2]C[3]"
.Range("J3").AutoFill .Range("J3:J100"), xlFillDefault
ActiveWindow.SmallScroll Down:=-84
End If
Next cel
End With

A+
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir à tous, bonsoir Loup Solitaire ;)

Moi, je fais pas dans la correction, mais dans le régime ;)
(léger tribute aux tontons ;) )
VB:
Sub a()
Dim strPathNomFich$, SRC_WBK As Workbook
strPathNomFich = "G:\1009 Hôtel\Stéphane Fichiers pour Excel\Reception\importationarrivées.txt"
Workbooks.OpenText strPathNomFich, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, Tab:=True
Set SRC_WBK = ActiveWorkbook
Sheets(1).Columns("B:I").Copy
Workbooks("base 2.1.xlsm").Sheets("Importation Opéra").Paste
SRC_WBK.Close False
'fin code importation et recopie colonnes B:I
End Sub
Est-ce déjà ce premier bout de code donne le même résultat que ta macro initiale au niveau de l'importation du fichier txt ?
 

Yes

XLDnaute Nouveau
Bonjour à tous !

Merci de votre aide !
alors là la 2ème macro je n'y comprends plus rien !!!!! je passe... !

Bon alors on va faire étape par étape.

Effectivement le fichier recherché est en .txt car c'est ce qui est extrait de mon logiciel hôtelier Opéra Fidelio Oracle.
Je peux l'extraire en d'autres formats mais .xml ou .xls mais ça ne changera pas mon problème. C'est peut-être juste un peu plus long.

Ce que je fais c'est :
j'ouvre ce fichier importationarrivées.txt depuis Excel et le transforme en fichier Excel.
De là je fais un bête copier/coller vers mon fichier base 2.1

Le hic c'est que parfois j'ai des clients accompagnants parfois non.
Quand il y en a, ils se retrouvent en colonne G dans mon fichier base 2.1 sous cette forme "Dupont, Bernard".

Moi je n'ai pas besoin du prénom, donc je transforme la cellule "Dupont, Bernard" en "Dupont" sur G et "Bernard" sur H

Quand j'ai un accompagnant pas de problème, mais quand tout G est vide la macro ne comprend pas.
Du coup, il me faut une formule qui dirait :

si dans G des noms = ok tu transformes en deux colonnes "nom" en G et "Prenom" en H et tu recopies G dans le premier onglet. Si dans G pas de nom tu ne fais rien ou même tu colles du vide dans le premier onglet et tu continues la macro.

Est-ce que c'est plus clair pour vous ?!!!

PS : et il ne me recopie pas correctement les caractères spéciaux A avec accent devient un truc bizarre !
 

Discussions similaires

Statistiques des forums

Discussions
312 094
Messages
2 085 231
Membres
102 828
dernier inscrit
cdupire