Dans un classeur, j'ai une BDD depuis laquelle j'aimerais exporter des donn=
=E9es vers des tableaux situ=E9s dans d'autres feuilles dans le m=EAme clas=
seur.
Les tableaux sont de structures diff=E9rentes dans les colonnes.
Par exemple:
- En feuil2, "Groupes =E9lectrog=E8ne" =E0 4 colonnes et "Ondulaires" =E0 5=
colonnes.
- En feuil3, "Ateliers d'=E9nergie" =E0 5 colonnes et "Batteries de l'ateli=
er" =E0 4 colonnes.
Comment peut-on g=E9n=E9raliser le traitement dans une seule boucle.
C'est tout ce que tu as oublié, comme contrainte ? Est-ce qu'il ne peut pas y avoir deux fois le mmême type d'équipement pour le même site ?
C'est possible, seulement lorsqu'il y a un seul "Transformateur" et un seul "Régulateur", ils devront se situés sur la même ligne du tableau !
Apitos
Bonjour,
J'ai rencontré un cas (Plus d'un nom de site dans la tableau à remplir) ou le code suivant :
'--------- Ligne = Application.Match(C.Offset(, -3), .[D :D], 0) If Not IsNumeric(Ligne) Then L1 = L1 + 1 Ligne = L1 ElseIf Application.CountA(.Cells(Ligne, 8).Resi ze(, 4)) = 0 Then Ligne = L1 Else L1 = L1 + 1 Ligne = L1 End If '---------
Me trouve toujours la première occurrence seulement à savoir la ligne =8.
Mais dans le cas d'une autre occurrence suivante, Application.Match ne la t rouve pas !
http://www.cjoint.com/c/EFwwEinOvrI
Bonjour,
J'ai rencontré un cas (Plus d'un nom de site dans la tableau à remplir) ou le code suivant :
'---------
Ligne = Application.Match(C.Offset(, -3), .[D :D], 0)
If Not IsNumeric(Ligne) Then
L1 = L1 + 1
Ligne = L1
ElseIf Application.CountA(.Cells(Ligne, 8).Resi ze(, 4)) = 0 Then
Ligne = L1
Else
L1 = L1 + 1
Ligne = L1
End If
'---------
Me trouve toujours la première occurrence seulement à savoir la ligne =8.
Mais dans le cas d'une autre occurrence suivante, Application.Match ne la t rouve pas !
J'ai rencontré un cas (Plus d'un nom de site dans la tableau à remplir) ou le code suivant :
'--------- Ligne = Application.Match(C.Offset(, -3), .[D :D], 0) If Not IsNumeric(Ligne) Then L1 = L1 + 1 Ligne = L1 ElseIf Application.CountA(.Cells(Ligne, 8).Resi ze(, 4)) = 0 Then Ligne = L1 Else L1 = L1 + 1 Ligne = L1 End If '---------
Me trouve toujours la première occurrence seulement à savoir la ligne =8.
Mais dans le cas d'une autre occurrence suivante, Application.Match ne la t rouve pas !
http://www.cjoint.com/c/EFwwEinOvrI
Apitos
J'ai essayé de remplacer le code précédent par celui-ci :
'------------------------- Dim Ps As Range If Application.CountA(.[D:D], C.Offset(, -3)) > 0 Then 'MsgBox "Nombre de " & C.Offset(, -3) & " = " & Application.CountA(.[D:D], C.Offset(, -3)) Set Ps = .[D:D].Find(C.Offset(, -3), Look In:=xlWhole) If Not Ps Is Nothing Then firstAddress = C.Address Do Ligne = Ps.Row ' Vérifier si les trois cellules à droite si elles sont vides If Application.CountA(.Cells(Ligne, 5).Resize(, cln - 1 - 4)) = 0 Then Exit Do Else Set Ps = .[D:D].FindNext(Ps) End If
Loop While Not Ps Is Nothing And Ps.Add ress <> firstAddress Else L1 = L1 + 1 Ligne = li1 End If End If
'------------------------- Mais j'ai l'erreur :
Erreur d'exécution '9':
L'indice n'appartient pas à la sélection.
sur la ligne :
'------------------- Set Ps = .[D:D].Find(C.Offset(, -3), LookIn:=xlWhole) '-------------------
J'ai essayé de remplacer le code précédent par celui-ci :
'-------------------------
Dim Ps As Range
If Application.CountA(.[D:D], C.Offset(, -3)) > 0 Then
'MsgBox "Nombre de " & C.Offset(, -3) & " = " & Application.CountA(.[D:D], C.Offset(, -3))
Set Ps = .[D:D].Find(C.Offset(, -3), Look In:=xlWhole)
If Not Ps Is Nothing Then
firstAddress = C.Address
Do
Ligne = Ps.Row
' Vérifier si les trois cellules à droite si elles sont vides
If Application.CountA(.Cells(Ligne, 5).Resize(, cln - 1 - 4)) = 0 Then
Exit Do
Else
Set Ps = .[D:D].FindNext(Ps)
End If
Loop While Not Ps Is Nothing And Ps.Add ress <> firstAddress
Else
L1 = L1 + 1
Ligne = li1
End If
End If
'-------------------------
Mais j'ai l'erreur :
Erreur d'exécution '9':
L'indice n'appartient pas à la sélection.
sur la ligne :
'-------------------
Set Ps = .[D:D].Find(C.Offset(, -3), LookIn:=xlWhole)
'-------------------
J'ai essayé de remplacer le code précédent par celui-ci :
'------------------------- Dim Ps As Range If Application.CountA(.[D:D], C.Offset(, -3)) > 0 Then 'MsgBox "Nombre de " & C.Offset(, -3) & " = " & Application.CountA(.[D:D], C.Offset(, -3)) Set Ps = .[D:D].Find(C.Offset(, -3), Look In:=xlWhole) If Not Ps Is Nothing Then firstAddress = C.Address Do Ligne = Ps.Row ' Vérifier si les trois cellules à droite si elles sont vides If Application.CountA(.Cells(Ligne, 5).Resize(, cln - 1 - 4)) = 0 Then Exit Do Else Set Ps = .[D:D].FindNext(Ps) End If
Loop While Not Ps Is Nothing And Ps.Add ress <> firstAddress Else L1 = L1 + 1 Ligne = li1 End If End If
'------------------------- Mais j'ai l'erreur :
Erreur d'exécution '9':
L'indice n'appartient pas à la sélection.
sur la ligne :
'------------------- Set Ps = .[D:D].Find(C.Offset(, -3), LookIn:=xlWhole) '-------------------
DanielCo
Bonjour, Je n'ai ni le code ni les données pour pouvoir tester. Peux-tu me les faire parvenir. Daniel
Bonjour,
J'ai rencontré un cas (Plus d'un nom de site dans la tableau à remplir) ou le code suivant :
'--------- Ligne = Application.Match(C.Offset(, -3), .[D:D], 0) If Not IsNumeric(Ligne) Then L1 = L1 + 1 Ligne = L1 ElseIf Application.CountA(.Cells(Ligne, 8).Resize(, 4)) = 0 Then Ligne = L1 Else L1 = L1 + 1 Ligne = L1 End If '---------
Me trouve toujours la première occurrence seulement à savoir la ligne=8.
Mais dans le cas d'une autre occurrence suivante, Application.Match ne la trouve pas !
http://www.cjoint.com/c/EFwwEinOvrI
Bonjour,
Je n'ai ni le code ni les données pour pouvoir tester. Peux-tu me les
faire parvenir.
Daniel
Bonjour,
J'ai rencontré un cas (Plus d'un nom de site dans la tableau à remplir) ou le
code suivant :
'---------
Ligne = Application.Match(C.Offset(, -3), .[D:D],
0) If Not IsNumeric(Ligne) Then
L1 = L1 + 1
Ligne = L1
ElseIf Application.CountA(.Cells(Ligne,
8).Resize(, 4)) = 0 Then Ligne = L1
Else
L1 = L1 + 1
Ligne = L1
End If
'---------
Me trouve toujours la première occurrence seulement à savoir la ligne=8.
Mais dans le cas d'une autre occurrence suivante, Application.Match ne la
trouve pas !
Bonjour, Je n'ai ni le code ni les données pour pouvoir tester. Peux-tu me les faire parvenir. Daniel
Bonjour,
J'ai rencontré un cas (Plus d'un nom de site dans la tableau à remplir) ou le code suivant :
'--------- Ligne = Application.Match(C.Offset(, -3), .[D:D], 0) If Not IsNumeric(Ligne) Then L1 = L1 + 1 Ligne = L1 ElseIf Application.CountA(.Cells(Ligne, 8).Resize(, 4)) = 0 Then Ligne = L1 Else L1 = L1 + 1 Ligne = L1 End If '---------
Me trouve toujours la première occurrence seulement à savoir la ligne=8.
Mais dans le cas d'une autre occurrence suivante, Application.Match ne la trouve pas !
Les lignes en anomalie concernent les types d'équipement "Batterie sans entretien 48 V" et "Redresseur" qui n'ont pas de correspondance dans les feuilles. Est-ce que c'est normal ? Quant à l'erreur, étant donné qu'elle est due à ta modification du code, j'aimerais autant avoir, si possible, une version du code avant modification. Daniel
Bonjour,
Bon voila ou j'en suis avec mon classeur :
http://www.cjoint.com/c/EFxjpaWY6j1
Cela permettra de bien voir l'erreur :
Erreur d'exécution '9':
L'indice n'appartient pas à la sélection.
Les lignes en anomalie concernent les types d'équipement "Batterie sans
entretien 48 V" et "Redresseur" qui n'ont pas de correspondance dans
les feuilles. Est-ce que c'est normal ? Quant à l'erreur, étant donné
qu'elle est due à ta modification du code, j'aimerais autant avoir, si
possible, une version du code avant modification.
Daniel
Les lignes en anomalie concernent les types d'équipement "Batterie sans entretien 48 V" et "Redresseur" qui n'ont pas de correspondance dans les feuilles. Est-ce que c'est normal ? Quant à l'erreur, étant donné qu'elle est due à ta modification du code, j'aimerais autant avoir, si possible, une version du code avant modification. Daniel