Changer zone de critère d'une macro

  • Initiateur de la discussion Initiateur de la discussion Lili189
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

Lili189

Guest
Bonjour,

j'utilise une macro qui m'importe un fichier CSV dans un classeur excel et m'alimente un tableau en fonction d'une lettre comme identifiant de ligne et un chiffre en colonne.
Les cellules vides sont remplies par la valeur WAIT (pour les 2 première lignes).

Lors du test de la macro mon tableau commencait en A1. Tout fonctionnait bien. Lors des tests il s'agissait d'un tableau de 3 lignes et 5 colonnes, mais mon vrai tableau va de A à H pour les lignes et de 1 a 12 pour les colonnes.

Mais en réalité, mon tableau va commencer à partir de la ligne 9. Et du coup ma macro ne fonctionne plus.

Mon tableau va de A9 à N26 et la macro doit s'arrêter en N26.

Comment modifier ma macro pour que cela se fasse ?


Code:
Sub ImprotCSV()
Dim table() As String
Dim lig As Integer
Dim cl As Range
Dim off1 As Integer
Dim off2 As Integer
 
With Application.FileDialog(msoFileDialogFilePicker)
    .InitialFileName = "C:\"
    .Show
    If .SelectedItems.Count > 0 Then Workbooks.Open (.SelectedItems(1))
End With


With ActiveWorkbook.Worksheets(1)
    lig = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
    ReDim table(1 To 5, 1 To lig)
    For i = 0 To lig - 1
        Set cl = .Range("A1").Offset(i, 0)
        off1 = InStr(cl.Value, ";")
        table(1, i + 1) = Left(cl.Value, off1 - 1)
 
        For j = 2 To 4
            off2 = InStr(off1 + 1, cl.Value, ";")
            table(j, i + 1) = Mid(cl.Value, off1 + 1, off2 - off1 - 1)
            off1 = off2
        Next j
 
        table(5, i + 1) = Right(cl.Value, Len(cl.Value) - off1)
    Next i
End With
 
ActiveWorkbook.Close
 
With Worksheets("Data")
    For i = 1 To lig
        Set cl = .Cells(.Columns(1).Find(table(1, i), LookIn:=xlFormulas, lookat:=xlWhole).Row - 1, .Rows(1).Find(table(2, i), LookIn:=xlFormulas, lookat:=xlWhole).Column)
        For j = 0 To 2
            cl.Offset(j, 0) = table(3 + j, i)
        Next j
    Next i
 
    Set cl = .Cells(.Columns(1).Find("A", LookIn:=xlFormulas, lookat:=xlWhole).Row - 1, .Rows(1).Find(1, LookIn:=xlFormulas, lookat:=xlWhole).Column)
    For i = 0 To .Rows(1).Find("*", , , , xlByColumns, xlPrevious).Columns - 1
        For j = 0 To .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row - 1
            If j + 1 <> 3 * Int((j + 1) / 3) Then
                If cl.Offset(j, i) = "" Then
                    cl.Offset(j, i) = "WAIT"
                End If
            End If
        Next j
    Next i
 
End With
 
End Sub

Je bloque je n'arrive pas à voir quelle partie modifier pour que la macro fonctionne dans mon tableau déplacé.

je vous joins le tableau de test(avec la macro qui fonctionne), le fichier CSV et le nouveau tableau à 10.

Merci d'avance à qui voudra bien m'aider 😱
 

Pièces jointes

Dernière modification par un modérateur:
Re : Changer zone de critère d'une macro

Bonjour Pierrejean 🙂

merci beaucoup de votre réponse.

Cela me convient. Sauf un petit détail. Je voudrais que pour les cellules vides, seul numéro et désignation doivent avoir WAIT, sauf la Couleur 😛 est-ce possible ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
847
Réponses
15
Affichages
662
Réponses
4
Affichages
692
Réponses
8
Affichages
753
Réponses
10
Affichages
634
Retour