Copier sous condition, plusieurs bouton de contrôle

CBD90 - Modifié le 4 déc. 2024 à 18:00
yg_be Messages postés 23366 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 décembre 2024 - 4 déc. 2024 à 21:31

Bonjour,

Je tente de créer une feuilles résumé avec un VBA qui copie mes données sous conditions.

Je veux utiliser le même type de VBA pour tout mes boutons mais pour chaque bouton je change le range de cellule et les autres valeurs associé aux bonnes colonnes source et destination.

Ce n'est pas le bouton qui ne fonctionne pas mais le VBA qui m'indique un erreur.

Je dois créer une nouvelle feuille résumé pour chaque étape du projet. Soit pour chaque load(chargement de ce qu'on envoie).


Celà fonctionne pour mes 2 premiers boutons ("load 1 et Load 2") mais pas pour les autres.
Ce serait la ligne en gras italique qui ne fonctionne pas


Sub LOAD3()

Dim Source As Worksheet, Cible As Worksheet, RgSource As Range, Rgcible As Range, i%
Dim Données(), Résultats()

Set Source = ActiveWorkbook.Worksheets("Shipping List")
Set Cible = ActiveWorkbook.Worksheets("LACEY")

Set RgSource = Source.Range("E12:AB2019") 'Plage contenant toutes les données
Set Rgcible = Cible.Range("N23") '1ère cellule de la plage cible

'On nettoie la cible (valeurs et formats)
Rgcible.Resize(2008, 5).Clear

Application.ScreenUpdating = False

'on stocke dans un tableau de variables toutes les valeurs de la plage de données
Données = RgSource.Value2

'i : Index pour de décalage en ligne de la plage cible
i = 0

For j = 1 To UBound(Données, 1) 'J varie de 1 aux nombre de lignes de la plage des données (ici 2008 lignes)

If IsNumeric(Données(j, 20)) And Not IsEmpty(Données(j, 20)) Then
If Données(j, 20) > 0 Then
'Ici Données(j,20) est une valeur numérique supérieure à 0

Select Case Données(j, 1)
Case "CAP", "USA", "SPF", "LAM", "LVL", "PLY"
'On incrémente i pour le prochain résultat
i = i + 1
'on redimensionne le tableau Résultats et on le remplit (au début i vaut 1)
'remarque le tableau est en colonnes, lignes et non pas en lignes, colonnes
ReDim Preserve Résultats(1 To 5, 1 To i)
Résultats(1, i) = 3
Résultats(2, i) = Données(j, 1)
Résultats(3, i) = Données(j, 4)
Résultats(4, i) = Données(j, 24)
Résultats(5, i) = Données(j, 20)

Case Else
'Rien
End Select
End If
End If
Next

'On attribue à la plage cible redimensionnée les résultats
'(on utilise la fonction TRANSPOSE pour passer le tableau en lignes, colonnes)
Rgcible.Resize(i, 5).Value2 = Application.Transpose(Résultats)

Application.Goto Rgcible.Offset(-1, 0), True
Application.ScreenUpdating = False

End sub

Merci de votre aide 

Je suis encore débutante dans les VBA
Windows / Chrome 131.0.0.0

A voir également:

1 réponse

yg_be Messages postés 23366 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 décembre 2024 Ambassadeur 1 556
4 déc. 2024 à 21:31

bonjour,

Cela me semble inutilement compliqué.

Pourquoi ne pas construire directement Résultats avec les bonnes dimensions, pour éviter de le transposer ensuite?

Pourquoi passer par le tableau "Résultats", au lieu de directement enregistrer les valeurs dans les cellules à partir de "Rgcible"?

A tout hasard:

Rgcible.offset(i-1,1)= 3
Rgcible.offset(i-1,2) = Données(j, 1)
Rgcible.offset(i-1,3) = Données(j, 4)
Rgcible.offset(i-1,4) = Données(j, 24)
Rgcible.offset(i-1,5) = Données(j, 20)
0