Macro erreur 91
Bonjour,
Afin de mettre en forme des extractions, une macro a été créée sur le fichier joint avec bouton.
Pour la 1 ere extraction "extraction brute" cela fonctionne très bien mais pas pour l'extraction brute 2 non .
Les extractions sont issues d'un logiciel et donc la quantité de données n'est jamais la même
Voici le message :
Pouvez vous m'aider à résoudre cela ?
Je vous joins :
1_ le fichier contenant la macro
2_ le fichier extractionbrute pour lequel la macro fonctionnait
3 le fichier extraction brute 2 pour lequel la macro ne fonctionne pas
PS: je ne suis pas douée pour les macros :)
je vous remercie pour votre aide précieuse
bonjour,
Les fichiers extraction n'ont pas la même structure.
Dans l'un (extraction-2) une information importante pour la sélection "Type (Nouveau, Reconduit, Modifié)" se trouve en colonne 6 et dans l'autre (extraction) en colonne 9. La macro est faite pour faire son traitement en fonction de la colonne 9.
L'erreur survient quand il n'y a aucune ligne sélectionnée
Bonjour,
Je vous remercie pour votre réponse.
J'ai modifié dans le code et cela fonctionne, je n'ai plus le message d'erreur.
En revanche, les données dans le fichier obtenu sont décalées dans les colonnes. Je m'explique:
par exemple :
les données de la colonne J devrait être en colonne M "Type (Nouveau, Reconduit, Modifié)"
celles de la colonne K en colonne I "CPF"
colonne R en H
Comment modifier la macro?
Ci-dessous le code macro:
Option Explicit
Option Compare Text
Sub MefExtrac()
Dim rngSrc As Range
Dim wsSrc As Worksheet
Dim nLigSrc As Long
Dim nLigSrcFin As Long
Dim wbCbl As Workbook
Dim wsCbl As Worksheet
Dim tsCbl As ListObject
Dim avDataCbl() As Variant
Dim lRuptMaj As Boolean
' Cibler l'extraction brute (le classeur doit être ouvert)
On Error Resume Next
Set rngSrc = Application.InputBox(Prompt:="Sélectionner une cellule quelconque de la feuille contenant l'extraction brute ...", Title:="Cibler l'extraction brute", Type:=8)
If Err.Number <> 0 Then
MsgBox "Extraction brute non cilblée ...", vbExclamation, "Abandon mise en forme"
Err.Clear
On Error GoTo 0
Exit Sub
End If
On Error GoTo Err_ME
Application.ScreenUpdating = False
' Pointeur sur la feuille de l'extraction brute
Set wsSrc = Workbooks(rngSrc.Parent.Parent.Name).Worksheets(rngSrc.Parent.Name)
' Pointeur vers le nouveau classeur contenant l'extraction mise en forme
Set wbCbl = Application.Workbooks.Add
Set wsCbl = wbCbl.Worksheets(1)
wsCbl.Name = "suivi de fabrication "
' Copie du tableau modèle (vide) dans un nouveau classeur
ThisWorkbook.Worksheets("Modèle extraction").ListObjects("TExtraction").Range.Copy Destination:=wsCbl.Range("A1")
Set tsCbl = wsCbl.Range("A1").ListObject
' Nommer la 1ère colonne du TS du nom de l'extraction
tsCbl.ListColumns(1).Name = wsSrc.Range("A1").Value
' Traitement de l'extraction brute
nLigSrcFin = wsSrc.Range("A1").SpecialCells(xlLastCell).Row
ReDim avDataCbl(1 To tsCbl.ListColumns.Count)
nLigSrc = 2
lRuptMaj = True
With wsSrc
While nLigSrc <= nLigSrcFin
If .Cells(nLigSrc, 1).Value = "Name" Or .Cells(nLigSrc, 1).Value = "Subitems" Then
ElseIf lRuptMaj = True And .Cells(nLigSrc, 1).Value <> "" Then
avDataCbl(1) = .Cells(nLigSrc, 1).Value ' 1 - Rupture majeure
avDataCbl(2) = "?" ' 2 - Famille
avDataCbl(3) = "?" ' 3 - Groupe
' sauter la ligne de titre
'nLigSrc = nLigSrc + 1
lRuptMaj = False
ElseIf lRuptMaj = False And .Cells(nLigSrc, 1).Value <> "" Then
avDataCbl(5) = .Cells(nLigSrc, 1).Value ' 5 - Suivi de fabrication
' sauter la ligne de titre
'nLigSrc = nLigSrc + 1
ElseIf lRuptMaj = False And .Cells(nLigSrc, 2).Value <> "" Then
If .Cells(nLigSrc, 6).Value = "Nouveau" Then
avDataCbl(4) = nLigSrc ' 4 - Numérotation tableau
avDataCbl(6) = .Cells(nLigSrc, 2).Value ' 6 - Name
avDataCbl(7) = .Cells(nLigSrc, 3).Value ' 7 - Libellé article
avDataCbl(8) = .Cells(nLigSrc, 4).Value ' 8 - Libellé abrégé article
avDataCbl(9) = .Cells(nLigSrc, 5).Value ' 9 - CPF
avDataCbl(10) = .Cells(nLigSrc, 6).Value ' 10 - Nb h apprenant
avDataCbl(11) = .Cells(nLigSrc, 7).Value ' 11 - C. Mère
avDataCbl(12) = .Cells(nLigSrc, 8).Value ' 12 - C. Fille (PA)
avDataCbl(13) = .Cells(nLigSrc, 9).Value ' 13 - Type
avDataCbl(14) = .Cells(nLigSrc, 10).Value ' 14 - Intervenants Conception
avDataCbl(15) = .Cells(nLigSrc, 11).Value ' 15 - Nb pages source Word/PDF
avDataCbl(16) = "" ' 16 - Nb pages source CEN
avDataCbl(17) = "" ' 17 - Nb éléments Moodle
avDataCbl(18) = .Cells(nLigSrc, 12).Value ' 18 - Prév fin de conception
avDataCbl(19) = .Cells(nLigSrc, 13).Value ' 19 - Prév livraison auteur
avDataCbl(20) = .Cells(nLigSrc, 14).Value ' 20 - Prév intégration LMS
avDataCbl(21) = .Cells(nLigSrc, 17).Value ' 21 - Budget prév. commandes auteurs
avDataCbl(22) = .Cells(nLigSrc, 18).Value ' 22 - Budget rectificatif (suivi mai N+1)
avDataCbl(23) = .Cells(nLigSrc, 19).Value ' 23 - Montant commande réel engagé
' Mettre à jour le tableau cible
tsCbl.ListRows.Add.Range = avDataCbl
End If
Else
lRuptMaj = True
End If
nLigSrc = nLigSrc + 1
Wend
' Largeur automatique des colonnes
tsCbl.DataBodyRange.EntireColumn.AutoFit
End With
' libération des variables objet
Set tsCbl = Nothing
Set wsCbl = Nothing
Set wbCbl = Nothing
Set wsSrc = Nothing
On Error GoTo 0
Application.ScreenUpdating = True
Exit Sub
Err_ME:
MsgBox "L'erreur suivante s'est produite : " & Err.Number & " - " & Err.Description, vbCritical, "Mise en forme extractuon brute"
Err.Clear
' libération des variables objet
Set tsCbl = Nothing
Set wsCbl = Nothing
Set wbCbl = Nothing
Set wsSrc = Nothing
On Error GoTo 0
Application.ScreenUpdating = True
Exit Sub
End Subedit modération : code mis entre balises code (bouton </>), merci d'y penser à l'avenir.
merci beaucoup !!
bonjour,
ces instructions-ci font la correspondance entre les colonnes du fichier d'entrée et le fichier de sortie, que tu devrais adapter si cela ne convient pas.
avDataCbl(4) = nLigSrc ' 4 - Numérotation tableau
avDataCbl(6) = .Cells(nLigSrc, 2).Value ' 6 - Name
avDataCbl(7) = .Cells(nLigSrc, 3).Value ' 7 - Libellé article
avDataCbl(8) = .Cells(nLigSrc, 4).Value ' 8 - Libellé abrégé article
avDataCbl(9) = .Cells(nLigSrc, 5).Value ' 9 - CPF
avDataCbl(10) = .Cells(nLigSrc, 6).Value ' 10 - Nb h apprenant
avDataCbl(11) = .Cells(nLigSrc, 7).Value ' 11 - C. Mère
avDataCbl(12) = .Cells(nLigSrc, 8).Value ' 12 - C. Fille (PA)
avDataCbl(13) = .Cells(nLigSrc, 9).Value ' 13 - Type
avDataCbl(14) = .Cells(nLigSrc, 10).Value ' 14 - Intervenants Conception
avDataCbl(15) = .Cells(nLigSrc, 11).Value ' 15 - Nb pages source Word/PDF
avDataCbl(16) = "" ' 16 - Nb pages source CEN
avDataCbl(17) = "" ' 17 - Nb éléments Moodle
avDataCbl(18) = .Cells(nLigSrc, 12).Value ' 18 - Prév fin de conception
avDataCbl(19) = .Cells(nLigSrc, 13).Value ' 19 - Prév livraison auteur
avDataCbl(20) = .Cells(nLigSrc, 14).Value ' 20 - Prév intégration LMS
avDataCbl(21) = .Cells(nLigSrc, 17).Value ' 21 - Budget prév. commandes auteurs
avDataCbl(22) = .Cells(nLigSrc, 18).Value ' 22 - Budget rectificatif (suivi mai N+1)
avDataCbl(23) = .Cells(nLigSrc, 19).Value ' 23 - Montant commande réel engagépar exemple le type en colonne 9 dans ton fichier d'entrée va en colonne 13 dans ton fichier de sortie.
Bonjour
je vous remercie !!
J ai effectué les modifications et tout fonctionne
Content que tu aies pu faire la correction qui te convient !