Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

instr

2 réponses
Avatar
arissam
Bonjour :

J'ai deux codes quasi identiques; l'un marche, l'autre non.
Les seules diff=E9rences consistent en changement de colonne source et
de colonne destination.
- Le code qui marche :

Sub copier()
Dim Source As Range, Dest As Range
Set Source =3D Worksheets("feuil1").Range("a:a")
Set Dest =3D Worksheets("feuil2").Range("a1")

For Each C In Source
If InStr(1, C.Value, "pl", vbTextCompare) > 0 Then
C.EntireRow.Copy Dest.Offset(A)
A =3D A + 1

End If
Next
Set Source =3D Nothing: Set Dest =3D Nothing
End Sub

- Le code qui ne marche pas :

Sub copier()
Dim Source As Range, Dest As Range
Set Source =3D Worksheets("feuil1").Range("H:H")

Set Dest =3D Worksheets("feuil2").Range("H1")

For Each C In Source
If InStr(1, C.Value, "pl", vbTextCompare) > 0 Then
C.EntireRow.Copy Dest.Offset(H)
H =3D H + 1

End If
Next
Set Source =3D Nothing: Set Dest =3D Nothing
End Sub

Merci pour toute explication donn=E9e.

2 réponses

Avatar
MichD
Bonjour,

Dans la première procédure :
C.EntireRow.Copy Dest.Offset(A)
Le A représente une variable débutant à 0 et s'incrémentant
à la ligne A = A+1 à chaque boucle que fait la procédure. En fait
ce "A" fait déplacer la copie d'une ligne inférieure pour chacune des
valeurs. Un point important, la copie de la ligne se fait dans la feuille
de destination à partir de la colonne A:A

Dans la deuxième procédure,
| C.EntireRow.Copy Dest.Offset(H)
La copie de la ligne entière débute en colonne H
Tu ne peux pas copier une ligne de 256 colonnes (lignes entières)
vers une destination débutant en colonne H . Il manque 8 colonnes
à la ligne pour que la copie puisse s'effectuer.

Une façon de contourner la chose est d'écrire cette ligne comme ceci :
C.EntireRow.Copy Dest.Offset(H,-7)
Le -7 indique un déplacement de 7 colonnes vers la gauche, c'est-à-dire
jusqu'en A. Dès lors, tu auras 256 colonnes dans ta feuille source qui se
copiera dans 256 colonnes de ta feuille destination, et tout le monde sera
heureux.



MichD
--------------------------------------------
"arissam" a écrit dans le message de groupe de discussion :


Bonjour :

J'ai deux codes quasi identiques; l'un marche, l'autre non.
Les seules différences consistent en changement de colonne source et
de colonne destination.
- Le code qui marche :

Sub copier()
Dim Source As Range, Dest As Range
Set Source = Worksheets("feuil1").Range("a:a")
Set Dest = Worksheets("feuil2").Range("a1")

For Each C In Source
If InStr(1, C.Value, "pl", vbTextCompare) > 0 Then
C.EntireRow.Copy Dest.Offset(A)
A = A + 1

End If
Next
Set Source = Nothing: Set Dest = Nothing
End Sub

- Le code qui ne marche pas :

Sub copier()
Dim Source As Range, Dest As Range
Set Source = Worksheets("feuil1").Range("H:H")

Set Dest = Worksheets("feuil2").Range("H1")

For Each C In Source
If InStr(1, C.Value, "pl", vbTextCompare) > 0 Then
C.EntireRow.Copy Dest.Offset(H)
H = H + 1

End If
Next
Set Source = Nothing: Set Dest = Nothing
End Sub

Merci pour toute explication donnée.
Avatar
MichD
Si tu veux que la copie débute en colonne H dans la feuille de destination

Tu peux utiliser cette ligne de code :
Dim NbColonnes As Integer
NbColonnes représente le nombre de colonnes de la feuille source que
tu veux copier incluant la colonne A à chaque boucle

La variable NbColonnes ne peut pas être plus grande que 248
soit 256 colonnes - 8 (représentée par la colonne H)

c.resize(,NbColonnes).Copy Dest.Offset(H)

MichD
--------------------------------------------
"MichD" a écrit dans le message de groupe de discussion : ionigj$9gb$

Bonjour,

Dans la première procédure :
C.EntireRow.Copy Dest.Offset(A)
Le A représente une variable débutant à 0 et s'incrémentant
à la ligne A = A+1 à chaque boucle que fait la procédure. En fait
ce "A" fait déplacer la copie d'une ligne inférieure pour chacune des
valeurs. Un point important, la copie de la ligne se fait dans la feuille
de destination à partir de la colonne A:A

Dans la deuxième procédure,
| C.EntireRow.Copy Dest.Offset(H)
La copie de la ligne entière débute en colonne H
Tu ne peux pas copier une ligne de 256 colonnes (lignes entières)
vers une destination débutant en colonne H . Il manque 8 colonnes
à la ligne pour que la copie puisse s'effectuer.

Une façon de contourner la chose est d'écrire cette ligne comme ceci :
C.EntireRow.Copy Dest.Offset(H,-7)
Le -7 indique un déplacement de 7 colonnes vers la gauche, c'est-à-dire
jusqu'en A. Dès lors, tu auras 256 colonnes dans ta feuille source qui se
copiera dans 256 colonnes de ta feuille destination, et tout le monde sera
heureux.



MichD
--------------------------------------------
"arissam" a écrit dans le message de groupe de discussion :


Bonjour :

J'ai deux codes quasi identiques; l'un marche, l'autre non.
Les seules différences consistent en changement de colonne source et
de colonne destination.
- Le code qui marche :

Sub copier()
Dim Source As Range, Dest As Range
Set Source = Worksheets("feuil1").Range("a:a")
Set Dest = Worksheets("feuil2").Range("a1")

For Each C In Source
If InStr(1, C.Value, "pl", vbTextCompare) > 0 Then
C.EntireRow.Copy Dest.Offset(A)
A = A + 1

End If
Next
Set Source = Nothing: Set Dest = Nothing
End Sub

- Le code qui ne marche pas :

Sub copier()
Dim Source As Range, Dest As Range
Set Source = Worksheets("feuil1").Range("H:H")

Set Dest = Worksheets("feuil2").Range("H1")

For Each C In Source
If InStr(1, C.Value, "pl", vbTextCompare) > 0 Then
C.EntireRow.Copy Dest.Offset(H)
H = H + 1

End If
Next
Set Source = Nothing: Set Dest = Nothing
End Sub

Merci pour toute explication donnée.